Universidade Federal de Santa Catarina Centro Tecnológico – Depto. de Informática e de Estatística INE5607 – Organização e Arquitetura de Computadores Profa.

Lúcia Helena Martins Pacheco

Visão Geral de Organização Estruturada de Computadores e Linguagem de Montagem
Um computador digital é uma máquina capaz solucionar problemas por meio da execução de instruções que lhe são fornecidas. Programa é uma seqüência de instruções que descrevem como executar uma tarefa. Os circuitos eletrônicos de cada computador podem reconhecer e executar diretamente um conjunto limitado de instruções simples. Para serem executados, todos os programas precisam ser convertidos para esta linguagem primitiva, chamada linguagem de máquina ou linguagem de montagem (assembly language). Esta é a linguagem que a máquina realmente entende. Trata-se do código binário, correspondente a sinais elétricos, que é o que uma máquina é realmente capaz de executar. Ao se projetar um computador se decide sobre quais dessas instruções primitivas devem estar presentes. Geralmente os projetistas tentam fazer as instruções primitivas tão simples quanto possíveis, consistentes com o uso pretendido e necessidades de desempenho, daquele projeto de máquina, a fim de reduzir a complexidade e o custo da eletrônica empregada. Devido a esta simplicidade as linguagens de máquinas tornam-se difíceis e tediosas de usar para a realização de tarefas mais complexas. Este tipo de linguagem é também chamado de linguagem de baixo nível, pois esta mais próxima do hardware (eletrônica da máquina). Para facilitar a comunicação dos seres humanos com a máquina, foram desenvolvidas linguagens mais próximas daquelas usadas pelos humanos, as chamadas linguagens de alto nível (C, C++, Delphi, Pascal, Fortran, JAVA etc.). Estas linguagens precisam ser convertidas para linguagem de máquina para serem executadas. Há dois métodos de conversão das linguagens de alto nível: a tradução e a interpretação. Estes métodos são similares. Em ambos as instruções de alto nível são executadas pelas seqüências equivalentes em linguagem de máquina. A diferença é que na tradução o programa completo de alto nível é primeiro convertido para a linguagem de máquina para então ser executado. Na interpretação, depois de cada instrução de alto nível ser examinada e decodificada, ela é executada imediatamente. Nenhum programa traduzido é gerado. Ambos os métodos são amplamente usados pelos compiladores.

Máquina Estruturada Multinível
Nível 5

Nível de linguagem orientada para problemas (LINGS. DE ALTO NÍVEL)
Tradução (compilador)

Nível 4

Nível do

MONTADOR ou ASSEMBLER (Mnemônicos)
Tradução (montador)

Nível 3

Nível do SISTEMA OPERACIONAL
Interpretação parcial (sistema operacional)

Nível 2

Nível convencional de máquina (LING. MÁQUINA) Código binário
Interpretação (microprograma)

Nível 1

(CISC)
Os microprogramas executados diretamente pelo hardware

Nível 0

Nível de LÓGICA DIGITAL

Figura 1 – Máquina de seis níveis. (adaptado de Tanenbaum 1995)

RISC

Nível de MICROPROGRAMAÇÃO

