Tema 4-Organização Dos Sistemas de Computadores

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 30

Universidade Rovuma

Faculidade de Engenharia Ciencia e Teccnologia


Curso: Engenharia Eletrónica 5° Ano Minor
Computação
Disciplina: Arquitectura e Sistema de Computacionais
Tema 4: Organização dos Sistemas de Computadores

Objectivos :

 Identificar os principais componentes de uma CPU

 Conhecer o funcionamento de uma CPU

 Saber como um programa é executado em ciclos

 Definir e explicar o que é uma interrupção e suas consequências

 Argumentar sobre aspectos que influenciam no desempenho de uma CPU

Actividades : Docente:

MSc AMILAI,Belarmino Miguel

Organização dos Sistemas de Computadores

Na Aula 1 estudamos os componentes básicos da arquitectura de um computador, segundo o


modelo de Von Neumann, cuja proposta vale a pena relembrar no início desta secção, a qual irá
tratar especifcamente de um dos elementos dessa arquitectura: o processador. A proposta de Von
Neumann para a construção de um computador previa que:

a) Codifcasse instruções que pudessem ser armazenadas na memória e sugeriu que se usassem
cadeias de uns e zeros (binário) para codifcá-lo;

Maio de 2022 Página 1 de 30


b) Armazenasse na memória as instruções e todas as informações que fossem necessárias para
a execução da tarefa desejada;

c) Ao processar o programa, as instruções fossem buscadas diretamente na memória.

Software e Hardware

O computador é composto por dois elementos, o software e o hardware. Tanto o hardware quando
o software foram escritos por um programador, ou engenheiro, para se resolver um determinado
problema. O início é sempre o mesmo. O profissional se depara com um problema e projecta uma
solução algorítmica para ele. A diferença está na concepção. O hardware é concebido em chip,
utilizando transistores interconectados. Uma vez elaborado, o hardware não pode mais ser
modificado. Ele é uma solução rígida (do inglês, Hard) para o problema. Já o software é elaborado
para ser armazenado numa memória e ser executado com um processador de propósito geral. Ele
é uma solução flexível (do inglês, Soft) para o problema, já que o programador pode, a cada
momento, modificar seu programa afim de torná-lo cada vez melhor.

Soluções em software são sempre mais lentas do que soluções equivalentes em hardware. Isso
porque para executar um programa, cada instrução deve antes ser armazenada em memória,
transferidas para a CPU (lembre-se que memórias são muito mais lentas do que CPUs) e, só então,
ser executada pela CPU. Já as soluções em hardware não utilizam instruções, elas executam as
operações diretamente.

Por outro lado, as soluções em software ganham em flexibilidade, já que os programas podem ser
facilmente modificados. Já as soluções em hardware, não. Uma vez concebido, um hardware não
pode mais ser modificado, ele deve ser descartado para dar lugar a uma versão mais nova. Isso
torna projectos em hardware muito mais caros.

Para entender melhor, pode-se citar alguns exemplos de implementações em hardware comumente
utilizadas. Todas são escolhidas devido ao seu carácter de pouca necessidade de modificação, mas
demandam alto desempenho. Por exemplo, chips de criptografia para celulares (geralmente
smartphones), processadores aritméticos para acelerar o cálculos, aceleradores gráficos para gerar

Maio de 2022 Página 2 de 30


gráficos mais rápidos, alguns chips para fazer edições rápidas em fotos, geralmente acoplados às
câmeras digitais. As implementações são feitas em software quando a demanda por desempenho
não é tanta, ao mesmo tempo em que as actualizações são frequentes, como os Sistemas
Operacionais, os jogos e aplicativos em geral.

Apesar de não ser tão rápida quanto deveria, a CPU é uma solução muito boa por permitir a
execução de, praticamente, qualquer tipo de programa, se tornando uma máquina de propósito
geral.

Organização dos Sistemas de Computadores

Todo o computador é formado por cinco elementos essenciais ou unidades: a unidade aritmética-
lógica (UAL / ULA), a unidade de memória, a unidade de controle, a unidade de entrada e a
unidade de saída. A interconexão entre tais unidades está mostrada na figura abaixo. As setas no
diagrama indicam a direção do fluxo de dados, instruções e sinais de controle.

Observemos que as linhas grossas indicam o tráfego de dados e instruções, informação que em
geral necessitam de um número grande de linhas para serem transmitidas. Já as linhas tracejadas
representam os sinais de controle, normalmente em número reduzido, de maneira que são
necessárias poucas linhas para representá-los.

Maio de 2022 Página 3 de 30


Unidade Lógica-Aritmética

É a parte do computador onde são realizadas as operações aritméticas e lógicas com os dados. O
tipo de operação a ser realizada num particular instante de tempo é determinado por sinais vindos
da unidade de controle (seta 1). Os dados a serem operados pela unidade aritmética-lógica poderão
vir não só da memória (seta 2) como da unidade de entrada (seta 3). Os resultados das operações
efetuadas na unidade aritmética-lógica podem ser transferidos para a memória (seta 4) ou para a
unidade de saída (seta 5).

 São exemplos de operações aritméticas: adição (ADD), subtração (SUB), multiplicação


(MUL), divisão (DIV).
 São exemplos de operações lógicas: e (AND), ou (OR), negação (NOT), ou exclusivo
(XOR).

Unidade de Memória

A memória armazena grupos de dígitos binários (palavras) que podem representar instruções a
serem executadas pelo processador ou dados para serem operados pelas instruções durante a
execução de um programa.

Ela também serve como local de armazenamento para resultados intermediários ou finais obtidos
pelas operações aritméticas efectuadas pela unidade lógica-aritmética (seta 4). A memória é uma
unidade que executa somente duas operações: leitura e escrita. O funcionamento da memória
também é controlado pela unidade de controle, a qual indica, através de sinais de controle (seta 6),
qual das duas operações a memória deve realizar naquele instante. Um determinado endereço pode
ser acessado pela unidade de controle, que gera o endereço desejado e o entrega à memória (seta
7). As informações podem ser escritas na memória vindas da ULA ou da unidade de entrada (seta
8), mais uma vez sob o comando da unidade de controle. As informações podem ser lidas da
memória para a ULA (seta 2) ou directamente para a unidade de saída (seta 9).

A memória do computador consiste numa coleção de registradores numerados consecutivamente


(endereçados), onde cada um possui um tamanho denominado de tamanho da palavra, que pode

