Sunteți pe pagina 1din 16

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 do
Nível 3 SISTEMA OPERACIONAL

Interpretação parcial (sistema


operacional)

Nível convencional de máquina


(LING. MÁQUINA)
Nível 2 Código binário

Interpretação (microprograma)

Nível de
RISC

Nível 1 MICROPROGRAMAÇÃO
(CISC)

Os microprogramas executados
diretamente pelo hardware

Nível de
Nível 0
LÓGICA DIGITAL

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


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

1
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)
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.
Programa em Ling.
EXECUÇÃO DE UM de Alto Nível

PROGRAMA→
(C)
Compilador

Programa em ling. de
montagem

Montador

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

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

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

MEMÓRIA
Carregador

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

2
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”.
exemplo o barramento de dados é de 8 bits (D7....D0 Î 28 = 256 valores diferentes), o
barramento de endereços de 16 bits (A15...A0 Î 216 = 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.
Barramento de controle
IO/M
R/W
Ready

UCP Memória Entrada Saída

Barramento
de dados
D7....D0

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.

UC = Unidade de controle
clock
UC
Clock = referência de tempo

ULA ULA = Unidade lógica e


aritmética

R0
Registradores de uso geral:
R0...Rk
Rk
Registradores de uso
PC
específico:
RI PC = contador de programa
RE RI = registrador de instrução
RE = registrador de endereços
RD
RD = registrador de dados

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
busca
(Fetch)

instrução
Ciclo de
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 micro-
operaçõ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 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 A0 0 Dado 0
N A1
A2 Dado 1
D Decodificador
1 D
2
E de endereços Dado 2 Dm...D0 A
R D
An n
E Dado n O
Ç
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 x - nº de bits do N - nº de T - Capac. da 0 a (N-1) - Faixa
da célula endereço endereços memória de endereços
8 bits - - 1 K byte -
16 bits - 1 K endereços - -
- 4 bits - 256 bits -
4 bytes - - 4 Gbytes -
- - - 1 Mbyte 0 a 65.535
64 bits - - - 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.

S-ar putea să vă placă și