Você está na página 1de 16

A organização do computador

Um computador digital consiste em um sistema interconectado de


processadores, memórias e dispositivos de entrada e saída.
Estas são as três categorias básicas de componentes de um computador
moderno. Cada elemento de um computador qualquer se encaixará em
uma destas classificações. Vamos analisar em seguida cada um deles.

Processadores

A unidade central de processamento (UCP ou CPU – Central Processing


Unit) é o centro do computador.

A execução de um programa normalmente consiste em trazer um


programa de um dispositivo de armazenamento (disco, por exemplo) para
a memória principal. Da memória principal, o programa é transferido para
a CPU, uma instrução por vez. É dentro da CPU que
o verdadeiro processamento ocorre; onde as instruções do programa
serão interpretadas e executadas.

Uma CPU ( ou processador ) é composta por três partes principais:

- a ULA ( Unidade Lógica e Aritmética ): onde o processamento dos


dados ocorre

- os registradores da CPU: onde os dados de entrada ( operandos ) ou


saída ( resultado ) das operações são armazenados.

- a UC ( Unidade de Controle ): que gera os sinais que coordenam o


funcionamento da CPU.

Existe ainda um quarto componente, que é o sistema de barramentos


internos da CPU, que promove a comunicação ( movimento de dados )
entre os outros três elementos.

Como podemos ver na figura seguinte, todos estes elementos se


comunicam através de um barramento.
Figura 1 - A organização de um computador simples

Na figura, também podemos ver que a CPU internamente é composta


por várias partes distintas. A unidade de controle é responsável por buscar
instruções na memória e determinar o seu tipo ( ou seja, decodificar a
instrução ). A Unidade Lógica e Aritmética executa operações matemáticas
simples como adição e E booleano.

A CPU também contém uma pequena quantidade de alta velocidade, que


é utilizada na execução de instruções. Essa memória é organizada
em registradores. Cada registrador tem um tamanho fixo (comprimento
em bits) e um propósito específico, como o Contador de Programa (PC
– Program Counter). A função de PC é identificar qual a próxima instrução
a ser trazida para a CPU do programa em execução. Ou
o Acumulador que é acessado pelos programas para fornecer operandos
ou ler o resultado de operações. O acumulador é um registrador visível ao
programador. Já o PC nem sempre é.

Na figura abaixo, segue um diagrama de blocos simplificado do caminho


de dados antes e depois da execução de uma instrução pela ULA ( Unidade
Lógica e Aritmética ) de um microprocessador.

Os registradores e a ULA formam um caminho de dados.


Figura 2 - Um exemplo de caminho de dados

Os dados são movimentados para um ou para os dois registradores que


alimentam a ULA com os dados de entrada. E os dados são movidos deles
para a própria ULA através de um barramento que interconecta estes
elementos.
A ULA ira realizar as operações matemáticas mais básicas, como soma e
comparação e mover o resultado para um registrador de saída.
Posteriormente o conteúdo deste registrador será movido para outro
registrador e de lá para a memória principal.

Neste ponto, podemos estabelecer a distinção entre dois tipos diferentes


de instruções: instruções registrador-registrador e instruções registrador-
memória. As primeiras dependem apenas dos dados que estão
armazenados na CPU e as segundas precisam buscar dados da memória
principal, através do barramento.

O processo de submeter dois valores à ULA e obter um resultado é


chamado de ciclo do caminho de dados. Este ciclo é o núcleo da maioria
das CPUs, pois determina o que ela pode fazer. Quanto mais rápido a CPU
conseguir executar este ciclo, mais rápido se dará o processamento.

Além do ciclo do caminho de dados, interno à CPU, temos o ciclo externo,


que determina como a CPU interage com os dados que estão fora da CPU,
na memória principal.
A CPU executa cada instrução em uma série de pequenos passos.

1- Trazer a próxima instrução da memória até o registrador


2- Alterar o contador de programa para indicar a próxima instrução
3- Determina o tipo da instrução
4- Se a instrução necessitar de uma palavra da memória, determinar
onde esta palavra está
5- Trazer a palavra para dentro de um registrador da CPU, se necessário
6- Executar a instrução
7- Voltar à etapa 1 para iniciar a execução da instrução seguinte

Esta seqüência costuma ser denominada ciclo buscar-decodificar-


executar. É fundamental para a operação de todos os computadores.

Lembre que o programa é armazenado na memória na forma instruções