Maio de 2022 Página 4 de 30


variar em 16, 32, 64 e 128 bits, com a palavra de 32 bits sendo a mais comum hoje em dia, e a
palavra de 64 bits aumentando de popularidade.

Cada registrador tem um endereço, chamado de localização na memória, estas são organizadas
linearmente em ordem consecutiva. O número único que identifica cada palavra é chamado de
endereço.

A memória possui um espaço de endereçamento representado pelo tamanho em bits do seu


endereço, logo, um espaço de endereçamento de 32 bits pode acessar qualquer palavra de memória
em qualquer lugar no intervalo de 0 a 232-1.

O espaço de endereçamento pode ser dividido em regiões distintas usadas pelo sistema
operacional, dispositivos de E/S, programas de usuário e pilha do sistema operacional.

Mapa de Memória do Computador

As regiões ilustradas na figura acima-Mapa de Memória do Computador compõem um possível


mapa de memória. Os endereços acima de 2048 são reservados para uso do sistema operacional.

Maio de 2022 Página 5 de 30


O espaço do usuário é onde um programa do usuário será carregado. A porção do espaço de
endereçamento entre 231 e 232 – 1 está reservada para dispositivos de E/S.

É importante manter clara a distinção entre o que é endereço e o que é dado. Uma palavra na
memória, pode ter distintas representações dependendo do seu uso. Ela pode armazenar uma
instrução contendo a operação e os operandos (dados de entrada) para a realização de uma
específica operação, mas também pode armazenar o endereço de uma outra região de memória.
Logo, o endereço é um apontador para uma posição de memória que contém dados, e estes são
informações significativas para a realização de alguma actividade no computador, ou a
representação de alguma informação.

Unidade de Entrada

A unidade de entrada é constituída por tipos de dispositivos que obtêm informações externas ao
computador e as coloca na unidade de memória (seta 8) ou na ULA (seta 3). A unidade de controle
determina onde a informação de entrada deve ser colocada (seta 10). A unidade de entrada é usada
no armazenamento de instruções e dados na memória para que o programa constituído por essas
instruções e dados possa ser executado. Essa unidade também é usada para entrar com dados na
ULA, a partir de um dispositivo externo, durante a execução de um programa. Alguns dos
dispositivos de entrada mais comuns são: teclados, discos magnéticos, fitas e conversores
analógico-digitais (ADC´s).

Unidade de Saída

A unidade de saída é formada por todos os tipos de dispositivos usados para transferir informações
do computador para o “mundo exterior”. Os dispositivos de saída também são dirigidos pela
unidade de controle (seta 12), podendo receber dados da ULA (seta 5) ou da memória (seta 9),
colocando-os no formato apropriado para o consumo externo ao computador. Exemplos de
dispositivos de saída são: displays, impressoras, discos magnéticos, fitas magnéticas, monitores de
vídeo e conversores digital-analógicos (DAC´s).

Maio de 2022 Página 6 de 30


Enquanto executa um programa, o computador tem necessidade de apresentar resultados ou sinais
de controle para o “mundo exterior”. Por exemplo, um sistema pode ter uma impressora de linhas
como dispositivo de saída. Nesse caso, o computador envia sinais para que os resultados sejam
impressos em formulário contínuo. Um pequeno computador pode informar seus resultados
usando um painel luminoso ou um display de LED´s (Light Emitting Diode).

Interface

O aspecto mais importante das unidades de ENTRADA e SAÍDA diz respeito ao interfaceamento,
que pode ser definido como o acto de combinar dispositivos muito diferentes, para que eles possam
funcionar de maneira compatível e coordenada. Podemos também definir o interfaceamento de
maneira mais específica, como sendo a sincronização da transmissão da informação digital entre
o computador e os dispositivos externos de entrada e saída.

Muitos dispositivos da entrada/saída não são directamente compatíveis com o computador por
diferenças de velocidade de operação, formato dos dados (hexa, ASCII, binário), modos de
transmissão (serial, paralelo) e níveis dos sinais lógicos. Tais dispositivos precisam de circuitos
especiais de interface que permitam que eles se comuniquem com as outras unidades do
computador ao qual elas vão se ligar.

Um bom exemplo sobre interfaceamento é o caso do terminal de vídeo, que pode operar como
dispositivo de entrada e de saída. Este terminal transmite e recebe dados serialmente, um bit de
cada vez, enquanto a maioria dos computadores manipula dados em paralelo. Assim, o terminal
de vídeo precisa de um circuito de interface que faça as modificações necessárias dos dados
transmitidos/recebidos, de maneira a permitir que a comunicação terminal-computador e
computador-terminal seja feita sem problemas.

Unidade de Controle

A função da unidade de controle, como o nome indica, controla (dirige) a operação de todas as
demais unidades componentes do computador, fornecendo-lhes sinais de temporização e de
controle. Vista por outro ângulo, a função da unidade de controle assemelha-se à de um maestro,
que tem a responsabilidade de manter todos os membros de uma orquestra em perfeito

Maio de 2022 Página 7 de 30


sincronismo. Essa unidade contém circuitos lógicos combinacionais e sequênciais, responsáveis
pela geração dos sinais de controle necessários à execução das instruções de um programa.

A unidade de controle busca uma instrução da memória, enviando seu endereço (seta 7) e um
comando de leitura (seta 6) à unidade de memória. A instrução armazenada no endereço enviado
é depois transferida para a unidade de controle (seta 11). Essa instrução, que está codificada em
binário, é então decodificada pelos circuitos da unidade de controle para determinar qual a
instrução. Logo após, essa mesma unidade usa a informação contida na instrução para gerar os
sinais de controle necessários à execução da instrução em questão.

Dessa forma, a Unidade Funcional de Controle é responsável pela realização das seguintes
actividades (MONTEIRO, 2007):

a) Busca da instrução que será executada, armazenando-a em um registrador da CPU;

b) Interpretação das instruções a fm de saber quais operações deverão ser executadas pela ULA
(ex.: soma, subtração, comparação) e como realizá-las;

c) Geração de sinais de controle apropriados para a activação das actividades necessárias à


execução propriamente dita da instrução identifcada. Esses sinais de controle são enviados aos
diversos componentes do sistema, sejam eles internos à UCP (ex.: a ULA) ou externos (ex.:
memória e dispositivos de entrada e saída).

Processador (Unidade Central de Processamento)

A Unidade Central de Processamento (UCP) é responsável pelo processamento e execução de