Máquina Multinível
A maioria dos computadores modernos possui dois ou mais níveis. As máquinas de seis níveis são muito comuns, como está mostrado na Figura 1. O nível 0 é o hardware verdadeiro da máquina. Seus circuitos executam os programas em linguagem de máquina de nível 1. No nível de lógica digital, estão as portas lógicas (basicamente portas AND e OR) que são os elementos primários de circuitos lógicos mais complexos. Há ainda a existência de outros níveis abaixo do nível 0, que não estão representados na figura. Estes níveis situam-se no campo da engenharia elétrica e da física do estado sólido. Nestes níveis os projetistas enxergam portas lógicas, transistores individuais e o cristal semicondutor, que é o substrato dos circuitos integrados. O nível 0 e os níveis abaixo dele fogem ao escopo desta disciplina. O nível 1- nível de microprogramação, logo acima, é que inicia o conceito de programa como uma seqüência de instruções a serem executadas diretamente pelos circuitos eletrônicos. No nível 1 há um programa denominado microprograma, cuja função é interpretar as instruções de nível 2. Poucas são as máquinas que têm mais de 20 instruções no nível do microprograma, e a maior parte destas instruções envolve a movimentação de dados de uma parte da máquina para outra ou alguns testes simples. A microprogramação é utilizada especialmente nas máquinas classificadas de CISC – Complex Instruction Set Computer. Este tipo de máquina implementa instruções complexas correspondentes ao nível 2. Isto tende a facilitar a programação de compiladores de uma linguagem de alto nível específica, mas de uma maneira geral compromete o desempenho da máquina. Isto acontece porque a complexidade dos circuitos lógicos tende a aumentar, criando um caminho mais longo para a propagação do sinal elétrico gerando um maior atraso. Tal atraso implica em uma menor freqüência de operação dos circuitos. O nível 2 corresponde à linguagem de máquina ou o código binário executado pelo hardware. Na Figura 1 este nível é interpretado para o nível de microprogramação, porém nas máquinas RISC - Reduced Instruction Set Computer - o nível 1 (microprogramação) não existe. Neste tipo de máquina, o nível 2 é executado (interpretado) diretamente no nível 0. Atualmente este tipo de máquina é considerado mais eficiente e flexível que as CISC. Isto porque, as instruções delas tendem a ser executadas em poucos (ou mesmo um único) ciclos de relógio, permitindo assim ao projetista do compilador, ou ao projetista do Sistema Operacional uma programação mais “sob medida” (customizado) para cada situação. Entretanto, o código gerado tende a ser mais longo e complexo. Cada máquina ou processador tem sua linguagem própria de nível 2, a qual é documentada em manuais específicos de cada fabricante. O nível 3 – o nível do Sistema Operacional (S.O.) - é responsável por fornecer serviços básicos para os níveis acima. Tais serviços são: interface (gráfica ou linha de comando) com o

usuário (Shell), gerenciamento de memória, escalonamento de processos, acionamento de dispositivos de entrada e saída de dados etc. Este nível é geralmente desenvolvido de forma híbrida, ou seja, parte em uma linguagem de alto nível (como C ou C++, por exemplo), e parte diretamente em linguagem de máquina. Após o seu desenvolvimento, o programa executável em código de máquina é gerado para ser carregado nas máquinas a que se destina. S.O. complexos são desenvolvidos em ambientes computacionais apropriados, porém, os mais simples podem ser desenvolvidos diretamente em linguagem de máquina. Há uma ruptura fundamental entre os níveis 3 e 4. Os três níveis inferiores não estão projetados para o uso direto do programador médio comum. Os interpretadores e tradutores fazem a “interface” entre o programador dos aplicativos (os níveis superiores) e os níveis mais próximos ao hardware. Estes interpretadores e tradutores são escritos pelos chamados de “programadores de sistema”, que são especialistas em projetar e implementar novas máquinas virtuais. Os níveis 4 e superiores são dirigidos aos “programadores de aplicação”, que desejam usar o computador apenas como meio para resolução de problemas. Uma outra mudança que ocorre no nível 4 é no método pelo qual os níveis superiores são implementados. Os níveis 2 e 3 são sempre interpretados. Os níveis 4, 5 e superiores são geralmente, mas nem sempre1, implementados por tradução. Uma outra diferença ainda entre os níveis 1, 2 e 3, de um lado, e os níveis 4, 5 e superiores, de outro, é a natureza da linguagem provida. As linguagens de máquina de níveis 1; 2 e 3 são freqüentemente numéricas (código binário, hexadecimal ou octal). Os programas escritos nestas linguagens são ótimos para as máquinas, mas péssimos para o entendimento lógico das pessoas. A partir do nível 4, as linguagens contêm palavras e abreviaturas significativas para as pessoas, ou seja, mnemônicos. O nível 4, o nível de linguagem de montagem, é realmente uma forma simbólica para uma linguagem subjacente. Todas as linguagens de alto nível são simbólicas, isto é, usam agrupamentos de caracteres alfanuméricos que representam palavras ou expressões matemáticas que “apelidam” uma instrução de máquina ou correspondem a uma seqüência (rotina) de instruções de máquina. Tais “apelidos” são mais expressivos para os humanos que os códigos numéricos computacionais. Os compiladores traduzem estes caracteres em linguagem de máquina. O nível 4 provê um método para as pessoas escreverem programas para os níveis 1, 2, e 3 de uma maneira mais agradável e
A linguagem Java é a mais importante tendência atual e mais recente avanço na busca pela linguagem universal - o "esperanto" dos computadores. Java eleva a abstração ainda mais um nível e se propõe a ser independente da máquina onde será executado. Porém, na realidade, quando não está sendo processado em um processador Java nativo, o código Java é interpretado por uma camada de software chamada máquina virtual Java (JVM - Java Virtual Machine), ou seja, um emulador. (Mano, 1998)
1