que o processador consiga interpretar. Voltando à máquina multiníveis, o
programa escrito originalmente em linguagem de alto nível sofreu vários
níveis de tradução antes que pudesse ser executado diretamente pelo
processador.

Processadores
Também conhecido como UCP ( Unidade Central de Processamento
) ou CPU ( Central Process Unit ) na sigla em inglês, processador é o
cérebro do computador. Sua função é executar os programas
armazenados na memória principal, buscando cada uma das instruções,
examinando-as e executando-as uma após a outra. É constituído de
diversas partes: a unidade de controle é responsável por buscar as
instruções na memória principal e por determinar o tipo de cada instrução,
isto é, decodificar as instruções. A unidade de lógica aritmética ( ULA
) realiza um conjunto de operações necessárias à execução das
instruções. O processador possui uma pequena memória de alta
velocidade,composta pelos registradores da CPU, utilizada para
armazenar resultados temporários e informações de controle. Essa
memória é formada por um conjunto de registradores, cada qual com
determinado tamanho e função. O registrador mais importante é o
Program Counter, ( PC ) cujo valor aponta para a próxima instrução a ser
buscada na memória para ser executada. Outros registradores
importantes são o Registrador de Instruções ( IR - Instruction Register )
que armazena a instrução que está sendo executada, o Registrador de
Status, que armazena os bits ( flags ) referentes ao resultado da última
operação executada ( se o resultado foi zero ou negativo, por exemplo ),
e o Acumulador, utilizado pelos programas para armazenar os
resultados das operações processadas.
Figura 3- Estrutura de um Processador

Quando diz-se que um processador é de 8, 16, 32 ou 64 bits, por


exemplo, geralmente é uma referência ao número de bits armazenados
nos registradores da CPU. Uma CPU de 64 bits, por exemplo, possui um
registrador acumulador de 64 bits, conectado a um barramento também
de 64 bits, sendo capaz de manipular dados com esse número de
bits durante uma única operação.

Essa estrutura ainda segue a estrutura básica Von Neumann,


estabelecida no projeto de um dos primeiros computadores da história, o
IAS.
Figura 4 - Estrutura Básica do computador de Von Neumann.

Repare que a arquitetura de Von Neumann, utiliza uma memória


compartilhada para dados e instruções de programa. A Unidade de
Controle determina se será realizada uma operação de leitura ou de
escrita na memória. A ULA, recebe dados de entrada das operações,
provenientes da memória ou do registrador acumulador.
Tanto os dados quanto as instruções devem estar armazenados
numa memória porque o computador sozinho não faz nada. É necessário
fornecer instruções do que fazer por meio de um programa ( que é uma
sequência de instruções ). Para tanto, durante a execução de programas,
o processador constantemente busca instruções na memória, para depois
decodificá-las e, por fim, executá-las.

Para ser executada pelo processador, uma instrução precisa ser


dividida em uma série de passos, denominada ciclo da busca-
decodificação-execução, a saber:
Figura 5- ciclo básico de uma instrução de programa.

Além desse ciclo simples de 3 estágios, podemos também


considerar mais dois estágios: a busca do(s) operando(s) de entrada da
operação implementada pela instrução e o armazenamento do(s)
resultado(s). Nesse caso, temos cada instrução com 5 estágios.

1- Estágio de Busca:

- busca da próxima instrução na memória e armazenamento no registrador de


instruções,
Programas de computador são constituídos por uma sequência
de instruções que se encontram armazenados na memória
do computador. Portanto, o processador deve ser capaz de
mover ( buscar ) instrução por instrução antes de executá-las.
Cada instrução buscada é armazenada no registrador de
instruções ( Instruction Register - IR ) para ser decodificada, isto é,
para o processador gerar os sinais de controle que implementam
a execução da operação da forma correta.

- atualização do valor do program counter, de modo a apontar para a instrução


seguinte,
Para ser capaz de buscar instruções, o processador deve ser
capaz de conhecer a localização das instruções, ou seja,
do endereço de cada instrução na memória. O endereço da
próxima instrução a ser buscada é armazenado em um registrador
especial chamado PC ( Program Counter ou Contador de
Programa ). Esse registrador é na realidade um ponteiro, pois contém
o endereço da próxima instrução a ser buscada na memória.