programas armazenados na memória principal, buscando suas instruções, examinando-as e, então,
executando uma após a outra. Cabe lembrar que sempre que houver referencias à sigla UCP, está
se fazendo referência ao processador do computador.

A UCP é composta por várias partes distintas, entre elas: registradores, Unidade de Controle (UC)
e Unidade Lógica Aritmética (ULA).

Maio de 2022 Página 8 de 30


Na figura abaixo, a ULA e a unidade de controle são mostradas como partes de uma única
unidade: processador. A distinção é feita com a finalidade de separar a parte “inteligente“ do
computador das demais. Iremos usar tal denominação diversas vezes em nosso estudo dos
microcomputadores, pois como veremos mais tarde, nos microcomputadores, a unidade central de
processamento é implementada em um único chip VLSI, denominado microprocessador.

A Unidade Central de Processamento é composta por duas partes principais: a unidade lógica e
aritmética(ULA), formada por circuitos que manipulam os dados através de operações binárias
(dois operandos) e unárias (um operando). Exemplos incluem a soma e operadores
lógicos: and, or e not. E a unidade de controle, cujos circuitos são responsáveis por coordenar as
operações da UCP.

Para o armazenamento e a comunicação entre estas duas unidades a UCP contém circuitos de
armazenamento chamados de registradores, que se assemelham às células de armazenamento da
memória principal. Alguns registradores funcionam como posições intermediárias de
armazenamento para os dados manipulados pela UCP. Nestes registradores são armazenados os
dados de entrada para a ULA e ainda proporcionam um local de armazenamento para o resultado
das operações.

Os dados a serem manipulados pela ULA tem origem na memória principal, sendo de
responsabilidade da unidade de controle transferir estes dados aos registradores, informar à ULA

Maio de 2022 Página 9 de 30


sobre quais registradores estão os dados de entrada, ativar o circuito da operação apropriada e
informar em que registrador deve guardar o resultado da operação.

A transferência desta informação oriunda da memória principal se dá através do barramento que


é responsável por transmitir padrões de bits entre a UCP, os dispositivos de E/S e a memória
principal.

Executar uma simples operação de soma é mais complexo que apenas somar estes números.
Coordenado pela unidade de controle, os registradores intermediam a comunicação da memória
principal e a ULA. Este processo pode ser resumido assim:

Passos

1. Obter da memória um dos valores da soma e guardar em um registrador;

2. Obter da memória o outro número a ser somado e armazená-lo em outro registrador;

3. Acionar o circuito de adição tendo os registradores do passo 1 e 2 como entrada, e escolher


outro registrador para armazenar o resultado;

4. Armazenar o resultado na memória principal;

5. Finalizar operação.

Os registradores

São elementos de armazenamento temporário, localizados na UCP, os quais são extremamente


rápidos por causa da sua tecnologia de fabricação. Assim, as UCPs são fabricadas com certa
quantidade de registradores destinados ao armazenamento de dados que estão sendo utilizados
durante o processamento e, portanto, servem de memória auxiliar básica da ULA.

Os registradores são memórias elaboradas com o mínimo de transistores possível, utilizando o que
há de mais moderno em tecnologia de armazenamento. Elas são as memórias mais rápidas que
podem ser construídas e por isso são também as mais caras. Por essa razão, elas aparecem numa
quantidade muito pequena em um computador, na casa de alguns Kilo Bytes. Eles podem ser

Maio de 2022 Página 10 de 30


divididos em dois grupos. Os registradores de propósito geral, e os de propósito específico. Como
o próprio nome diz, os primeiros podem ser utilizados pelos programas para quaisquer objectivos,
já os segundos são específicos para algumas tarefas. Por exemplo, há um registrador na CPU para
controlar se o processador deve continuar em execução, ou entrar em modo de espera por nova
ordem.

Os registradores de propósito específico apresentados são:

 Program Counter (PC): Contador de Programas

 Instruction Register (IR): Registrador de Instrução

 Memory Address Register (MAR): Registrador de Endereço

 Memory Buffer Register (MBR): Registrador de Dados

O PC contém o endereço de memória que será utilizado para buscar a próxima instrução a ser
executada pela CPU. Antes de executar qualquer instrução, a CPU envia o conteúdo de PC para a
memória através do Barramento de Endereço, a memória envia o conteúdo da memória nesse
endereço através do Barramento de Dados. Esse conteúdo é então armazenado no IR. Já o IR, que
recebeu a instrução que veio da memória, tem o objectivo de guardar a instrução e passá-la para a
Unidade de Controle, que é quem vai lê-la e tomar as decisões necessárias para para que ela seja
executada pela Unidade de Ciclo de Dados. Por se tratarem do processo de busca de instruções, o
PC e o IR ficam instalados na Unidade de Controle. O PC possui conexão directa com o
Barramento de Endereços, e o IR com o Barramento de Instruções.

Com relação ao MAR e ao MBR, eles possuem funções análogas ao PC e IR, respectivamente,
mas referentes a dados e não a instruções. Quando uma operação precisa ser realizada com algum
dado que está na memória (e não em um registrador), o endereço desse dado é passado para o
MAR. A CPU então passa o conteúdo de MAR para a memória através do Barramento de
Endereço, que retornará o conteúdo da memória nesse endereço através do Barramento de Dados.
O conteúdo trazido pela memória será armazenado em MBR. Só então o dado poderá ser utilizado
para o processamento inicialmente planejado. O MBR e MAR possuem, respectivamente,
conexões directas com os Barramentos de Dados e de Endereços. Ambos são situados na Unidade
de Ciclo de Dados, por serem utilizados nas fases de processamento das instruções.
Maio de 2022 Página 11 de 30
O tamanho e quantidade dos registradores de uma CPU é uma das principais decisões de projecto.
Se forem grandes demais, ou em quantidade maior do que a necessária, podem resultar em
desperdício e aumento desnecessário no preço do processador. Já se forem pequenos, ou em pouca
quantidade, com certeza vão tornar o computador muito mais lento do que o desejado. Encontrar
o tamanho e quantidade ideais é trabalhoso e geralmente é feito através de simuladores e de muito
testes e anos de experiência.

Os registradores de propósito geral são utilizados para guardar as variáveis dos programas. Como
eles estão presentes em quantidades muito pequenas, são poucas as variáveis que ficam
armazenadas em registradores. As demais ficam na Memória Principal. Quando uma operação
precisa ser realizada e seus dados estão nos Registradores de Propósito Geral, a CPU não precisa
buscá-los na memória e o processamento torna-se muito mais rápido.