amigável. Neste nível cada instrução de máquina é apelidada por um mnemônico (por exemplo add, load, store etc.) que normalmente correspondem diretamente a uma única instrução de máquina. Assim, o mnemônico é um apelido, mais significativo para os humanos, que representa uma instrução de máquina, ou seja, um código binário executável. Os programas em linguagem de montagem são primeiramente traduzidos para uma linguagem do nível 1, 2 ou 3, e então são interpretados pela máquina real ou virtual apropriada. O programa que executa a tradução é denominado montador. O nível 5 consiste em linguagens projetadas para serem utilizadas por “programadores de aplicação” (software aplicativo) com problemas a serem resolvidos. Tais linguagens possuem muitos nomes, dentre eles linguagens de alto nível e linguagens orientadas para problemas. (FORTRAN, PASCAL, Delphi, C, COBOL, LISP, JAVA etc.). Os programas escritos nestas linguagens são geralmente traduzidos para o nível 3 ou nível 4 por tradutores conhecidos como compiladores, embora às vezes sejam interpretados. Os níveis 6 e superiores (não representados na Figura 1) consistem em coleções de programas projetados para criar máquinas virtuais especialmente adequadas para certas aplicações (aplicativos computacionais). Estes níveis contêm grandes quantidades de informação acerca da aplicação. Pode-se imaginar máquinas virtuais voltadas a aplicações em administração, educação, projeto de computadores, realidade virtual etc. Estes níveis estão no terreno da pesquisa atual. Em resumo, o ponto-chave a ser lembrado é que os computadores são projetados como uma série de níveis, cada um deles construído sobre seu predecessor. Cada nível representa uma abstração distinta, com diferentes objetos e operações presentes. Ao projetar e analisar computadores deste modo, podemos temporariamente suprimir detalhes irrelevantes dos níveis inferiores, e assim reduzir um assunto complexo a algo mais fácil de ser compreendido.

EXECUÇÃO DE UM PROGRAMA→

Programa em Ling. de Alto Nível

(C)
Compilador

Programa em ling. de montagem

Montador

Objeto: módulo em ling. de máquina

Objeto: rotinas da biblioteca (em ling. de máquina)

Ligador

Executável: programa em ling. de máquina

Carregador

MEMÓRIA

Figura 2 – Organização do software. Etapas da execução de um programa (adaptado de Patterson e Hennessy, 3ª ed., 2005, pág.78).

Noções de Organização de Computadores
1. Organizações usuais de computadores Um computador é basicamente construído de três unidades funcionais, interligadas entre si, que são: • A unidade central de processamento – UCP (CPU – central processing unit) • A memória • Os dispositivos de entrada e saída -E/S (I/O – input and output devices) Pode-se ainda considerar os barramentos de comunicação, os quais são responsáveis pela interligação físicas dos elementos acima citados 1.1. Modelo de von Neumann Nos anos 40 o matemático John von Neumann desenvolveu um modelo teórico do funcionamento dos computadores. Este modelo é usado até hoje com apenas algumas modificações. Von Neumann propôs construir computadores que: 1. Codificassem instruções que pudessem ser armazenadas na memória e sugeriu que usassem cadeias de uns e zeros (binário) para codificá-las; 2. Armazenassem na memória as instruções e todas as informações que fossem necessárias para a execução da tarefa desejada; 3. Ao processarem o programa, as instruções fossem buscadas na diretamente na memória. Este é o conceito de programa armazenado. A Figura 3 apresenta um esquema do modelo de von Neumann.
Memória