2- Estágio de Decodificação:
- determinação do tipo de instrução que está armazenada no registrador de
instruções,
Conforme vimos, as instruções devem estar armazenadas no
registrador de instruções ( IR ), para serem decodificadas.
Na verdade, cada instrução é composta por dois campos de bits:
o Opcode ( ou código da operação ) e o campo dos operandos.
O primeiro contém o código binário que representa qual
operação a instrução executa ( por exemplo, uma operação aritmética,
lógica, de controle ou movimento de dados ). O segundo,
representa a informação de entrada que será tratada.
Portanto, o Opcode é decodificado por um decodificador da
Unidade de Controle do processador para que a instrução correta
seja executada.

3- Busca do(s) operando(s) ( se houver ):

- se a instrução precisar de uma palavra armazenada na memória, nesse passo


deve ser determinado onde essa palavra está armazenada,
O operando pode representar tanto o dado a ser tratado ( número
ou caractere no formato binário ), quanto um endereço de
memória onde o dado a ser tratado se encontra. No segundo
caso, faz-se necessária uma segunda busca à memória.
A diferença sobre a natureza do operando, encontra-se codificada
no opcode da instrução.

- busca da palavra, se necessário, e armazenamento em um dos registradores,


Se o operando é um endereço, o dado é buscado para ser
armazenado em um registrador da CPU.

4- Execução:

- execução da instrução,
Com todos os dados armazenados em registradores da CPU e o
opcode da instrução já decodificado, a instrução está no ponto de
ser executada, pois todas as informações necessárias tornara-se
disponíveis ou já foram interpretadas pelo processador.
Desse modo, a Unidade de Controle da CPU já pode coordenar
os circuitos digitais da Unidade Lógica e Aritmética ( ULA ) para os
dados serem processados pelos circuitos selecionados e os
resultados serem obtidos.

5- Gravação do resultado:

- armazenamento do resultado,
Os resultados obtidos, são os dados de saída da instrução
executada. Resultados de operações aritméticas e lógicas tendem a ser
armazenados em registradores da CPU ( geralmente no
registrador acumulador ).
Se deseja-se que tais dados resultantes sejam armazenados na
memória principal, faz-se necessária a execução de outra
instrução para movimentar o dado de um registrador da CPU
para a memória.

- retorno ao primeiro passo para iniciar a execução da próxima instrução.


Durante a execução, o PC é incrementado ( isto é, seu valor
aumenta ), de tal modo que ele aponta para a próxima instrução do
programa. Geralmente a próxima instrução localiza-se no
endereço seguinte ao da instrução anterior. Entretanto, no caso de
instruções de desvio, como saltos ( JUMPs, GOTOs )
condicionais e incondicionais chamadas a sub-rotinas ( CALL ) ou retorno de
sub-rotina ( RETURN ), o endereço da instrução seguinte não é
o seguinte ao da última instrução executada. Essas instruções
alteram o valor do registrador PC, de modo que os programas
não precisam seguir uma sequência rígida de processamento, mas
podem realizar decisões condicionadas aos dados de entrada.

Princípios de Projeto para Computadores


Modernos
Projetistas de máquinas precisam estar sempre atentos às mudanças de
tecnologia que afetam as velocidades dos componentes de um
computador. Desta forma, um conjunto de princípios de projeto deve ser
observado por esses projetistas. Esses princípios são:

- todas as instruções são diretamente executadas por hardware –


nenhuma delas é interpretada por microinstruções.
Até algum tempo, a tecnologia dominante era caracterizada por uma
arquitetura de muitas instruções que realizavam operações complexas.
Para tanto, utilizavam o conceito de microprogramação. Cada instrução
complexa era associada a um microprograma composto por
microinstruções simples. A tendência atual segue a direção oposta, isto é,
processadores compostos por um número reduzido de instruções
elementares, que são decodificadas e executadas diretamente pelo
hardware ( nível lógico digital ).
Assim, os programas tendem a ser compostos por um número maior de
instruções mais elementares do que um número menor de instruções mais
complexas. Entretanto, instruções elementares são executadas
individualmente em um tempo bem menor, principalmente ao se usar
técnicas de paralelismo, tais como pipelining.

- maximizar a taxa à qual as instruções são executadas – o paralelismo


pode representar um papel muito importante na melhora do desempenho.
Uma vantagem associada a instruções mais elementares é um formato
mais parecido, com um tempo de execução mais parecido e estágios mais
parecidos.
Essa característica propicia o uso da tecnologia conhecida como
pipelining.

- as instruções precisam ser facilmente decodificadas – o processo de


decodificação é que determina os recursos usados na execução das
instruções.
Instruções mais simples ( elementares ) e em menor número levam a
um processo de decodificação mais simples

- somente as instruções de load e store devem referenciar a memória –