Os sistemas mais antigos possuíam um registrador especial chamado acumulador ou ACC (de
accumulator), o qual, além de armazenar dados, servia de elemento de ligação entre a ULA e os
demais dispositivos da UCP.

Em arquiteturas mais complexas, vários registradores podem desempenhar as funções de um


acumulador, além de haver diversos registradores de dados de uso geral.

Barramento

O objectivo do barramento é reduzir o número de interconexões entre a UCP e seus subsistemas.


Em lugar de mantermos um caminho de comunicação entre a memória e cada um dos dispositivos
de entrada e saída, a UCP é interconectada com os mesmos via barramento de sistema
compartilhado.

Os diversos componentes de um computador se comunicam através de barramentos, os quais se


caracterizam como um conjunto de condutores eléctricos que interligam os diversos componentes
do computador e de circuitos eletrônicos que controlam o fluxo dos bits. O barramento conduz de
modo sincronizado o fluxo de informações (dados e instruções, endereços e controles) de um
componente para outro ao longo da placa-mãe. O barramento organiza o tráfego de informações

Maio de 2022 Página 12 de 30


observando as necessidades de recursos e as limitações de tempo de cada componente, de forma
que não ocorram colisões, ou mesmo, algum componente deixe de ser atendido.

O barramento de um sistema computacional, denominado barramento do sistema, é o caminho por


onde trafegam todas as informações dentro do computador. Esse barramento é formado
basicamente por três vias específcas: barramento de dados, barramento de endereços e barramento
de controle, conforme a figura abaixo:

Os componentes são interconectados ao barramento da forma ilustrada na figura acima. A CPU


gera endereços que são colocados no barramento de endereços, e a memória recebe endereços
do mesmo. O caminho inverso desta operação não é possível, como pode ser observado na figura.

Durante a execução de um programa, cada instrução é levada até à ULA (Unidade Lógica e
Aritmética) a partir da memória, uma instrução de cada vez, junto com qualquer dado que seja
necessário para executá-la. A saída do programa é colocada em um dispositivo, tal como display
de vídeo ou disco. A comunicação entre os três componentes (CPU, memória e E/S) é feita sempre
pelos barramentos.

a) Barramento de dados

Este barramento interliga o RDM (localizado na CPU) à memória principal, para transferência de
instruções ou dados a serem executados. É bidirecional, isto é, ora os sinais percorrem o
barramento vindo da CPU para a memória principal (operação de escrita), ora percorrem o
caminho inverso (operação de leitura). Possui influência directa no desempenho do sistema, pois,

Maio de 2022 Página 13 de 30


quanto maior a sua largura, maior o número de bits (dados) transferidos por vez e
consequentemente mais rapidamente esses dados chegarão ao seu destino (CPU ou memória).

b) Barramento de endereços

Interliga o REM (localizado na CPU) à memória principal, para transferência dos bits que
representam um determinado endereço de memória onde se localiza uma instrução ou dado a ser
executado. É unidirecional, visto que somente a UCP aciona a memória principal para a realização
de operações de leitura ou escrita. Possui tantas vias de transmissão quantos são os bits que
representam o valor de um endereço.

c) Barramento de controle

Interliga a CPU, mais especifcamente a Unidade de Controle (UC), aos demais componentes do
sistema computacional (memória principal, componentes de entrada e de saída) para passagem de
sinais de controle gerados pelo sistema. São exemplos de sinais de controle: leitura e escrita de
dados na memória principal, leitura e escrita de componentes de entrada e saída, certifcação de
transferência de dados – o dispositivo acusa o término da transferência para a CPU, pedido de
interrupção, relógio (clock) – por onde passam os pulsos de sincronização dos eventos durante o
funcionamento do sistema.

É bidirecional, porque a UCP, por exemplo, pode enviar sinais de controle para a memória
principal, como um sinal indicador de que deseja uma operação de leitura ou de escrita, e a
memória principal pode enviar sinais do tipo wait (espere), para a CPU aguardar o término de uma
operação.

Ciclo de Busca-Decodificação Execução

Um ciclo de Busca-Decodificação Execução ou ciclo de instrução (também chamado de ciclo de


busca e execução ou ciclo busca-execução) é o período de tempo no qual um computador lê e
processa uma instrução em linguagem de máquina da sua memória ou a sequência de acções que
a CPU realiza para executar cada instrução em código de máquina num programa.

Maio de 2022 Página 14 de 30


A expressão “ciclo de busca e execução” também é muito usada, pois descreve em essência o
modo como um computador funciona: a instrução deve ser buscada na memória principal e
depois executada pela CPU. Deste ciclo emergem todas as funções do computador que são
familiares para o usuário final.

Cada CPU de computador pode ter vários ciclos diferentes, baseados em diferentes conjuntos de
instruções.

A CPU realiza repetidamente o seguinte ciclo de execução de uma instrução também chamado
“fetch-decode-execute”:

1. Busca a instrução (apontada por PC) da memória e carrega-a no IR.


2. Muda o PC para apontar para a próxima instrução da memória.
3. Decodifica a instrução, determinando o seu tipo, operandos, etc.
4. Se a instrução usa operandos (dados) da memória, determina os seus endereços.
5. Busca os dados de memória e carrega-os nos registradores.
6. Executa a instrução.
7. Armazena resultados (em registradores ou memória).

Toda CPU trabalha em dois ciclos principais, o Ciclo de Busca e o Ciclo de Execução. Assim que
o computador é iniciado, a CPU entra no Ciclo de Busca, em seguida passa para o Ciclo de
Execução e depois volta para o Ciclo de Busca. Ela continua nesse processo até que precise ser
desligada, saindo do Ciclo de Execução para o estado final.

Durante o Ciclo de Busca, é a Unidade de Controle que actua. Uma nova instrução é buscada da
Memória para que possa ser decodificada. Nessa fase os registradores [PC] e [IR] são utilizados.

Maio de 2022 Página 15 de 30


O PC é logo lido para se saber que instrução será executada, essa instrução é trazida para o IR e,
finalmente, é decodificada pela Unidade de Controle. Assim que esse processo termina, caso a
instrução não diga respeito à um laço, ou à uma repetição, o conteúdo de PC é incrementado. Ou
seja, PC recebe PC + 1. Assim, no próximo Ciclo de Busca a instrução do endereço seguinte será
carregada da memória e executada. Esse comportamento garante a característica de execução
sequencial dos programas.