Saída

UCP

Entrada

Figura 3 - Diagrama esquemático da arquitetura proposta por von Neumann

As principais características deste modelo são: • Uma única UCP responsável por todo controle do fluxo de dados • Uma memória única • Dispositivos de E/S cujas transferências são feitas por meio da UCP. A maioria dos computadores tem sido construída desta maneira até o surgimento das arquiteturas paralelas e redes neuronais. O sucesso deste modelo se justifica pelo fato de que o processador (UCP) desempenha uma função por vez e toma os dados e programas de um único banco de memória. Unidade central de processamento (UCP) A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP (memória principal). Funções: • Executar instruções - realizar aquilo que a instrução determina.

• Realizar o controle das operações no computador. Memória principal (MP) A Memória Principal tem por finalidade armazenar toda a informação que é manipulada pelo computador - programas e dados. Para que um programa possa ser manipulado pela máquina, ele primeiro precisa estar armazenado na memória principal. Obs.: os circuitos da Memória Principal não são combinacionais, eles tem capacidade de armazenar bits. Os circuitos usados são do tipo seqüencial que se baseiam num dispositivo eletrônico chamado de "flip-flop". Dispositivos de entrada e saída (E/S) Tem por finalidade permitir a comunicação entre o usuário e o computador. Obs.: Para executar um programa, bastaria UCP e MP; no entanto, sem os dispositivos de E/S não haveria a comunicação entre o usuário e o computador. 1.2. Modelo de Barramentos O modelo de barramentos é basicamente o modelo de von Neumann com o acréscimo de maior flexibidade de comunicação. Os barramentos interconectam os elementos básicos – UCP, memória e dispositivos E/S entre si. Fisicamente, barramento é um conjunto de linhas de comunicação que permite a interligação entre dispositivos, como o UCP, a memória e outros periféricos (E/S). A Figura 4 mostra este modelo.
UCP

Memória

E/S

Barramento

Figura 4 - Arquitetura de barramentos.

Neste modelo é possível transferência direta de dados entre os dispositivos de E/S e a memória. Este tipo de transferência é feito por dispositivos especiais (controlador de DMA – direct memory access - ou processador E/S) que assumem momentaneamente o controle do barramento e “isolam” a comunicação UCP com a memória e dispositivos E/S. Estas técnicas tendem a acelerar a transferência dos dados entre os dispositivos E/S e a memória. Os barramentos podem ser unidirecionais (conduzir os sinais em uma única direção), bidirecionais (conduzir ora em uma direção e ora em outra de acordo com comandos eletrônicos), serem de três estados (bidirecionais acrescidos da possibilidade de se desconectarem eletricamente) ou unidirecional com a possibilitadade de desconexão elétrica. A possibilidade de desconexão elétrica é controlada eletrônicamente e torna viável a comunicação seletiva entre os dispositivos. Por exemplo, a UCP se comunica com a memória e se desconecta dos dispositivos E/S ou a um dispositivo de entrada transfere dados para memória desconectando a UCP e os dispositivos de saída do barramento.

A Figura 5 mostra um detalhamento da arquitetura de barramentos. Há logicamente2 três tipos de barramentos: • barramento de dados • barramento de endereços • barramento de controle
Barramento de controle

UCP

Memória

Entrada

Saída

Barramento de dados

Barramento de endereços

Figura 5 - Detalhamento da arquitetura de barramentos.

