• Nenhum resultado encontrado

No Capítulo 1, estudamos conceitos relativos ao armazenamento de dados e à memória de um computador. Além de armazenar dados, o computador deve ser capaz de manipulá-los de acordo com um algoritmo. Tal manipulação exige que a máquina seja dotada de mecanismos capazes de executar operações com dados e coordenar a seqüência das mesmas. Essas tarefas são executadas por um mecanismo denominado Unidade Central de Processamento (UCP). Esta unidade e os tópicos a ela relacionados são o objeto de estudo deste capítulo.

C A P Í T U L O 2

2.1 Arquitetura de computadores 2.2 Linguagem de máquina

O repertório de instruções

Uma linguagem de máquina ilustrativa 2.3 Execução de programas

Um exemplo de execução de programa Programas versus dados

*2.4 Instruções aritméticas e lógicas

Operações lógicas

Operações de rotação e deslocamento Operações aritméticas

*2.5 Comunicação com outros

dispositivos

Comunicação via controladores Taxas de comunicação de dados

*2.6 Outras arquiteturas

Canalização (pipelining)

Máquinas com multiprocessamento

2.1 Arquitetura de computadores

Os circuitos de um computador que executam operações com dados (como adição e subtração) não são diretamente conectados às células de armazenamento da memória principal do computador, ficando isolados em uma parte conhecida como unidade central de processamento ou UCP (cen-

tral processing unit) ou, simplesmente, processador. Esta unidade consiste em duas partes: a unidade

aritmética e lógica, que contém os circuitos que manipulam os dados, e a unidade de controle, que contém os circuitos que coordenam as atividades da máquina.

Para armazenamento temporário de informação, a UCP contém células ou registradores, que são semelhantes às posições da memória principal. Tais registradores podem ser classificados como de propósito geral ou propósito específico. Conheceremos alguns dos registradores de propósito específico na Seção 2.3. Por ora, estudaremos a função dos registradores de propósito geral.

Os registradores de propósito geral funcionam como posições temporárias de armazenamento para dados que estão sendo manipulados pela UCP. Esses registradores guardam os dados de entrada da unidade aritmética e lógica e proporcionam um local de armazenamento para os seus resultados. Para executar uma operação sobre dados guardados na memória principal, é responsabilidade da unidade de controle transferir os dados da memória para os registradores de propósito geral, informar a unidade aritmética e lógica, cujos registradores armazenam os dados, ativar o circuito apropriado contido nesta unidade e informá-la sobre qual registrador receberá o resultado.

Para poder transferir padrões de bits entre o processador de um computador e a memória princi- pal, tais elementos são interconectados por um conjunto de fios chamado via (bus) (Figura 2.1). Através desta via, o processador pode extrair ou ler dados da memória principal e, para tanto, ele fornece o endereço da posição de memória correspondente juntamente com um comando de leitura. Do mesmo modo, o processador pode colocar ou escrever dados na memória, fornecendo, para isso, o endereço da posição de destino e os dados a serem armazenados, acompanhados de um sinal de gravação.

Com este mecanismo em mente, verificamos que executar uma operação de adição com dados armazenados na memória principal é mais do que efetuar uma mera execução desta operação. O proces- so envolve esforços combinados entre a unidade de controle, que coordena a transferência de informação entre os registradores e a memória principal, e a unidade aritmética e lógica, que efetua a operação de adição propriamente dita, quando for instruída para isso pela unidade de controle.

O processo completo da adição de dois números armazenados na memória poderia ser dividido em uma seqüência de passos, conforme ilustra a Figura 2.2. Em resumo, os dados devem ser transferi- dos da memória principal para o processador, onde os valores são somados, e o resultado deve ser arma- zenado em uma célula de memória.

Os primeiros com- putadores não eram conhe- cidos por sua flexibilidade — os passos que cada dis- positivo executava estavam embutidos na unidade de controle, fazendo parte da máquina. Isto é semelhan- te a uma caixa de música que sempre toca a mesma melodia quando o que se deseja realmente é uma fle- xibilidade como a exibida Figura 2.1 UCP e memória principal ligadas por uma via.

por equipamentos de troca automática de CDs. Para au- mentar a flexibilidade, alguns computadores eletrônicos da época foram projetados de maneira a se poder alterar a fiação da unidade de controle. Isso foi conseguido com um painel de controle semelhante às antigas centrais telefônicas, nas quais as extremidades dos cabos eram inseridas nos orifícios correspondentes à conexão dese- jada.

Uma inovação (creditada, talvez incorretamente, a John von Neumann) surgiu a partir da constatação de que o programa, da mesma forma que os dados, poderia ser codificado e armazenado na memória principal. Se a unidade de controle fosse projetada com capacidade de extrair o programa da memória, decodificar as instru- ções e executá-las, um programa de computador pode- ria ser modificado, simplesmente alterando o conteúdo da memória, em vez de refazer a fiação da unidade de controle.

O conceito de programa armazenado tornou-se a abordagem padrão usada atualmente — na realidade, tão padronizada que parece óbvia. O que originalmente a tornava difícil é que todo mundo pensava nos programas e dados como entidades diferentes. Os dados eram armazenados na memória; os programas eram parte da unidade de controle. O resultado era um exemplo primordial de não conseguir perceber a floresta por estar observando as árvores. É fácil cair e ficar preso nessas valetas, e o desenvol- vimento da ciência da computação pode muito bem permanecer em muitas delas sem que nos aperceba- mos disto. Sem dúvida, uma parte empolgante da ciência é que novas percepções estão constantemente abrindo as portas para novas teorias e novas aplicações.

Figura 2.2 Um roteiro para somar valores armazenados na memória.

Passo 1. Obter da memória um dos valores a somar e guardá-lo em um registrador.

Passo 2. Obter da memória a outra parcela e armazená-la em outro registrador.

Passo 3. Acionar o circuito da adição, tendo os registradores utilizados nos passos 1 e 2 como entradas, e escolher outro registrador para armazenar o resultado.

Passo 4. Armazenar o resultado na memória.

Passo 5. Finalizar.