No passo seguinte a CPU entra em Ciclo de Execução. Nessa etapa actua a Unidade de Ciclo de
Dados. Agora a Unidade de Controle já sabe exactamente que operação será executada, com quais
dados e o que fazer com o resultado. Essa informação é passada para a ULA e os registradores
envolvidos. Durante o Ciclo de Execução há cinco possíveis tipos de operação que podem ser
executadas:

Processador e memória - trata simplesmente da transferência de dados entre CPU e memória


principal;
Processador e Entrada e Saída - diz respeito à transferência de dados entre a CPU e um
dispositivo de Entrada e Saída, como teclado, mouse, monitor, rede, impressora etc.;
Processamento de Dados - são operações simplesmente de processamento dos dados, como
operação aritmética ou lógica sobre os registradores da CPU;
Controle - são instruções que servem para controlar os dispositivos do computador, como para
ligar um periférico, iniciar uma operação do disco rígido, ou transferir um dado que acabou de
chegar pela Internet para a Memória Principal;
Operações compostas - são operações que combinam uma ou mais instruções das outras em uma
mesma operação.

Busca de Dados

Em operações entre Processador e Memória, é necessário que dados sejam trazidos da memória
para servirem de entrada para a ULA, e/ou o resultado seja levado para armazenamento na
memória no final da execução. Para isso acontecer, é executada uma Busca de Dados. Isso é
determinado durante a decodificação da instrução, no ciclo de Busca de Instrução. Para isso, parte

Maio de 2022 Página 16 de 30


do conteúdo de [IR] é transferido para o [MAR]. Essa parte é justamente o endereço do parâmetro
da instrução. Em seguida a Unidade do Controle requisita à memória uma leitura. Assim, o
endereço, agora em MAR, é passado para a memória e o conteúdo lido da memória é passado para
o [MBR]. Agora o conteúdo é transferido para a ULA para que a operação seja executada (lógica
ou aritmética).

Se a instrução tiver dois ou mais parâmetros de memória, serão necessárias outras Buscas de
Dados. Como a memória é sempre mais lenta do que a CPU, instruções que necessitam Buscas de
Dados são muito mais lentas do que instruções de Processamento de Dados.

Perceba que cada instrução pode exigir mais tempo de execução do que outras. Isso depende de
quantos acessos à memória ela exigirá. Quanto mais acessos à memória, mais lenta a instrução. O
ideal é sempre usar registradores. Mas nem sempre é possível utilizar registradores. Eles estão
sempre em poucas quantidades e em menores tamanhos. O que os computadores sempre tentam
fazer é passar os dados da memória para os registradores assim que puderem, para que as próximas
instruções sejam aceleradas.

Interrupções

Além do ciclo básico de instrução apresentado anteriormente, a CPU pode ainda executar outro
tipo de tarefa. Ela diz respeito ao processamento de pedidos oriundos dos dispositivos de Entrada
e Saída. Como o Ciclo de Instrução da CPU é fechado, ou seja, a CPU sempre fica em estado de
repetição até que seja desligada, ela não pode atender a nenhum evento externo que não seja a
execução de um programa. Por exemplo, quando um usuário pressiona uma tecla do teclado, ou
faz um movimento com o mouse, ou mesmo, quando uma mensagem chega pela Internet através
da placa de rede. Se ela estiver em um Ciclo de Instrução fechado como mostrado anteriormente,
a CPU não fará nada. Ela precisa parar o que está fazendo para atender ao evento ocorrido e, só
então, voltar ao Ciclo de Instruções. Esse processo de parar o Ciclo de Instrução para atender a um
evento externo é chamado de Interrupção.

Maio de 2022 Página 17 de 30


O Ciclo de Instrução pode agora ser visto modificado para atender às Interrupções. Todas as
interrupções são recebidas e armazenadas internamente por um dispositivo chamado Gerenciador
de Interrupções. Esse dispositivo é um chip, semelhante à uma CPU, mas bem mais simples.

Na maioria dos computadores eles vêm soldados na Placa-Mãe, mas podem também vir dentro do
chip da CPU. Toda interrupção possui um código de identificação. Sempre que uma nova
interrupção chega nesse gerenciador, ele armazena esse código em sua memória e manda um sinal
para CPU através do Barramento de Controle. Durante seu Ciclo de Instrução, sempre que uma
instrução é executada, antes de voltar para o Ciclo de Busca, a CPU checa se algum sinal de
interrupção foi enviado pelo Gerenciador de Interrupção.

Quando não há uma interrupção, a execução volta ao Ciclo de Busca e o programa em execução
continua a ser executado. Mas se houver uma interrupção, a CPU agora vai parar a execução do
programa actual para atender a interrupção. Por exemplo, supondo que o usuário tenha pressionado
uma tecla do teclado. O código armazenado pelo Gerenciador de Interrupção indica que a
interrupção veio do teclado. A CPU pára sua execução do programa anterior e vai iniciar a
execução de um programa especial, o Tratador de Interrupção. O código do dispositivo (aqui seria
o teclado) serve para a CPU saber o endereço do Tratador de Interrupção que ela vai buscar da
memória. Então, ao sair da Checagem de Interrupção, a CPU muda o endereço do PC para o
endereço do Tratador de Instrução. Assim, no Ciclo de Busca a próxima instrução a ser trazida da
memória e posteriormente executada será a do tratador do teclado.

Cada tipo de interrupção precisa de um tratamento específico a ser feito. No caso do teclado, o
tratador vai checar que tecla foi pressionada. Isso é feito através de uma leitura à memória do
teclado (sim, todos os dispositivos possuem uma pequena memória) para saber que tecla foi
pressionada. Dependendo da tecla, uma operação diferente será executada. Geralmente, a CPU

Maio de 2022 Página 18 de 30


adiciona o código da tecla pressionada num endereço específico de memória. Cada programa,
lendo essa informação, tomará sua própria decisão sobre o que deve ser feito. O que acontece é
que apenas o programa activo no momento, vai ler esse conteúdo, executar a acção da tecla e
limpar essa área de memória. Se o programa for um editor de texto, por exemplo, o código pode
representar escrever a letra pressionada na posição actual do cursor dentro do texto.