O barramento de dados é responsável pela transferência de dados entre os dispositivos e instruções entre a UCP e memória. É de três estados (tri-state) e liga a memória, a UCP e os dispositivos E/S. Frequentemente o número de linhas do barramento de dados é um valor que corresponde a uma potência de 2 (8, 16, 32, 64 etc.). O barramento de endereços é aquele que conduz o endereço a ser selecionado na memória ou dispositivos E/S. É geralmente unidirecional entre a UCP (que define o endereço) e a memória e os dispositivos E/S. Da mesma forma que o barramento de dados, o número de linhas do barramento de endereços é um valor que corresponde a uma potência de 2. O barramento de controle transfere os sinais de controle que ativam ou desativam os dispositivos, que selecionam determinado modo de operação ou sincronizam os circuitos. Cada linha ou conjunto de linhas tem uma característica de operação própria de acordo com a sua função. Algumas vezes os barramentos podem estar multiplexados. A multiplexação é uma técnica que permite a utilização das mesmas linhas físicas por mais de um conjunto de sinais. Em alguns modelos de computadores os barramentos de dados e de endereços correspondem às mesmas linhas físicas. Em um determinado instante os dados estão presentes no barramento e em outro os endereços. Neste caso os sinais de controle coordenam a operação. A multiplexação torna o sistema mais econômico em termos de hardware, porém diminui a velocidade de operação. A Figura 6 mostra um exemplo de um computador muito simples com um barramento de dados de 8 bits, de endereços de 16 bits e de controle de três bits. Neste
Logicamente aqui é entendido como o que é “visto” ao nível de linguagem de máquina, ou seja, no primeiro nível do software considerando a “máquina estruturada multinível”.
2

exemplo o barramento de dados é de 8 bits (D7....D0 28 = 256 valores diferentes), o 16 barramento de endereços de 16 bits (A15...A0 2 = 65.536 endereços diferentes – 64K) e o barramento de controle de 3 bits. Neste exemplo os sinais de controle ready, R/W e IO/M controlam o fluxo das informações nos demais barramentos. O sinal ready (um bit) é usado para indicar a UCP que um dispositivo de entrada está pronto para enviar um dado para a própria UCP, ou para memória, ou ainda que um dispositivo de saída está pronto para receber um dado da UCP ou da memória. A linha ready serve para sincronizar a UCP com a disponibilidade de dados nos dispositivos E/S. Este sinal serve principalmente para compatibilizar as velocidades, pois a UCP opera em velocidades bem mais altas que os dispositivos E/S. O sinal R/W (um bit) indica se a operação é de; leitura ou escrita. Se este sinal é 1 indica que a operação selecionada é uma leitura (read) na memória ou em um dispositivo de entrada; e se 0, indica uma operacão de escrita (write) na memória ou em um dispositivo de saída. E o último sinal IO/M (um bit) se 1 indica uma operação de entrada ou saída de dados (Input/output); e se igual a 0 indica uma operação de acesso à memória.
IO/M R/W Ready Barramento de controle

UCP
Barramento de dados D7....D0

Memória

Entrada

Saída

Barramento de endereços
A15.....A0

Figura 6 - exemplo de uma arquitetura de barramentos.

Em termos físicos, os tipos de barramentos de um computador são: o Barramento do processador o Barramento de cache o Barramento de memória o Barramento de entrada e saída O Barramento do Processador é utilizado pelo processador internamente. Barramento de Cache em organizações de computadores mais recentes, é um barramento dedicado para acesso à memória cache do computador. A memória cache é de mais alta velocidade que a memória principal podendo ser interna ou externa a UCP. O barramento de Memória responsável pela conexão da memória principal ao processador e possui velocidade mais baixa que o da memória principal. O Barramento de Entrada e Saída (ou E/S) é um conjunto de circuitos e linhas de comunicação que possibilitam a ligação dos periféricos com a parte interna do computador (UCP e chipset – placa mãe). Este

barramento normalmente segue padrões internacionais e as freqüências de tranferência são mais baixas que as anteriores. São exemplos de barramentos de entrada e saída: VESA, ISA, MCA, EISA, VLB, PCI, AGP, PCI Express. 1.3 A Unidade Central de Processamento (UCP) A Unidade Central de Processamento - UCP (em inglês, Central Processing Unity CPU) é a responsável pelo processamento e execução dos programas armazenados na MP. As funções da UCP são: executar as instruções e controlar as operações no computador. A unidade central de processamento é o "cérebro" do computador. Sua função é executar programas armazenados na memória principal, buscando as instruções, examinando-as, e então executando uma após a outra. A UCP é composta de várias partes distintas, que são a unidade de controle, a unidade lógica e aritmética e um conjunto de registradores. A Figura 7 ilustra uma UCP genérica. clock UC = Unidade de controle

UC
Clock = referência de tempo

ULA

ULA = Unidade lógica e aritmética Registradores de uso geral: R0...Rk Registradores de uso específico: PC = contador de programa RI = registrador de instrução RE = registrador de endereços RD = registrador de dados