estabelecer que os operandos para a maioria das instruções venham de e
retornem para registradores.
Os registradores da CPU ocupam o topo da hierarquia como a memória
mais rápida presente em qualquer sistema computacional. Naturalmente,
o desempenho é maior se os dados a serem processados estiverem nos
registradores na maior parte do tempo.

- projetar uma máquina com muitos registradores – como o acesso à


memória é relativamente lento, há necessidade de se ter vários
registradores à disposição.

Os princípios descritos acima estão associados à tecnologia RISC (


computadores com um conjunto reduzido de instruções ), que são um
contraponto à tecnologia CISC ( computadores com um conjunto
complexo de instruções ).

Uma das maneiras de melhorar o desempenho das máquinas é


aumentar a velocidade do clock, porém existem limites tecnológicos para
isso.
Dessa forma, os projetistas focam no paralelismo como forma de obter
melhor desempenho para uma mesma velocidade de clock. No nível de
instruções, o paralelismo é explorado dentro das instruções individuais,
de modo a conseguir que a máquina execute mais instruções por segundo.
No nível de processador, vários processadores trabalham junto na solução
do mesmo problema.

Além disso, de nada adiantaria simplesmente aumentar a frequência do


clock se há problemas com o superaquecimento, ou pelo fato de exeiste
um tempo mínimo que um sinal elétrico leva para ser propagar.
Aumentando a capacidade de integração, conforme a evolução da
microeletrônica, permite diminuir as dimensões dos componentes e o
tempo de propagação dos sinais. Mas existe um limite para isso.
Transistores não podem ter dimensões menores do que as de um átomo.
Portanto, um bom projeto a nível de arquitetura e organização é
fundamental na melhora da performance do sistema.
Paralelismo
Uma forma de melhorar o desempenho é por meio de tecnologias de
paralelismo, o que significa que um sistema que possui diversos
componentes trabalhando simultaneamente. Por exemplo, se um
processo qualquer for constituído de duas etapas, o efeito de elas serem
executadas simultaneamente é praticamente o mesmo de essas duas
etapas serem executadas sequencialmente com o dobro da velocidade.

Para classificar diferentes formas de paralelismo em computação, foi


estabelecida a taxonomia de Flynn:

SISD ( Single Instruction Single Data ): Fluxo único de


instruções sobre um único conjunto de dados.
SIMD ( Single Instruction Multiple Data ): Fluxo único de
instruções em múltiplos conjuntos de dados.
MISD ( Multiple Instruction Single Data ): Fluxo múltiplo de
instruções em um único conjunto de dados.
MIMD ( Multiple Instruction Multiple Data ): Fluxo múltiplo de
instruções sobre múltiplos conjunto de dados.

Existem essencialmente dois tipos de paralelismo em sistemas


computacionais, paralelismo em nível de instrução e em nível de
processador:

Paralelismo no Nível de Instrução: Nesse caso temos um único


processador ( CPU ), e o paralelismo é explorado em cada instrução
individualmente.
Uma instrução é geralmente composta por
diversos estágios, que utilizam circuitos independentes, podendo, portanto,
funcionar simultaneamente. Dois
exemplos de tecnologias que fazem uso do paralelismo em nível de instrução
são a
técnica
de pipelining e de processadores superescalares.

Paralelismo no Nível do Processador: Nesse caso temos mais de uma CPU,


ou núcleo ( core ), ou múltiplos computadores em rede, dividindo o
processamento. Também temos a
possibilidade de processadores vetoriais ou matriciais, que realizam uma
operação sobre um grupo de dados.

Pipeline ( Pipelining )
Usando a tecnologia pipeline, a arquitetura do processador tira
proveito do fato de a maioria das instruções serem compostas por
diversos estágios comuns. Por exemplo, toda instrução, precisa ser
buscada na memória ( onde se encontra o programa que a contém );
depois será decodificada ( nesse estágio o processador lê o código da
instrução para definir qual operação será executada ); algumas instruções
requerem a busca de um operando na memória ( dado de entrada da
operação ), e por fim a execução da operação e a gravação do resultado.
Esses estágios são muitas vezes denominados em inglês como:

Instruction Fetch ( IF ) - Busca da Instrução.


Instruction Decode ( ID ) - Decodificação do Opcode da
Instrução
Operand Fetch ( OF ) - Busca do Operando ( na memória ou em
um registrador ).
Execution ( E ) - Execução da Operação.
Write Back ( WB ) - Gravação do Resultado