Quando esse processo encerra, o tratamento é encerrado, e a CPU deve voltar à execução do
programa que havia sido interrompido. Isso só é possível porque, antes de passar à execução do
Tratador de Interrupção, a CPU salva os conteúdos de todos os registradores da CPU (inclusive o
PC e o IR). Então, antes de devolver a execução para o programa, a CPU restaura todos os valores
dos registradores antes salvos. Dessa forma, o programa retoma exactamente do ponto em que
parou.

As interrupções também ocorrem se o próprio programa em execução executar uma operação


ilegal. Isso é feito para evitar que a CPU entre em erro. Por exemplo, se um programa tentar acessar
uma área da memória que é proibida para ele, como a área de outro programa ou do Sistema
Operacional. Nesse caso, o programa é interrompido e não volta mais a executar, ele é finalizado
e a execução é devolvida ao Sistema Operacional. Algo semelhante ocorre em caso de defeitos em
alguns dispositivos. Por exemplo, se um programa estiver lendo um arquivo que está em um
pendrive, e esse pendrive é removido subitamente, uma interrupção é lançada e o programa é
encerrado, já que ele não faz mais sentido estar em execução.

Desempenho da CPU

É possível agora perceber que o desempenho das CPUs depende de muito outros factores além da
velocidade do seu clock. O computador precisa ter memórias rápidas para reduzir o tempo dos
Ciclos de Busca, precisam de mais registradores para usar menos a memória e também que poucas
interrupções ocorram. Cada vez que uma interrupção ocorre, o programa deve ser interrompido e
a chamada deve ser atendida. Isso vai atrasar demais o tempo de execução dos programas, dando
a impressão de baixo desempenho.

Basicamente, há dois tipos programas,

Maio de 2022 Página 19 de 30


 Os orientados à CPU e
 Os orientados a Entrada e Saída.

Quando um programa é orientado à CPU, há momentos longos de processamento de CPU e curtos


momentos de espera por um evento de Entrada e Saída. É o exemplo de programas que fazem
muitos cálculos matemáticos, como ferramentas de simulação, projectos de engenharia,
computação gráfica e planilhas de cálculos. Inicialmente os dados de entrada são passados por um
dispositivo de entrada, há longos momentos de cálculos e depois os resultados são passados para
um dispositivo de entrada e saída.

Já nos programas orientados à Entrada e Saída, que são aqueles chamados também de interactivos,
há muitos momentos de interacção e uso de dispositivos de Entrada e Saída, e poucos momentos
de uso de CPU. Esse é o caso de programas que utilizam muito o mouse e o teclado, como os jogos
e a própria navegação na internet.

O que deve se ter em mente é que o desempenho de um computador está muito ligado ao perfil de
cada usuário. Os Sistemas Operacionais são os responsáveis por escolher que tarefa colocar para
executar a cada momento e por quanto tempo ela deve executar até que uma nova tarefa entre em
execução. Assim, o papel do Sistema Operacional também é fundamental e determinante no
desempenho do sistema. O que ele tenta fazer no máximo que pode, é tentar ocupar os tempos de
espera de um programa com a execução de outro.

Exemplo de execução de um programa

Supondo que queira-se executar uma instrução de máquina que soma dois números que estão na
memória e salve o resultado em outro endereço de memória. Para tal, deve-se indicar que a

Maio de 2022 Página 20 de 30


memória (M) se comporta como um vector (um array) e entre parênteses rectos está indicado o
endereço do dado, ou da instrução. Sendo assim, a instrução que vai-se executar seria:

200: M[100] = M[101] + M[102]

Nesse caso, lê-se que no endereço 200 da memória há uma instrução que precisa somar o conteúdo
do endereço 101, com o conteúdo do endereço 102 e salvar o resultado no endereço 100 da
memória. Supondo que M[101] contenha o valor 10, e M[102] contenha o valor 20, ao final da
execução, o endereço 100 de memória (M[100]) deverá conter o valor 30.

Como uma instrução como essa será executada depende de cada arquitectura. Utilizando uma
abordagem que quebra as instruções em pequenos passos simples, que facilitam o trabalho de
decodificação da CPU.

Sendo assim, esse programa seria transformado na seguinte sequência de instruções e executado:

PC = 200; //Envia comando de leitura de instrução para a memória

IR <- (M[100] = M[101] + M[102]) // Busca instrução da memória

PC = PC + 1 //Instrução é passada do IR para a Unidade de Controle

A primeira acção seria realizar o Ciclo de Busca, visando trazer a instrução a ser executada da
memória para o processador. O endereço da instrução (200) seria passado para o PC e um comando
de leitura de instrução seria passado para a memória. Baseada no endereço trazido por PC, a
memória localizaria a instrução e a enviaria para o processador, que a armazenaria no
registrador IR. Antes de passar a instrução para a Unidade de Controle para dar início à execução,
o registrador PC é actualizado para o próximo endereço de memória, no caso, 201.

O próximo passo será iniciar o Ciclo de Execução:

//O primeiro dado é trazido da memória para o registrador R1

MAR = 101 //Envia comando de leitura de dado para a memória

MBR <- 10

Maio de 2022 Página 21 de 30


R1 = MBR // valor lido da memória é passado para o registrador R1

Como os dados a serem operados estão também na memória, é antes necessário executar uma
operação de Busca de Operando, ou Busca de Dado. O primeiro operando está no endereço 101.
Sendo assim, o endereço 101 é passado para o registrador de endereço (MAR). Esse endereço é
passado para a memória e é enviado um comando de leitura de dado. O conteúdo, o valor 10, é
então localizado pela memória e enviado para o processador, que o armazena no registrador de
dados (MBR). Como o MBR será utilizado nas próximas etapas de execução, seu conteúdo é salvo
em um registrador de propósito específico, o R1.

Em seguida, a Unidade de Controle passa para a busca do segundo operando, contido no


endereço 102:

//O segundo dado é trazido da memória para o registrador R1

MAR = 102 //Envia comando de leitura de dado para a memória

MBR <- 20

R2 = MBR // valor lido da memória é passado para o registrador R2

Essa etapa ainda faz parte do Ciclo de Execução, e também diz respeito à uma Busca de Dado.
A busca é mesma do passo anterior, mas agora o endereço buscado é o 102, e o conteúdo é o 20,
que é repassado para o registrador R2.

O próximo passo do Ciclo de Execução é executar a operação aritmética propriamente dita. Isso
geralmente é feito entre registradores de propósito geral, por serem mais rápidos do que se fosse
tratar dados da memória. Os conteúdos de R1 e R2 são somados e armazenados em R3:

R3 = R1 + R2

Para finalizar o processo, o resultado deve ser armazenado de volta na memória:

MAR = 100 // Endereço é passado para MAR

MBR = R3 // Resultado da operação é passado para MBR

Maio de 2022 Página 22 de 30


// Comando de escrita é passado para a memória

M[100] <- 30 // Endereço 100 da memória recebe o valor 30

Para isso ser realizado, é preciso executar uma operação de escrita na memória. O endereço 100 é
então passado para MAR e o resultado da operação, salvo em R3 é passado para MBR. Quando o
comando de escrita é enviado pela Unidade de Controle para a memória, ela lê o endereço 100 pelo
Barramento de Endereço e o valor 30 pelo Barramento de Dados e salva, então, o valor 30 no
endereço 100.

Com isso a operação é finalizada. Essa operação foi executada em aproximadamente 14 passos.
Esse valor é aproximado porque alguns deles são apenas o envio de sinal para a memória, e isso
geralmente é feito em paralelo com o passo seguinte. Se cada passo for executado dentro de uma
batida do relógio (ou ciclo de clock), teria-se 14 ciclos de clock para uma única instrução. Mas o
acesso à memória é sempre mais lento do que a execução do processador. Se cada acesso à
memória levar 3 ciclos de clock, teria-se um total de 20 ciclos de clock.

Parece bastante, mas algumas instruções podem levar muito mais ciclos do que isso, como
operações com Ponto Flutuante (números reais), ou de acesso a um periférico, como o disco rígido.
Isso depende muito de como o projecto do computador é elaborado.

Apesar do computador parecer pouco efectivo na execução de uma simples soma, como ele
executa numa frequência de clock muito alta, ele acaba executando muitas operações por segundo.
Então, utilizar apenas a frequência de clock como medida de desempenho não é uma boa ideia. O
mais utilizado é medir a quantidade de operações aritméticas que o processador é capaz de executar
por segundo. Hoje em dia um computador pessoal está na escala dos alguns Milhões de Instruções
por Segundo (ou MIPS).

Aumento do desempenho da CPU com Pipeline

A execução de um programa é essencialmente sequencial, ou seja, uma instrução só é executada


quando a anterior termina. Mas há dois modos de paralelismo que podem ser utilizados para

Maio de 2022 Página 23 de 30


melhorar ainda mais o desempenho do processador. O primeiro deles é através do
chamado Paralelismo em Nível de Hardware, que é obtido quando replicamos unidades do
processador para que elas funcionem em paralelo, reduzindo assim o tempo de execução dos
programas. A segunda forma é através do Paralelismo em Nível de Instruções, ou ILP (do
inglês, Instruction Level Parallelism). Nesse caso, as unidades do processador não são duplicadas,
mas melhores organizadas para que não fiquem ociosas. Há duas formas principais de implementar
o ILP, uma delas é através do Pipeline e a outra é através de processadores Superescalares.

Desempenho com Pipeline

Imagina que possa-se dividir o Ciclo de Instrução de um determinado processador nas cinco
etapas seguintes:

Carregar instrução (FI) - Traz a instrução da memória para o processador, armazena em IR (essa
etapa também é chamada de Fetch de Instrução) e a decodifica para execução no passo seguinte.

Carregar operandos (FO) - Traz os operandos da operação dos registradores para a ULA, para
que a operação seja realizada sobre eles, também chamada de Fetch de Operandos.

Executar instruções (EI) - Executa operação lógica ou aritmética propriamente dita.

Escrever em memória (WM) - Escreve o resultado da operação em memória, se necessário.

Escrever em registrador (WR) - Escreve o resultado da operação em um dos registradores, se


necessário.

Esse é um dos Ciclos de Instrução mais simples que pode-se imaginar, organizado em apenas 5
etapas.

Analisando o que acontece com cada etapa a medida em que o programa é executado. A primeira
instrução vai passar pela etapa FI, que a leva para o IR e a decodifica. Em seguida ela é passada
para a etapa FO, e os dados necessários para a operação são levados dos respectivos registradores
para a ULA. Neste exacto momento, a segunda instrução do programa está parada na memória,
aguardando sua vez para ser executada. Ao mesmo tempo, a etapa FI está ociosa.

Maio de 2022 Página 24 de 30


O mesmo vai ocorrer com todas as etapas de execução da primeira instrução do programa. Ela vai
ser executada na etapa EI, depois vai passar para a etapa WM que checará se há necessidade de
copiar o resultado para a memória e, finalmente, para a WR, que copiará o resultado para um dos
registradores. Quando a primeira instrução estiver na etapa WR, as etapas anteriores estarão todas
ociosas. Portanto o propósito do Pipeline é aproveitar o tempo ocioso para colocar as etapas
anteriores para irem adiantando a execução das próximas instruções.

O Pipeline vai separar as etapas de execução de instruções em unidades físicas independentes,


assim, uma etapa pode trabalhar com uma instrução, ao mesmo tempo em que uma outra unidade
trabalha com uma outra instrução. É a mesma estratégia utilizada pela indústria de produção em
massa para fabricar carros, por exemplo. Enquanto um chassi está sendo montado, outro está
recebendo a carroceria, outro o motor, outro sendo pintado e outro recebendo o acabamento
interno. Todas etapas trabalhando em paralelo e vários carros sendo tratados ao mesmo tempo.
Esta estratégia aumenta o desempenho da execução das instruções de forma grandiosa.

A primeira mudança necessária é a separação da memória em duas partes independentes (ou duas
memórias mesmo). Uma parte será utilizada apenas para instruções, e outra apenas para os dados.
Isso é necessário para que a etapa FI acesse a memória para buscar a próxima instrução, ao mesmo
tempo em que a WM acessa a memória para salvar o resultado de outra instrução anterior. Se
houvesse apenas uma memória para dados e instruções, isso não seria possível. Essa mudança vai
contra o que foi projectado na Arquitetura de von Neumann, e foi considerado um grande avanço.
Ela foi batizada de Arquitetura Harvard.

Outra mudança importante foi a adição de memórias intermediárias entre cada etapa. Essas
memórias são utilizadas para armazenar o resultado da etapa anterior e passá-lo para a etapa
posterior no ciclo seguinte. Elas são necessárias porque as etapas não executam necessariamente
sempre na mesma velocidade. Se uma etapa for concluída antes da etapa seguinte, seu resultado
deve ser guardado nessas memórias para aguardar que a etapa seguinte conclua o que estava
fazendo. Só então ela poderá receber o resultado da etapa anterior.