R0

Rk PC RI RE RD

Figura 7 - Diagrama esquemático da UCP.

A comunicação entre UCP e memória, as instruções, os dados e os endereços "trafegam" no computador através dos barramentos (de dados, de endereços e de controle), sob a forma de bits representados por sinais elétricos: uma tensão positiva alta ("high" geralmente 3 volts) significando "1" e uma tensão baixa ("low" - próxima de zero) significando "0". Mas os dados no computador não ficam estáticos; pelo contrário, a cada ciclo (cada "estado") dos circuitos, os sinais variam, de forma a representar novas instruções, dados e endereços. Ou seja, os sinais ficam estáticos apenas por um curto espaço de tempo, necessário e suficiente para os circuitos poderem detectar os sinais

presentes no barramento naquele instante e reagir de forma apropriada. Assim, periodicamente, uma nova configuração de bits é colocada nos circuitos. Isto só faz sentido se pudermos de alguma forma organizar e sincronizar essas variações, de forma a que, num dado instante, os diversos circuitos do computador possam "congelar" uma configuração de bits e processá-las. Para isso, é preciso que exista um outro elemento, que fornece uma base de tempo para que os circuitos e os sinais se sincronizem. Este circuito é chamado clock - o relógio interno do computador. O clock é a referência de tempo necessária à UCP. Trata-se de um circuito eletrônico oscilador que gera uma forma de onda quadrada, a qual é essencial para o seqüenciamento das operações eletrônicas realizadas pela UCP. Ele está relacionado com a freqüência (ou taxa) de operação da UCP. O inverso do período de clock (tempo entre a variação do sinal entre zero e um) determina a freqüência de operação da UCP. Por exemplo, um período de clock de 1 ns (T = 1 nanossegundo = 1X10-9 segundos – 1 bilionésimo de segundo) implica numa freqüência de 1 Gigahertz (f = 1/T = 1/10-9 = 1X109 Hertz). A unidade de controle – UC - responsável pela busca das instruções na memória principal, sua decodificação e execução. É a responsável pela colocação dos sinais no barramento de controle externo e no barramento de controle interno à UCP. Fornece todo seqüenciamento de sinais elétricos necessários à operação dos circuitos eletrônicos que são ativados pelas transições do clock. A unidade lógica e aritmética – ULA ou ALU (arithmetic and logic unity) é encarregada das operações lógicas e aritméticas, como por exemplo, adições binárias e “E” booleano que a UCP realiza. A UC define, por meio de sinais, durante a execução de uma instrução qual a (micro-)operação será executada pelos circuitos da ULA. A UCP contém uma memória interna de pequena capacidade de armazenamento, mas de alta velocidade, usada para armazenar resultados temporários e certas informações de controle. Esta memória é formada por um número de registradores, uns chamados de uso geral e outros de uso específico. Os registradores de uso geral são acessíveis ao usuário no nível convencional de máquina já os demais são acessíveis diretamente apenas pela unidade de controle (UC) durante a execução de um programa. 0 registrador de uso específico mais importante é o contador de programa – PC (Program Counter), que aponta para a próxima instrução a ser executada. Isto é, ele sempre contém o endereço de memória onde está a próxima instrução a ser executada. 0 nome "contador de programa" é um tanto equivocado, porque ele não tem nada a ver com a contagem de alguma coisa, mas o termo é universalmente usado3. Ele que determina o fluxo de execução do programa, pois, ao término de cada instrução, o PC indica à UCP o endereço onde está cada nova instrução a ser executada. 0 registrador de instruções - RI ou IR (instruction register) - é também importante. Ele contém a instrução que está sendo executada, isto é, retém o código binário da instrução para permitir sua decodificação pela UC. A maioria dos computadores tem outros registradores específicos, alguns deles disponíveis aos programadores de níveis 2 e 3 para armazenamento de resultados intermediários ou para uso exclusivo do sistema operacional. O acesso à memória ou aos dispositivos de entrada/saída é quase sempre muito mais demorado que o tempo necessário para executar uma instrução com operandos em
3

No processador Pentium este registrador é chamado de Instruction Pointer – IP - (ponteiro de instrução).