Vamos primeiramente observar na figura abaixo, como é o


processamento de um programa composto por instruções com esses 5
estágios em um processador que não faz uso da tecnologia pipeline.

Figura 6 - Processamento de instruções sem pipeline.

Agora, repare como é o processamento fazendo uso de uma


pipeline de instruções. A busca da segunda instrução ocorreu logo após a
busca da primeira instrução terminar. Enquanto a instrução 1 é
decodificada, a instrução 2 é buscada.
Temos sempre uma nova instrução sendo buscada a cada
ciclo máquina ( ou seja, ao fim de cada estágio ). Efetivamente, a taxa de
emissão de novas instruções foi multiplicada por 5, que é o número de
estágios de cada instrução. Podemos também perceber que, após o 5º
ciclo de máquina, temos 5 estágios sendo processados simultaneamente,
cada um proveniente de uma instrução diferente. A velocidade do
processamento é ( quase ) multiplicada por 5.
Figura 7 - Processamento em uma pipeline de 5 estágios.

Naturalmente, o tempo de cada


instrução individualmente permanece o mesmo utilizando ou não uma
pipeline de instruções. Só que a taxa de emissão de instruções aumentou.
E temos um processamento paralelo de estágios diferentes de instruções
diferentes, o que leva a um aproveitamento maior do tempo ( que em um
sistema computacional digital é determinado pelos ciclos de clock ).
A filosofia pipeline é a mesma de uma linha de montagem
industrial, onde o processo de fabricação de um produto é dividido em
diversos estágios ou etapas. Essas etapas são realizadas todas
simultaneamente durante o processo, embora um produto possa estar no
início da linha de montagem ( passando pelos primeiros estágios ), ou no
final dela ( passando pelos últimos estágios ).

Processadores Superescalares
Um processador de super-escalar é capaz de executar
mais de uma instrução por ciclo de clock. A manutenção dessa taxa de
execução elevada é principalmente um problema de alocação de recursos
do processador (que possui diversas unidades funcionais de execução de
instrução ).

Uma arquitetura de CPU superescalar implementa uma forma de


paralelismo chamado de nível de instrução paralelismo dentro de um único
processador.Desse modo, permite uma alta taxa de emissão de novas
instruções. Um processador superescalar executa mais de uma instrução
durante um ciclo de relógio, através do envio simultâneo de múltiplas
instruções a diferentes unidades funcionais no processador. Cada unidade
funcional não é um núcleo de CPU em separado, mas um recurso de
execução dentro de uma única CPU, tais como uma unidade lógica
aritmética, um shifter ( deslocadr ) de bits, um multiplicador de palavras
binárias, unidades de LOAD ( leitura da memória ) ou STORE ( escrita na
memória ).
Na taxonomia de Flynn , um processador superescalar single-core é
classificado como um processador SISD, enquanto um processador
superescalar multi-core é classificado como um processador MIMD.

Enquanto uma CPU superescalar normalmente também implementa uma


pipeline de instruções, as arquiteturas Pipelining e Arquitetura
Superescalar são consideradas diferentes tecnologias de aprimoramento
de desempenho.
As instruções são emitidos a partir de um fluxo de instrução sequencial,
que é o programa em execução, mas o hardware da CPU verifica
dinamicamente as dependências de dados entre instruções em tempo de
execução. Permitindo que diferentes instruções sejam executadas
simultaneamente, desde que os dados de entrada de uma não dependa
do resultado fornecido pela outra. Também existem compiladores para
processadores superescalares, que montam o programa executável de tal
maneira que a ordem de execução das instruções é otimizada para
processadores superescalares, Eles geram um código tal que minimiza as
chances de instruções consecutivas dependam do resultado uma da outra,
possibilitando a execução simultânea.

Figura 8 - Estágios de processamento de uma instrução em uma


arquitetura superescalar.
Na figura acima, repare que, do mesmo modo que em uma
pipeline de instruções, o processador superescalar também possui 5
estágios:
S1 ( busca ) , S2 ( decodificação ), S3 ( busca do operando ), S4 (
execução ), e S5 ( gravação do resultado ). Entretanto, o estágio S4 possui
múltiplas unidades de execução, o que permite mais de uma instrução
sendo executadas ao mesmo tempo.
Um detalhe que vale a pena observar, é o fato de que o
tempo médio gasto pelos estágios S1, S2 e S3 não podem superar o
tempo de S4, do contrário o processador não "acumularia", mais de uma
instrução sendo executadas simultaneamente.

Você também pode gostar