O mesmo ocorre na produção de um carro. A etapa de instalação do motor pode ser mais rápida
do que a de pintura, por exemplo. Então, se um carro acabou de receber um motor, ele deve ser

Maio de 2022 Página 25 de 30


guardado num local temporário até que o carro anterior tenha sua pintura concluída. Assim, a etapa
de instalação do motor pode receber um novo carro.

Benefício da execução em Pipeline

A medida em que a quantidade de instruções aumenta, o ganho de desempenho com Pipeline vai
se aproximando da quantidade de estágios, que foi 5 nesse exemplo. Então, quanto mais instruções
forem executadas e mais estágios de Pipeline tiver o processador, maior será o benefício de usar o
Pipeline.

O desempenho dos computadores

O desempenho dos processadores e dos computadores é muito valorizado pelas empresas por
agregarem muito valor a elas. Então quanto menos tempo se espera para um computador realizar
uma tarefa, mais tempo resta para a empresa se dedicar a outras actividades. O desempenho é tão
importante, que há uma corrida silenciosa entre empresas, universidades e governos para saber
quem é capaz de produzir o computador mais rápido do mundo. A organização chamada Top 500
organiza uma competição para conhecer quem são esses campeões de desempenho e anualmente
geral uma lista com os 500 computadores mais velozes. Actualmente a China e os Estados Unidos
disputam o topo da lista do Top 500. Nas décadas após a Segunda Guerra Mundial os países
disputavam uma guerra silenciosa (a Guerra Fria) para saber quem era o país mais poderoso em
poder bélico e em tecnologias, como a corrida espacial.

Hoje a Guerra Fria já terminou, mas a corrida pela liderança tecnológica e econômica mundial
continua e possui um novo concorrente forte disputando de igual para igual com os Estados
Unidos, a China. Nessa corrida o poder computacional é importantíssimo. Ter um computador
poderoso não significa apenas ser capaz de realizar tarefa mais rapidamente, mas ser também capaz
de realizar certas tarefas que seriam impossíveis em computadores menos poderosos. Um exemplo
disso é a construção de um computador que haja de forma semelhante ao cérebro humano. Chegar

Maio de 2022 Página 26 de 30


a esse ponto significa ser capaz de construir sistemas que possam substituir o homem em várias
tarefas complexas, como dirigir máquinas e até mesmo operar computadores. Outro exemplo seria
simular o comportamento perfeito da reacção do corpo humano a drogas. Assim, não seria mais
necessário o uso de cobaias para testar medicamentos. Esse avanço traria um poder incalculável a
quem o dominasse.

Medidas de desempenho dos computadores

Para medir o desempenho dos computadores, três métricas principais são mais usadas:

Ciclos de Clock por Instrução (CPI)

Determina quantos ciclos de clock são necessários para executar uma determinada instrução. O
Ciclo de Instrução é organizado em várias etapas e que isso depende de instrução para instrução.
Se uma instrução acessar mais memória do que outra, ela será mais lenta. Instruções que operam
com Pontos Flutuantes são mais lentas do que as operações com números inteiros. É fácil perceber
a razão disso. Operações com números reais são mais complexas de serem resolvidas, porque
devem ser realizadas para a parte fracionária e para a inteira, e depois o resultado deve ser
consolidado. Assim, simulações são realizadas com um processador e são calculados quantos
ciclos de clock cada tipo de instrução necessita em média para ser completada através do CPI.

Milhões de Instruções por Segundo (MIPS)

Maio de 2022 Página 27 de 30


O CPI é uma medida utilizada para medir o desempenho do processador para cada tipo de
instrução, mas não é muito boa para medir o desempenho para a execução de programas, que é o
objectivo de todo computador. Isso porque os programas são geralmente formados por instruções
de todos os tipos, com inteiros, ponto flutuante, acessando muita ou pouca memória. Outro factor
é que factores como, Pipeline, tecnologia de memória e tamanho da memória Cache, podem fazer
com que uma instrução seja executada lenta agora, e rápida logo em seguida. Para contornar isso,
uma métrica muito utilizada é o MIPS. Ela determina quantos Milhões de Instruções são
executadas pelo computador a cada segundo. Nesse caso, programas que demandam muito esforço
do computador são executados, a quantidade de instruções é contada e depois dividida pela
quantidade de segundos da execução.

MIPS (nativo) = Nº instr / (Tempo execução * 10^6 )

Milhões de Instruções em Ponto Flutuante por Segundo (MFLOPS)

Uma alternativa para o MIPS é o MFLOPS. O MIPS é muito eficiente, mas não para comparar
programas diferentes.

Para calcular o MFLOPS, são executadas apenas instruções que operam com Ponto Flutuante e
são calculados quantos segundos se passaram para cada milhão delas. Assim, ela pode ser definida
da seguinte forma:

MFLOPS (nativo) = Nº op vírg flut / (Tempo execução * 106 )

A única diferença para o cálculo do MIPS é que apenas as instruções que operam com Ponto
Flutuante são consideradas. Assim, diz respeito a quantos ciclos de clock em média são necessários
para executar uma instrução de ponto flutuante.

Os computadores pessoais e comerciais de hoje trabalham na escala MFLOPS.

Já os supercomputadores trabalham na escala de GFLOPS (Giga FLOPS). Aqueles computadores


que lideram a lista do Top 500, e são capazes até de mudar o PIB de um país, trabalham na escala
do TFLOPS (Tera FLOPS).

Maio de 2022 Página 28 de 30


Maio de 2022 Página 29 de 30
Bibliografias

 TANENBAUM, A.S. Organização Estruturada de Computadores. 3. edição. São


Paulo: Prentice - Hall do Brasil, 1992.
 STALLINGS, W.; Arquitetura e Organização de Computadores. 8ª Edição. São
Paulo: Pearson, 2010.

 Brito, A. V. (2019, Agosto 10). Introdução a Arquitetura de Computadores. Retrieved


from Producao Virtual: http://producao.virtual.ufpb.br/books/edusantana/introducao-a-
arquitetura-de-computadores-livro/livro/livro.chunked/index.html

 Proença, A. J. (2019, Agosto 27). Arquitectura de Computadores. Retrieved from gec:


http://gec.di.uminho.pt/discip/TextoAC/cap10.html

Maio de 2022 Página 30 de 30

Você também pode gostar