registradores, ou seja, internos à UCP. Conseqüentemente, a UC deve manter os valores corretos no barramento de dados e endereços, por um tempo suficiente, até que o acesso à informação tenha sido complemente efetuado. Assim, geralmente são necessários dois registradores específicos para esta tarefa um chamado registrador endereço - RE – e outro chamado registrador de dados – RD. Ambos auxiliam a compatibilização dos tempos da UCP com o tempo de acesso à memória e aos dispositivos de E/S. Etapas de execução de uma instrução Desde o momento que um computador é ligado ele estará permanentemente executando um programa, ou seja instruções, até que um comando de parada no processamento seja executado ou o computador desligado. Cada instrução executada pela UCP em um ciclo de instrução e este tem duas etapas: o ciclo de busca e o ciclo de execução. A Figura 8 ilustra o esquema de execução de uma instrução.

Ciclo de Execução

Figura 8 - Esquema de execução de uma instrução. Ciclo de busca (Fetch) Nesta etapa a UC lê a instrução na memória e carrega a instrução no registro de instrução - RI - (dentro da UCP) para ser decodificada e executada. A seqüência de microoperações é a seguinte (considerando os sinais de controle da Figura 6 a Figura 7): 1. RE ←PC; R/W = 1; IO/M = 0; 2. PC←PC+1 3. RI←RD Nesta etapa o RE recebe o conteúdo do PC, este conteúdo é o endereço da próxima instrução a ser executada. O conteúdo presente em RE é mantido no barramento de endereços. A UC determina uma operação de leitura (R/W = 1) na memória (IO/M = 0). A seguir, o PC é incrementado de uma unidade para apontar o endereço da próxima instrução a ser executada (este valor será acessado para executar a próxima instrução). Depois, a instrução que foi acessada na memória é colocada no barramento de dados e carregada em RD. Finalmente o conteúdo de RD é transferido para RI para que a instrução de seja posteriormente decodificada é executada. Cabe observar que os registradores RE e RD têm sempre as informações presentes nos barramentos de endereços e dados respectivamente.

Ciclo de instrução

Ciclo de busca (Fetch)

Ciclo de execução Nesta etapa a instrução (código binário presente em RI) é decodificada (reconhecida) e a seqüência de (micro-)operações necessárias a execução da instrução é desencadeada. Quais as (micro-)operações que serão ativadas e o número de ciclos de Clock necessários para a execução dependerá de cada instrução e da organização da UCP. 1.4 A Memória A memória é aquela parte do computador onde programas e dados são armazenados. Alguns cientistas da computação usam o termo armazenamento no lugar de memória. Sem uma memória de onde os processadores possam ler e escrever informações, não haveria nenhum computador digital com programa armazenado como os conhecemos. O termo memória normalmente se refere à memória principal (MP) ou comumente chamada de memória RAM. A memória principal é a parte do computador onde programas e dados são armazenados durante o processamento. A informação permanece na memória principal apenas enquanto for necessário para seu emprego pela UCP, sendo então a área de MP ocupada pela informação pode ser liberada para ser posteriormente ser sobregravada por outra informação. Quem controla a utilização da memória principal é o Sistema Operacional por meio do gerenciador de memória. Estrutura da memória principal - células e endereços4 A memória precisa ter uma organização que permita ao computador guardar e recuperar informações quando necessário. Não teria sentido armazenar informações se não fosse possível recuperar depois. Portanto, não basta transferir informações para a memória. É preciso ter como encontrar essa informação mais tarde, quando ela for necessária, e para isso é preciso haver um mecanismo que registre exatamente onde a informação foi armazenada. Célula é a unidade de armazenamento da memória do computador. A memória principal é organizada em células. Célula é a menor unidade da memória que pode ser endereçada (não é possível buscar uma "parte" de uma célula de memória) e tem um tamanho fixo específico de cada máquina. As memórias são compostas de um determinado número de células ou posições. Cada célula é composta de um determinado número de bits. Todas as células de um dado computador tem o mesmo tamanho, isto é, todas as células daquele computador terão o mesmo número de bits. Cada célula é identificada por um endereço único, pela qual é referenciada pelo sistema e pelos programas. As células são numeradas seqüencialmente, uma a uma, de 0 a (N-1), chamado o endereço da célula. Endereço é o localizador da célula, que permite identificar univocamente uma célula. Assim, cada célula pode ser identificada pelo seu endereço. O endereço é o indexador de cada célula. Organização da memória A estrutura da memória principal é um problema do projeto de hardware: - mais endereços com células menores ou - menos endereços com células maiores?

4

http://wwwusers.rdc.puc-rio.br/rmano/comp7mp.html

Assim, cabe ao projetista de uma máquina definir o número de linhas de endereço e o número de bits que constitui cada célula. O número de n linhas no barramento de endereços definirá 2n combinações diferentes, isto é, o número máximo de células que podem ser endereçadas. Por exemplo: Número de bits de endereço = 10 ⇒ 210 (= 1024 = 1K) células endereçadas Tamanho da célula = 8 bits Esta memória seria representada como 1K X 8 (1 kilobyte) No projeto de cada computador é definida a organização da memória, ou seja, o tamanho do barramento de endereços e o tamanho de cada célula de memória, são valores comuns:
64K (216) X 8 bits (65 536 posições de 8 bits = 64 kilobytes) 4 Giga (232) X 8 bits (4 294 967 296 posições de 8 bits) 1 Mega (220) X 16 bits (1 048 576 posições de 16 bits) 16 Mega (224) X 4 bits (16 777 216 posições de 4 bits)

O diagrama da Figura 9 mostra uma memória com "n" linhas de endereços e "m" linhas de dados. As "n" linhas de endereços ("n" bits) permitem endereçar 2n diferentes células de memória. O tamanho do dado, contido em cada célula de memória, é "m" bits. O valor de "n" independe do de "m". Cada código de endereço de "n" bits seleciona, através do decodificador de endereços, apenas uma única célula na memória. O sentido do fluxo de dados dependerá do sinal de controle R/W. Se R/W = 1 a operação é de READ, ou seja leitura na memória e o dado sairá da memória, caso contrário (R/W = 0) a operação será de escrita (WRITE) e o dado entrará na memória.
Memória

E N D E R E Ç O

A0 A1 A2

0
Decodificador de endereços

Dado 0 Dado 1 Dado 2 Dado n

1 2 n

Dm...D0

An

D A D O

R/W
Figura 9 - Diagrama esquemático da organização da memória.

Capacidade da memória principal A capacidade da MP em bits é igual ao produto do nº de células pelo total de bits por célula. T=NxM T = capacidade da memória em bits N = 2n, onde n é o número de linhas do barramento de endereços M = nº de bits de cada célula Para encontrar a capacidade em bytes, bastaria encontrar a capacidade em bits e depois multiplicar por 8 (cada byte contém 8 bits) ou então converter o tamanho da célula para bytes e depois multiplicar pelo número de células.

O último endereço na memória é o endereço N-1 (os endereços começam em zero e vão até N-1).

Memória - exercícios
1) Numa MP com 1kbyte de capacidade, onde cada célula tem 8 bits: a) quantas células tem a MP? b) quantos bits são necessários para representar um endereço de memória? 2) Um computador endereça 1k células de 16 bits cada uma. Pede-se: a) sua capacidade de memória; b) o maior endereço que o computador pode endereçar; 3) Calcular e completar os campos:
M - Tamanho da célula 8 bits 16 bits 4 bytes 64 bits x - nº de bits do endereço 4 bits N - nº de endereços 1 K endereços T - Capac. da memória 1 K byte 256 bits 4 Gbytes 1 Mbyte 0 a (N-1) - Faixa de endereços 0 a 65.535 0 a 262.143

Referências: 1- http://pt.wikipedia.org/wiki/Barramento (acesso em 16/09/06) 2 - http://wwwusers.rdc.puc-rio.br/rmano/index.html (acesso em 16/09/06) 3 - Patterson, D. A. e Hennessy, J. L. Organização e Projetos de Computadores – A Interface Hardware/Software, 3ª Ed., Editora Campus, Rio de Janeiro, 2005. 4 - Tanenbaum, A. S. Organização estruturada de computadores, 3a Edição, Rio de Janeiro: PHB, 1995.