Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

150
Unidade II
Unidade II
5 O COMPUTADOR E SEUS DISPOSITIVOS DE ENTRADA E SAÍDA (E/S)
5.1 Principais características dos dispositivos de E/S
Um sistema operacional moderno possui como principal função a de controlar todas as operações 
do hardware do computador, tablet, smarthphone etc., incluindo os modos de comunicação internos e 
externos. Para tal, usa drivers que operam e comandam os dispositivos de E/S. Entre os comandos que o 
sistema operacional dispõe para realizar esse controle, destacam‑se inicialização, interrupção e uso dos 
hardwares que constituem um computador.
 Observação
O termo E/S (entrada/saída) é comumente aplicado na denotação 
de dispositivos periféricos, ou seja, que se encontram instalados fora da 
placa‑mãe do computador. Esse termo também é usado para referenciar a 
capacidade de o computador se comunicar com todos os seus dispositivos, 
tanto na “entrada”, recebendo dados/instruções, assim como na “saída” 
desses mesmos dados/instruções.
Todos os dispositivos de hardware do computador têm módulos de comunicação de entrada e saída 
com o sistema operacional. Essa comunicação possui as seguintes funções:
• controle e temporização;
• comunicação com a CPU;
• comunicação com todos os dispositivos de E/S;
• armazenamento temporário dos dados (buffer);
• detecção de erros.
Durante sua operação, o processador deve interagir com um ou mais dispositivos externos em 
diferentes tipos de padrões de comunicação. Os recursos internos disponíveis à CPU, como a memória 
principal e o barramento do sistema, possuem a necessidade de compartilhar várias de suas atividades, 
o que também inclui dados oriundos de dispositivos de E/S. Dessa forma, deve haver controle e 
temporização (sincronismo) para que o fluxo de tráfego de dados seja coordenado entre os dispositivos. 
151
ARQUITETURA DE COMPUTADORES MODERNOS
Por exemplo, o controle da transferência dos dados armazenados em um dispositivo externo, para ser 
processado na CPU, pode envolver as seguintes etapas (STALLINGS, 2010):
• A CPU pergunta ao módulo de E/S se o estado corresponde a “conectado”.
• O módulo de E/S deverá retornar qual é o estado atual do dispositivo.
• Se o dispositivo estiver no estado operacional (pronto para transmissão de dados), então a CPU 
solicita o início da transferência de dados através de comandos enviados ao módulo de E/S.
• O módulo de E/S obtém uma unidade de dados de 8 ou 16 bits do dispositivo externo.
• Os dados são transferidos do módulo de E/S para a CPU.
Além dessas etapas, a comunicação entre os diversos dispositivos externos e a CPU abrange os 
seguintes aspectos:
• Decodificação de comando: os módulos de E/S deverão aceitar os comandos da CPU que são 
enviados como sinais no barramento de controle.
• Dados: deverão ser transferidos entre a CPU e o módulo de E/S através do barramento de dados.
• Informação de estado: devido à baixa velocidade dos periféricos de E/S, é vital conhecer o 
estado atual do seu módulo. Por exemplo, se o módulo de E/S precisar enviar dados para a CPU 
para realizar a operação de leitura, ele pode não ser capaz de executar a operação, pois ainda 
estará trabalhando atendendo ao comando de E/S anterior.
• Reconhecimento de endereço: da mesma forma que cada palavra contida na memória possui 
um certo endereço, cada dispositivo de E/S também o terá. Dessa maneira, um módulo de E/S 
deverá reconhecer um endereçamento exclusivo para cada dispositivo externo que ele controla.
• Comunicação com o dispositivo: o módulo de E/S deverá ser capaz de executar a comunicação 
entre dispositivos, o que envolverá diversos sinais de controle, determinando a função que o 
dispositivo realizará, conforme mostra a figura a seguir:
152
Unidade II
Sinais de controle 
do módulo de E/S
Sinais de estado 
do módulo de E/S
Bits de dados de e para 
o módulo de E/S
Lógica de 
controle
Buffer
Transdutor
Dados (device‑unique) 
de e para o ambiente
Figura 132 – Diagrama de blocos representando um dispositivo externo e seus sinais de comunicação
Fonte: Stallings (2010, p. 178).
5.2 Interfaces e dispositivos de E/S
Os dispositivos de E/S possuem diferentes taxas de transmissão entre eles, conforme ilustrado na 
tabela a seguir. Basicamente, um dispositivo de E/S se comunica com o meio externo e com sua interface 
através do envio de bits e sinais de controle.
Tabela 5 – Dispositivos de E/S e velocidade de transmissão de dados
Dispositivo Taxa de transmissão em KB/s
Teclado 0,01
Mouse 0,02
Impressora matricial 1
Modem 2 a 8
Disquete 100
Impressora a laser 200
Scanner 400
CD‑ROM 1.000
Rede local 500 a 6.000
Vídeo gráfico 6.000
Disco rígido 2.000 a 10.000
Adaptada de: Monteiro (2019, p. 341).
153
ARQUITETURA DE COMPUTADORES MODERNOS
Basicamente, o processo de comunicação envolve o envio/recebimento de dados e sinais de 
controle das operações. Embora cada dispositivo possua características de funcionamento próprios, 
o fluxo de informações é o mesmo para todos. A figura a seguir mostra alguns dos principais 
componentes de uma interface de E/S, assim como os tipos de informação e o sentido direcional 
para o fluxo de dados transmitidos/recebidos (RX/TX) das conexões entre os periféricos.
Barramento 
do sistema
Dispositivo E/S
Dados
Sinais de 
controle
Dados
Lógica
Controle
Dados
Endereço Registrador de endereço
Registrador 
de dados
Registrador 
de controle
Figura 133 – Módulo de interface e conexão de E/S
Fonte: Monteiro (2019, p. 342).
Na figura anterior, também é possível observar três diferentes áreas que são constituídas por 
registradores, os quais têm a função de interação básica entre a interface de E/S e sua conexão com 
o barramento do sistema, além de controlar os registradores de dados e endereços. Na sequência, 
destaca‑se o espaço de armazenamento de dados que circulam entre os dispositivos pelo barramento 
durante as operações de E/S, fazendo com que a interface de E/S atue como um buffer para operar com 
diferentes velocidades em compatibilidade com os diferentes dispositivos. A terceira área é onde se 
localiza a lógica de funcionamento da interface, que permite a interação entre os dispositivos externos 
e a detecção de erros, entre outros.
5.3 Teclado
Um dos principais dispositivos periféricos do computador para interação homem/máquina 
é o teclado. Ele possui como principal função a de facilitar a entrada de dados no computador. 
O funcionamento do teclado se baseia no reconhecimento de padrões decorrentes da interpretação 
do sinal elétrico de cada tecla ao ser pressionada pelos dedos do usuário. A figura a seguir mostra um 
exemplo típico.
154
Unidade II
Figura 134 
Disponível em: https://bit.ly/3iHVh8w. Acesso em: 17 jan. 2023.
Existem basicamente três categorias de teclado em uso nos dispositivos atuais, que são: (MONTEIRO, 
2019):
• Teclado apenas numérico: usado geralmente em calculadoras de bolso ou mesa.
• Teclado utilizado em sistemas dedicados: consistem em teclas aplicadas somente para entrada 
de dados referentes à tarefa para a qual o dispositivo foi projetado (sistemas embarcados), como 
equipamentos de ar‑condicionado, micro‑ondas, televisão, foguetes etc.
• Teclado de uso geral: constituído por teclas alfabéticas, numéricas, sinais de pontuação, 
operações aritméticas, entre outras de uso especial.
O teclado opera como uma chave liga‑desliga que, ao pressioná‑la, aciona‑se o interruptor da chave 
e, como consequência, o sinal elétrico naquele local será inserido pelos circuitos de controle. Abaixo das 
teclas do teclado, há um circuito impresso com diferentes dispositivos eletrônicos (capacitores, resistores, 
entre outros). A tecla capacitiva funciona baseada na variação de capacitância do acoplamento entre 
duas placas metálicas. Essa variação sempre ocorre quando uma tecla for pressionada. Dispositivos 
capacitivos como o teclado são, geralmente, de baixo custo e com tamanhos relativamente pequenos, 
além de possuírem tempo longo de vida, com cerca de 20 milhões de pressionamentos.Basicamente, um 
teclado de computador pode ser descrito, em termos de funcionamento, assim:
155
ARQUITETURA DE COMPUTADORES MODERNOS
• Detecção do pressionamento de teclas: um processador de 8 bits, geralmente Intel 8048 ou 
8049 interno ao teclado, realiza a varredura para a detecção das teclas pressionadas.
• Debouncing de pressionamento: confirma se a tecla foi realmente pressionada, repetindo a 
varredura várias vezes.
• Geração do código de identificação da tecla pressionada: criação de uma codificação de 
8 bits baseada em linhas e colunas, denominada código de varredura ou scan code.
• Geração de um sinal de interrupção: produzido a partir do pressionamento de uma tecla, 
fazendo com que a CPU tome providências em relação à identificação da tecla scaneada e seu 
valor decodificado pelo programa.
• Troca de sinais de interrupção entre teclado e CPU: nessa operação, o código de varredura é 
transmitido para um endereço da memória principal, interpretado por um programa de E/S.
 Observação
A BIOS (basic input output system) analisa o código recebido para 
verificar se uma tecla foi pressionada sozinha ou em conjunto com 
outra tecla, por exemplo, a tecla ALT, e aciona o código da tabela ASCII 
correspondente às teclas pressionadas na área de memória apropriada para 
assim reproduzir o resultado do acionamento das teclas.
5.4 Mouse
O mouse (figura a seguir) é um dispositivo de entrada cujo propósito principal é o de facilitar o 
trabalho do usuário final em sua tarefa de comunicação com o computador. Seu nome deriva do seu 
formato pequeno e sua ligação com o computador por um fio (em mouses mais antigos) que se assemelha 
a uma cauda de rato, e seus movimentos agitados na mão também lembram esse pequeno animal. 
Diferentemente do teclado, em vez de o usuário ter que digitar comandos, ao utilizar o mouse somente 
é necessário o uso da coordenação motora para a movimentação. Ele trabalha basicamente como uma 
interligação visual do usuário com os sistemas de hardware e software do computador. Ele possui 
alguns tipos de sensores (de acordo com o modelo), como mecânicos, ópticos e ópticos‑mecânicos, para 
realizar a captação do movimento em uma superfície plana e transmitir as informações coletadas desses 
movimentos ou do acionamento de seus botões. Alguns programas fazem parte do funcionamento do 
mouse, como elementos de interface apontadores na tela, onde o usuário escolhe o que quer acionar e 
seleciona o item pressionando um dos dois botões.
156
Unidade II
Figura 135 – Mouse óptico sem fio
Disponível em: https://bit.ly/3WgBISv. Acesso em: 17 jan. 2023.
O mouse mecânico possui uma esfera coberta com borracha que gira, acompanhando o movimento 
de sua rotação. Esse movimento da esfera é então transmitido a dois roletes perpendiculares que 
possuem rodas de contatos com o metal. Assim, conforme as rodas giram, os contatos tocam algumas 
escovas em seu interior. Já o mouse do tipo óptico‑mecânico tem o mesmo mecanismo de esfera e rolete 
em seu interior, com exceção dos roletes conectados a furos em sua carcaça, onde, conforme as rodas 
giram, elas podem bloquear ou permitir a passagem da luz produzida por um LED. Isso fará com que as 
transições entre essa passagem da luz sejam detectadas por sensores semicondutores sensíveis à luz.
5.5 Impressoras matriciais, jato de tinta e a laser
As impressoras também são dispositivos básicos de saída de informações, e nela os dados internos 
do computador são convertidos em símbolos impressos em um meio, como o papel, por exemplo. Elas 
têm algumas caraterísticas básicas (MONTEIRO, 2019):
• Volume de impressão que a impressora suporta por unidade de tempo: geralmente, elas 
possuem “vazão” de impressão e caracteres por segundo (cps), dados em linha por minuto (lpm) 
ou em páginas por minuto (ppm), de acordo com o tipo e modelo utilizado.
• Tecnologia para impressão de símbolos: divididos em matricial, jato de tinta, laser e térmica 
(uso de cera aquecida ou sublimação de tinta).
As impressoras de impacto, como as matriciais (figura a seguir), já foram muito populares no 
mercado.
157
ARQUITETURA DE COMPUTADORES MODERNOS
Figura 136 – Impressora do tipo matricial
Disponível em: https://bit.ly/3CQ8Cmb. Acesso em: 17 jan. 2023.
O seu mecanismo de impressão está baseado em um dispositivo com um conjunto de martelos ou 
agulhas, utilizados para pressionar uma fita com tinta, imprimindo o símbolo no papel posicionado 
atrás da fita.
C
B
B
C
A
Figura 137 – Mecanismo de impressão em uma impressora matricial
Fonte: Monteiro (2019, p. 362).
158
Unidade II
O item A da figura anterior mostra o mecanismo de impressão, constituído pela cabeça de impressão. 
Já o item B se refere à fita contendo tinta. Por sua vez, o item C ilustra o papel onde os símbolos serão 
impressos. A geração de pontos no papel tem seu início com a cabeça de impressão, formada por um 
tubo contendo agulhas e ligado a uma bobina; as agulhas são posicionadas e uma corrente elétrica 
energiza a bobina, que impactará as agulhas, pressionando a fita, impregnando o papel. Dessa maneira, 
a cabeça imprimirá simultaneamente os n pontos de uma coluna e os n pontos da próxima coluna, 
sucessivamente, até formar o caractere desejado e completar a linha.
As impressoras do tipo jato de tinta ou ink‑jet (figura a seguir) são mais populares e utilizadas 
atualmente, em especial pelo seu baixo custo. Seu funcionamento envolve a produção de caracteres em 
forma de uma matriz de pontos em uma folha de papel. Esse processo se assemelha com as impressoras 
matriciais e a diferença está na técnica aplicada para a criação dos pontos no papel.
Figura 138 – Impressora do tipo jato de tinta
Disponível em: https://bit.ly/3iEk9OJ. Acesso em: 17 jan. 2023.
Em impressoras jato de tinta, a criação do ponto é o resultado da aplicação de uma gota de 
tinta, depositada no papel na região determinada por coordenadas x e y. O mecanismo que realiza 
a impressão desse tipo de impressora é constituído por uma certa quantidade de tubos pequenos 
contendo um bico injetor para permitir a saída das gotículas de tinta. Tecnologias atuais são baseadas 
na projeção de gota a gota por demanda ou drop‑on‑demand bubble jet, com modelos que possuem de 
128 a 256 bicos injetores. Esse processo consiste na passagem de uma corrente elétrica através de uma 
resistência que aquecerá a tinta, facilitando a saída pelo bico do tubo injetor. Esse processo ocorrerá 
milhares de vezes por segundo durante toda a etapa de impressão. Em relação às cores de impressão, 
algumas impressoras só trabalham com tinta preta e são conhecidas como monocromáticas, enquanto 
159
ARQUITETURA DE COMPUTADORES MODERNOS
outras impressoras jato de tinta imprimem colorido por meio do emprego de três ou quatro tubos de 
tinta (magenta, ciano, amarela e preta) formando as cores necessárias para a impressão.
Como uma impressora a jato de tinta possui vários bicos injetores, ela produzirá uma matriz de 
pontos mais densa em comparação com as matriciais, que possuem geralmente 24 agulhas. Os valores 
típicos de impressão de tinta estão na faixa de 300 x 300 pontos por polegada ou ppi (point per inch).
As características de impressoras a laser, como a figura a seguir, são: alta qualidade na impressão da 
imagem, excelente flexibilidade e velocidade de impressão maior se comparada a outros modelos (jato 
de tinta e matricial).
Figura 139 – Impressora do tipo laser
Disponível em: https://bit.ly/3iRDD29. Acesso em: 17 jan. 2023.
A tecnologia aplicada nesse tipo de impressora consiste em um tambor fotossensível rotativo 
de precisão. Este, no início de cada ciclo, recebe uma carga de cerca de 1.000 volts. Na sequência, a 
luz de um laser passa pelo comprimento do tambor interno à impressora a fim de refleti‑lo como um 
espelho octogonal e rotativo, como mostra a figura a seguir. O feixe de luz é modulado para produzir 
um padrão de pontos claros e escuros no papel. Após uma linha de pontos ser pintada, o tambor gira 
uma fraçãode um grau, para permitir que a próxima linha também seja pintada. Na sequência, de 
acordo com a rotação, a primeira linha de pontos chega ao reservatório (toner), que contém um pó 
negro eletrostaticamente sensível à corrente elétrica. Então, o toner é atraído pelos pontos carregados, 
formando uma imagem produzida naquela linha de forma que o tambor revestido pelo pó seja 
pressionado contra o papel, transferindo todo o pó para ele. O papel passa pelos rolamentos que estão 
aquecidos, fundindo‑se com o toner, fixando a imagem final no papel.
160
Unidade II
Laser Espelho octogonal rotativo
Feixe de luz 
atinge o tambor
Toner
Papel em branco
Roletes 
aquecidos
Saída empilhada
Raspador
Tambor
Tambor pulverizado e carregado
Dispensador
Figura 140 – Mecanismo de impressão em uma impressora a laser
Fonte: Tanenbaum e Austin (2013, p. 96).
Após o término do processo de impressão no papel, o tambor é descarregado e raspado para eliminar 
qualquer resíduo de pó a fim de prepará‑lo para o recebimento de uma nova carga elétrica e um novo 
revestimento para a próxima impressão de páginas.
5.6 Monitores de vídeo
Os monitores de vídeo dos computadores são periféricos que se tornaram muito populares porque 
facilitam a interação homem‑computador. Os primeiros computadores não possuíam monitores de 
vídeo, mas lâmpadas que acendiam e apagavam na frente do painel da máquina, em um padrão que 
representava valores em binário. Também são conhecidos como displays, pois a tradução se refere ao 
elemento de visualização, e possuem diversas tecnologias e características físicas para exibição de uma 
imagem ou vídeo, como (MONTEIRO, 2019):
• tubo de raios catódicos ou CRT (cathode‑ray tube);
• diodos emissores de luz ou TV de LED (light emitting diodes);
• monitores de cristal líquido ou LCD (liquid‑crystal display);
• monitores com painel estreito ou VPE (flat panel display);
161
ARQUITETURA DE COMPUTADORES MODERNOS
Figura 141 – Monitor de vídeo CRT
Disponível em: https://bit.ly/3QNOsyX. Acesso em: 17 jan. 2023.
Essas são algumas tecnologias utilizadas em monitores de vídeo, porém existem ainda outras, como 
as de gás plasma e as eletroluminescentes. Apesar dessas novas tecnologias, os monitores do tipo CRT 
prevaleceram durante muitos anos como padrão em empresas ou mesmo em residências. A próxima 
figura mostra de forma esquemática o funcionamento de um monitor de tubo baseado em raios 
catódicos e seus respectivos componentes, que são:
• um cátodo, também conhecido como canhão de elétrons;
• um anodo formado pela tela frontal do vídeo, coberta com o elemento químico fósforo;
• um par de bobinas defletoras de feixe na horizontal e na vertical para direcionar o feixe de elétrons.
A partir desses itens, é possível explicar o funcionamento de um monitor de tubo, que ocorre 
nessa sequência:
• o canhão de elétrons emite um feixe concentrado que caminha velozmente para a tela frontal de 
fósforo, iluminando‑a;
• durante o caminho para a tela, o feixe de elétrons sofrerá uma deflexão que produzirá um ponto 
brilhante no local desejado da tela;
• a deflexão do feixe de elétrons causará uma varredura nas coordenadas X e Y da tela, denominada 
rastro ou raster‑scan.
162
Unidade II
Cobertura metálica 
interior com alta voltagem
Cobertura 
com fósforo
Feixe de elétrons
Deflexão 
horizontal
Grade de controle
Catodo
Canhão
Sistema de foco
Deflexão 
vertical
Figura 142 – Tubo de raios catódicos de monitores de vídeo
Fonte: Monteiro (2019, p. 354).
 Saiba mais
Entenda melhor como funcionam os monitores LCD em:
CIRIACO, D. Como funcionam os monitores LCD. Canaltech, 6 maio 
2009. Disponível em: https://bit.ly/3ZGaszL. Acesso em: 17 jan. 2023.
6 COMPUTADOR E O CONJUNTO DE INSTRUÇÕES DE MÁQUINA
6.1 Aspecto fundamental do ciclo de instrução
A maior parte das instruções de um computador pode ser dividida em duas categorias, relacionadas 
a como elas interagem com o hardware: registrador‑memória ou registrador‑registrador. As instruções 
do tipo registrador‑memória permitem que palavras (words) da memória possam ser buscadas em 
registradores para serem utilizadas como entradas pela ULA em instruções sequenciais. No caso do 
registrador‑registrador, uma instrução típica busca dois operandos nos registradores, os traz para a ULA 
e efetua uma operação aritmética ou booleana e armazena o resultado em um dos registradores. Esse 
método é conhecido como ciclo de caminho de dados e é uma das principais funções dos registradores 
das CPUs, de forma que, quanto mais rápido for o ciclo do caminho de dados, mais rápido será o 
funcionamento do computador.
163
ARQUITETURA DE COMPUTADORES MODERNOS
Para que ocorra essa comunicação de instruções pelos registradores ou pela memória, é necessário 
compreender como ocorre o ciclo de busca e execução de instruções. Quando se trata do ciclo direto de 
execução de instruções em sua forma mais simplificada, primeiro o processador busca as instruções (lê 
a próxima instrução da memória dentro do processador) uma por vez, depois as executa (interpreta o 
código de operação e efetua a operação indicada).
 Lembrete
A execução de um programa é baseada em repetir o processo de busca 
e execução da instrução sempre que houver mais instruções a serem 
executadas em um mesmo ciclo. É importante salientar que as interrupções 
também podem ocorrer durante a execução das instruções.
Nesses casos, salva‑se o estado do processo atual e atende‑se à instrução de interrupção indicada. 
Após o término da execução das instruções, o processo é finalizado. A figura a seguir mostra um ciclo 
de instrução básico.
Ciclo de busca Ciclo de execução
Início FimBuscar próxima instrução
Executar 
instrução
Figura 143 – Ciclo de instrução de um computador sem interrupções
Fonte: Stallings (2010, p. 56).
A execução de instruções no ciclo é dependente do tipo de instrução que será executada e, mais 
intrinsecamente, de qual operando será utilizado nas operações.
6.2 Os tipos de operandos
Um operando é uma entrada ou argumento em uma dada instrução e é dividido em quatro categorias: 
números, caracteres, endereços e dados lógicos. O endereçamento é uma forma de dados e pode conter 
cálculos realizados sobre a referência de memória do operando em uma dada instrução.
6.2.1 Números
Todas as linguagens de máquina como o assembly, por exemplo, incluem algum tipo de dado 
numérico. Mesmo um processamento de dados não numérico terá a necessidade de que haja números 
atuantes, como contadores, tamanho de campo etc. Existem basicamente três tipos de dados numéricos 
encontrados em um computador:
164
Unidade II
• Inteiros binários ou ponto fixo binário: representados pelos dígitos zero e um, sinal de menos 
e vírgula fracionada.
• Ponto flutuante binário: expresso por um intervalo de inteiros positivos e negativos centrados 
em zero.
• Decimal: organizado em casas decimais utilizando a vírgula para indicar a que ordem o número 
pertence.
6.2.2 Caracteres
Baseado no uso de texto ou strings de caracteres, esse tipo de codificação foi desenvolvido a fim de 
facilitar o armazenamento de dados e instruções. Diversos códigos foram desenvolvidos, e geralmente 
são representados por uma sequência de bits, sendo o American Standard Code for Information 
Interchange (ASCII) o mais utilizado. Cada caractere no ASCII é destacado por um padrão exclusivo de 
7 bits, de modo que 128 caracteres diferentes poderão ser indicados. Como os computadores atuais são 
orientados a byte, cada caractere no ASCII será armazenado em um byte separado, conforme pode ser 
observado nas tabelas a seguir.
Tabela 6 – Parte do conjunto de caracteres ASCII de controle
Hexa Nome Significado Hexa Nome
0 NUL Null 10 DLE
1 SOH Start Of Heading
2 STX Start Of Text
3 ETX End Of Text
4 EOT End Of Transmission
5 ENQ Enquiry 15 NAK
6 ACK ACKnowledgement 16 SYN
7 BEL BELl 17 ETB
8 BS BackSpace 18 CAN
9 HT Horizontal Tab 19
A LF Line Feed 1A
B VT Vertical Tab 1B
C FF Form Feed 1C
D CR CarriageReturn 1D
E SO Shift Out 1E
F SI Shift In 1F
Fonte: Tanenbaum e Austin (2013, p. 108).
165
ARQUITETURA DE COMPUTADORES MODERNOS
Tabela 7 – Parte de outro conjunto de caracteres ASCII de controle
Hexa Nome Significado
0 NUL Null
1 SOH Start
2 STX Start
3 ETX End
4 EOT End
5 ENQ Enquiry
6 ACK ACKnowledgement
7 BEL BELl
8 BS BackSpace
9 HT Horizontal
A LF Line
B VT Vertical
C FF Form
D CR Carriage
E SO Shift
F SI Shift
Fonte: Tanenbaum e Austin (2013, p. 108).
A tabela ASCII contém os códigos de 0 a 1F (hexadecimal) para realizar o controle operacional e de 
20 a 7F utilizados como caracteres de uso geral do computador.
6.2.3 Dados lógicos
Um dado lógico é uma palavra ou unidade endereçável tratada como uma única unidade de dados. 
É útil também considerar essa unidade sendo constituída de n bits de dados de 1 bit, com cada bit 
valendo 0 ou 1.
Existem basicamente duas vantagens no uso da orientação a bits; primeiro, é possível armazenar 
um array (coleção de elementos) de itens de dados binários, em que cada valor pode assumir 
verdadeiro (1) e falso (0). A partir desses dados lógicos, a memória pode ser utilizada de forma 
eficiente no armazenamento; segundo, há situações em que se deseja manipular os bits de um item 
de dados, por exemplo, se as operações de ponto flutuante forem implementadas diretamente no 
software. Assim, é necessário deslocar os bits significativos em algumas operações.
6.3 Execução de instrução: ciclo indireto
A execução de uma instrução envolve o uso de um ou mais operandos lidos da memória. Se algum 
endereçamento indireto for utilizado, acessos adicionais à memória serão necessários. Nessas situações, 
um endereço indireto será considerado como um estágio a mais no ciclo de instrução, conforme pode 
ser observado na figura a seguir.
166
Unidade II
Executar
Buscar
IndiretoInterrupção
Figura 144 – Ciclo de instrução indireto
Fonte: Stallings (2010, p. 362).
No ciclo, a instrução é lida e examinada para determinar se há algum endereçamento indireto 
envolvido. Se houver, os operandos necessários são obtidos através de endereçamento indireto. 
Havendo interrupções durante a execução do ciclo de instrução, ela será processada antes da obtenção 
da próxima instrução.
6.4 Busca e execução de instruções
A cada início de ciclo, o registrador program counter (PC – contador de programa) mantém o endereço 
da instrução a ser buscada na memória. A cada busca, o PC será incrementado a fim de procurar a 
próxima instrução da sequência, ou seja, realizará a busca da próxima instrução com o endereço de 
memória mais alto. Por exemplo, considerando um computador em que cada instrução ocupará uma 
palavra de 16 bits, o contador de programa poderá estar alocado no endereço de número 300. Assim, o 
processador irá buscar a próxima instrução no local 300, e nos próximos ciclos de instrução ele irá buscar 
nos endereços 301, 302, 303, 304 etc. Cada instrução é lida e carregada no registrador IR (registrador 
de instrução), que interpretará a instrução e fará a ação desejada. Em geral, as ações a serem realizadas 
estão separadas em quatro categorias, listadas a seguir (STALLINGS, 2010):
• Processador – memória: quando os dados podem ser transferidos do processador para a memória 
ou da memória para o processador.
• Processador – E/S: quando os dados podem ser transferidos de, ou para, um dispositivo de 
entrada e saída.
• Processamento de dados: quando o processador realiza alguma operação lógica/aritmética 
sobre os dados.
167
ARQUITETURA DE COMPUTADORES MODERNOS
• Controle: quando uma instrução específica da sequência de execução pode ser alterada. Por 
exemplo, o processador pode buscar uma instrução no local de memória 149, que especifica que a 
próxima instrução estará no local 182. Assim, o processador guardará essa informação, definindo 
que o contador de programa será definido como 182; dessa forma, o próximo ciclo de busca da 
instrução será retirado do endereço 182 em vez do endereço 150.
Em outro exemplo, um computador hipotético pode incluir algumas características como 
instrução/palavra de 16 bits de extensão, oferecendo 4 bits para o opcode e podendo haver até 24 = 16 
opcodes diferentes e até 212 = 4.096 palavras de memória endereçadas diretamente, registrador único 
(acumulador – AC) e memória também de 16 bits. O ciclo de instrução pode envolver mais de uma 
referência à memória e especificar uma operação de E/S. Através de um diagrama de estados, pode‑se 
entender melhor o processo de busca e execução de uma instrução, que engloba as seguintes etapas:
• Cálculo de endereço de instrução (instruction address calculation – IAC): estágio responsável 
pela determinação do endereço da próxima instrução a ser executada.
• Busca da instrução (instruction fetch – IF): ler a instrução do seu local da memória para 
o processador.
• Decodificação da operação da instrução (instruction operation decoding – IOD): determinar 
o tipo de operação e os operandos a serem executados.
• Cálculo do endereço do operando (operation address calculation – OAC): verificar se uma 
operação envolve alguma referência a um operando na memória.
• Busca do operando (operation fetch – OF): estágio em que ocorre a busca pelo operando da 
memória ou de algum dispositivo de E/S.
• Operação dos dados (data operation – DO): estágio que realiza a operação solicitada pela 
instrução.
• Armazenamento do operando (operand store – OS): armazenar (escrever) o resultado na 
memória ou enviar o resultado para algum dispositivo de E/S.
Os estágios contidos no ciclo de instrução, observados na figura a seguir, envolvem uma troca entre 
o processador e a memória ou algum módulo de E/S.
168
Unidade II
Armazenamento 
do operando
Busca do 
operando
Busca da 
instrução
Cálculo do 
endereço da 
instrução
Cálculo do 
endereço do 
operando
Decodificação 
da operação da 
instrução
Cálculo do 
endereço do 
operando
Operação 
dos dados
Múltiplos 
operandos
Instrução completa, busca 
próxima instrução Retorna dados de string ou vetor
Múltiplos 
resultados
Figura 145 – Diagrama dos estágios do ciclo de instrução
Fonte: Stallings (2010, p. 59).
O estado de cálculo do operando aparece duas vezes na figura, pois uma instrução pode envolver 
uma leitura e/ou uma escrita, utilizando somente um identificador de estado para as duas situações.
6.5 Formatos de instrução
Uma instrução possui um código de operação (opcode) formado por um conjunto de informações, 
como o armazenamento dos resultados das operações realizadas. As instruções geralmente possuem um 
formato bem definido, contendo, além do opcode, alguns endereçamentos em uma mesma operação. 
Outros modelos de formatos de instruções podem ser observados na figura a seguir.
Opcode
A)
Opcode Address1 Address2
C)
Opcode Address
B)
Addr1Opcode Addr2 Addr3
D)
Figura 146 – Modelos simplificados de formatos de instrução
Fonte: Tanenbaum e Austin (2013, p. 285).
Na parte A da figura anterior, observa‑se uma instrução que não possui endereçamento, sendo 
interpretada como uma instrução do tipo imediata, ou seja, não envolve outros registradores ou a 
169
ARQUITETURA DE COMPUTADORES MODERNOS
memória principal, pois a própria instrução já está contida no registrador em uso. Já nas partes B, C e 
D da figura anterior, nota‑se que sempre há um ou mais endereços (address) relacionados ao opcode. 
Alguns computadores possuem instruções com o mesmo comprimento (em bits), porém em outros 
o tamanho pode ser diferente, variando inclusive em relação ao tamanho da palavra. Instruções que 
têm o mesmo tamanho da palavra facilitam a decodificação, embora possam desperdiçar espaço para 
o armazenamento. Na figura a seguir, destacam‑se as diferentes relações entre as instruções com 
diferentes comprimentos e larguras.
 1 Palavra 1 Palavra 1 Palavra 
Instrução Instrução Instrução Instrução
Instrução Instrução Instrução Instrução Instr. Instr.
Instrução Instrução Instrução
Instrução
Instrução InstruçãoInstrução
A) B) C)
Figura 147 – Relações entre diferentes formatos de instrução
Fonte: Tanenbaum e Austin (2013, p. 285).
Na parte A da figura anterior, observa‑se que o tamanho da palavra possui o mesmo tamanho 
das instruções, o que facilita a interpretação realizada pela unidade de controle do computador. 
Na  parte  B, as instruções têm exatamente metade do tamanho da palavra, por exemplo, para uma 
palavra de 64 bits tem‑se uma instrução de 32 bits. Já na parte C, verifica‑se que há uma variação 
nos tamanhos das instruções, facilitando o armazenamento ao custo de uma maior dificuldade de 
padronização na decodificação de cada instrução. Dessa forma, em um projeto de uma arquitetura 
de computadores, deve‑se planejar, de forma criteriosa, qual será o tamanho das instruções, pois 
uma máquina moderna deve ser capaz de operar com diferentes tamanhos de instruções para poder 
“sobreviver”, por tempo suficiente, às mudanças de tecnologia impostas por diferentes gerações de 
processadores (TANENBAUM; AUSTIN, 2013).
O fato de se diminuir o tamanho das instruções tornará os processadores mais rápidos devido à 
menor quantidade de largura de banda (número de bits que a memória pode fornecer) de transmissão 
do processador para a memória principal. Instruções mais curtas, nesse contexto, significam que 
o processamento será mais veloz, e como os processadores atuais são capazes de executar mais 
instruções a cada ciclo de clock, quanto maior for a quantidade de busca, decodificação e execução 
de instruções, mais potente é o computador. Dessa forma, o aspecto do tamanho da instrução e da 
cache de instrução é um fator muito importante no projeto de um computador e terá influência 
direta em seu desempenho.
Outro critério em um projeto está relacionado ao espaço requerido pelo tamanho da instrução para 
que ela possa expressar todas as operações desejadas. Um computador com 2n operações que tenha 
instruções menores do que n bits será impossível, pois simplesmente não haveria espaço suficiente no 
opcode para indicar qual instrução será necessária. Um terceiro critério se refere ao número de bits 
contidos em um campo de endereço.
170
Unidade II
A eficiência de uma determinada arquitetura também está relacionada com a quantidade de 
alterações que essa tecnologia passará ao longo dos anos. Por exemplo, se os acessos à memória forem 
rápidos, o uso de acesso a registradores ou memória baseado no conceito de pilha será eficiente. 
Contudo, se os acessos forem lentos, será mais eficiente se o computador possuir um conjunto muito 
grande de registradores, como a CPU advanced risc machine (ARM).
Mais um fator importante se refere à capacidade de transmissão de dados da memória cache, que 
está situada dentro do processador. Se a largura de banda de comunicação de uma memória cache 
para instruções for t bps (bits por segundo) e o comprimento médio da instrução for r bits, a memória 
cache poderá entregar no máximo t/r instruções por segundo. Esse é o limite superior da taxa a qual o 
processador pode executar instruções, o que também é limitado pelo comprimento da instrução.
6.5.1 A expansão de opcodes
Considere uma instrução contendo (n + k) bits além de um opcode de k bits e um endereçamento 
único de n bits. Essa instrução poderá permitir que ocorram até 2k operações diferentes e utilizar 2n células 
de memória endereçáveis. Em outra possibilidade, os mesmos (n + k) bits podem ser desmembrados em 
um opcode de (k – 1) bits e um endereço de (n + 1) bits, que significa apenas a metade do número 
de instruções, mas duas vezes mais memória endereçável, e que pode ser traduzido também como 
a mesma quantidade de memória, mas possuindo o dobro da resolução. Um opcode de (k + 1) bits 
e um endereço de (n – 1) bits terá mais operações, porém à custa de um menor número de células 
endereçáveis ou uma menor resolução. Uma possibilidade para resolver esses impasses é conhecida 
como expansão de opcodes.
Esse conceito pode ser observado da seguinte forma: considere um computador em que as instruções 
possuem 16 bits de comprimento e os endereços possuem 4 bits de comprimento, como mostra a 
figura a seguir.
Opcode
15 14 13 12
Endereço 1
11 10 9 8
Endereço 2
7 6 5 4
Endereço 3
3 2 1 0
Figura 148 – Opcode de 4 bits e três campos de endereços de 4 bits
Fonte: Tanenbaum e Austin (2013, p. 287).
No exemplo da figura anterior, a máquina possui 16 registradores com endereços de 4 bits, onde 
ocorrem todas as operações aritméticas, como também é observado na figura a seguir.
171
ARQUITETURA DE COMPUTADORES MODERNOS
16 bits
Número do bit
15 12 11 8 7 4 3 0
0000 xxxx yyyy zzzz
0001 xxxx yyyy zzzz
0010 xxxx yyyy zzzz
	 ⋮
1100 xxxx yyyy zzzz
1101 xxxx yyyy zzzz
1110 xxxx yyyy zzzz
Opcode 
de 4 bits
15 instruções de 
três endereços
1111 0000 yyyy zzzz
1111 0001 yyyy zzzz
1111 0010 yyyy zzzz
	 ⋮
1111 1011 yyyy zzzz
1111 1100 yyyy zzzz
1111 1101 yyyy zzzz
Opcode 
de 8 bits
14 instruções de 
dois endereços
1111 1110 0000 zzzz
1111 1110 0001 zzzz
	 ⋮
1111 1110 1110 zzzz
1111 1110 1111 zzzz
1111 1111 0000 zzzz
1111 1111 0001 zzzz
	 ⋮
1111 1111 1101 zzzz
1111 1111 1110 zzzz
Opcode 
de 12 bits
31 instruções de 
um endereço
1111 1111 1111 0000
1111 1111 1111 0001
1111 1111 1111 0010
	 ⋮
1111 1111 1111 1101
1111 1111 1111 1110
1111 1111 1111 1111
Opcode 
de 16 bits
16 instruções 
sem endereço
Figura 149 – Expansão de opcode
Fonte: Tanenbaum e Austin (2013, p. 288).
O opcode 15 significa que esse código de operação está contido nos bits, que vão de 8 a 15, em vez 
de 12 a 15. Os bits de 0 a 3 e os bits de 4 a 7 formarão mais dois endereços. As 14 instruções de dois 
endereços possuem todas 1111 nos 4 bits da extrema esquerda e números que vão de 0000 a 1101 nos 
bits de 8 a 11. Instruções que possuem 1111 nos 4 bits da extrema esquerda e 1110 ou 1111 nos bits de 
8 a 11 possuem um tratamento especial, pois seus opcodes podem estar alocados entre os bits de 4 a 15. 
Dessa forma, o resultado será 32 novos opcodes. Todavia, como são necessários somente 31 opcodes, o 
172
Unidade II
opcode codificado como 111111111111 é interpretado como significado de que está contido nos bits de 
0 a 15, resultando em 16 instruções sem nenhum endereço.
A expansão de opcode pode demonstrar um compromisso entre o espaço para opcodes e o espaço 
para outras informações utilizadas no processo. Em termos práticos, os opcodes expandidos não são tão 
regulares como no exemplo; na verdade, há dois modos individuais para explorar a capacidade de uso dos 
diferentes tamanhos dos opcodes. Primeiro, todas as instruções precisam de mais bits para especificarem 
outras funções; segundo, o tamanho da instrução pode ser minimizado através da escolha dos opcodes 
mais curtos em instruções comuns e opcodes mais longos em instruções utilizadas raramente.
6.6 Intel Core i7 e suas instruções
As instruções no Intel Core i7 têm uma complexidade maior, além de serem mais irregulares, podendo 
ter até seis campos de comprimento variáveis, cinco dos quais são opcionais. O padrão das instruções do 
i7 é mostrado na figura a seguir.
Qual operando é fonte?
Byte/palavra
Mod Reg R/M
Bits 2 3 3
Scale Index Base
Bits 2 3 3
OpcodePrefixo Mode Sib ImediatoDeslocamento
Bytes 0‑5 1‑2 0‑1 0‑1 0‑4 0‑4
Bites 6 1 1
Instrução
Figura 150 – Formatos de instrução no Intel Core i7
Fonte: Tanenbaum e Austin (2013, p. 289).
Nesse caso, a instrução pode conter alguns campos, como o prefixo para a identificação da instrução, 
o código da operação que relaciona a instrução com os operandos de origem, o modo de endereçamento, 
além de campos associados ao deslocamento de busca dos dados na memória principal ou em outros 
registradores. Nas arquiteturas Intel mais antigas, os opcodes possuíam 1 byte de prefixo, o que também 
é interpretado como um opcode extra introduzido na frente da instrução a fim de alterar sua ação.
Os bits individuais nos opcodes do i7 não contêm muitas informações sobre a instrução referida.Uma única estrutura no campo de opcode pode ser usada para um bit de ordem baixa com algumas 
instruções indicando o byte/palavra, e a utilização de um bit adjacente é feita para indicar se o endereço 
da memória é de origem ou destino.
173
ARQUITETURA DE COMPUTADORES MODERNOS
No geral, o opcode deve ser decodificado por completo para que seja possível determinar a qual 
classe de operação esta será executada e, consequentemente, qual deverá ser o comprimento da 
instrução. Isso pode dificultar as implementações que requerem um alto desempenho, pois será preciso 
uma decodificação extensiva antes mesmo de se definir onde a próxima instrução irá começar.
Logo na sequência ao byte de opcode de referência a um operando, há um segundo byte para 
informar tudo sobre o operando, sendo separado em 8 bits, subdivididos em um campo denominado 
MOD de 2 bits e dois campos com registradores de 3 bits (REG e R/M). Geralmente, os três primeiros bits 
desse byte são utilizados como extensão para o opcode, o que resulta em um total de 11 bits. Porém, o 
campo de modo de 2 bits significa que há apenas quatro modos de endereçamento dos operandos, e um 
deles deve ser sempre um registrador.
6.7 Endereçamento de instruções
Os campos de endereços para instruções mais simples possuem um formato relativamente pequeno. 
É de interesse que haja uma grande variedade de técnicas de endereçamento envolvendo alguma troca 
de intervalos de endereços ou mesmo uma flexibilidade para a realização do endereçamento. Além 
disso, é preciso usar um grande número de referências à memória que estão contidas dentro da própria 
instrução e que devem ser atendidas, incluindo o cálculo de endereçamento. Os principais modos de 
endereçamento para memória e/ou para registradores são: imediato, direto, indireto, por registradores, 
indireto por registradores, por deslocamento e endereçamento de pilha.
6.7.1 Tipo de endereçamento imediato
O endereçamento imediato é o formato mais simplificado de endereçamento, e nele o valor do 
operando está presente na própria instrução, por exemplo:
operando=A
Esse tipo de endereçamento é aplicado para definir valores iniciais das variáveis. No geral, o número 
será armazenado em duas formas complementares com o bit à esquerda do operando para bit de sinal, 
de modo que, quando o operando é carregado em um registrador de dados, o bit de sinal será estendido 
para a esquerda até que o tamanho total da palavra de dados seja completado. Em outros casos, o valor 
em binário imediato é interpretado como um número inteiro e sem sinal (negativo ou positivo).
Uma das vantagens do endereçamento imediato é que não há necessidade de referenciar algum 
endereço da RAM, pois a instrução já está contida no próprio operando, economizando ciclos de 
memória principal ou memória cache. Todavia, a desvantagem desse tipo de endereçamento é em 
relação ao tamanho do campo de endereço, que pode ser considerado pequeno se comparado ao 
tamanho da palavra.
174
Unidade II
6.7.2 Tipo de endereçamento direto
Nesse tipo, o próprio campo de endereço contém o endereço efetivo do operando que será utilizado, 
por exemplo:
EA=A
Essa técnica era muito usada nas primeiras gerações dos computadores, mas não é aplicada nas 
arquiteturas atuais. Sua grande vantagem é requerer apenas uma referência de memória e nenhum 
cálculo de endereçamento especial. A principal desvantagem é sua limitação em relação ao espaço para 
o endereçamento dos operandos.
6.7.3 Tipo de endereçamento indireto
Possui o tamanho do campo de endereço menor do que o tamanho da palavra, limitando o intervalo 
de endereços. Uma possível solução para essa limitação é ter um campo de endereço com referência ao 
endereço de uma palavra da memória que, por sua vez, conterá o endereço completo da operação a ser 
executada. Por exemplo:
EA=(A)
Nesse exemplo, os parênteses são interpretados como o conteúdo de um operando, no caso o A. 
Uma das vantagens visíveis desse tipo de endereçamento consiste no tamanho N da palavra, pois será 
disponibilizado um endereçamento de 2N. A desvantagem é que a execução da instrução irá requerer 
duas referências da memória para que o operando seja obtido, isto é, uma para obter o endereço do 
operando e outra para obter o valor do operando. Caso o número de palavras que podem ser endereçados 
seja 2N, o número de endereços diferentes que poderão ser referenciados em qualquer momento será 
limitado a 2k, em que k será o tamanho do campo de endereço.
Em uma variação do endereçamento indireto, é possível o uso de vários níveis de endereços para 
acesso a diferentes conteúdos, como é observado no exemplo:
EA=(...(A)...)
6.7.4 Tipo de endereçamento de registradores
Esse endereçamento é semelhante ao endereçamento direto, sendo sua única diferença o campo de 
endereço se referir a um registrador em vez de um endereço na memória principal, determinado como:
EA=R
Em que R significa referência a um registrador. Por exemplo, se um campo de endereço de um 
registrador dentro de uma instrução for 3, então o registrador R3 será o endereço pretendido, e o valor 
do operando está contido em R3. Geralmente, um campo de endereço para referência de registradores 
possui de 3 a 5 bits, com um total de 8 a 32 registradores de uso geral.
175
ARQUITETURA DE COMPUTADORES MODERNOS
Uma das vantagens do endereçamento baseado em registradores consiste na utilização de apenas 
um pequeno campo de endereço contido na instrução, além de não necessitar de nenhuma referência 
à memória. Como desvantagem pode‑se citar o espaço para o endereçamento de registradores ser 
pequeno e limitado. Quando há um uso muito grande de endereçamento por registradores em um 
conjunto de instruções, por consequência haverá um uso exacerbado dos registradores contidos no 
processador. Como o processador possui um número limitado de registradores, o uso exacerbado destes 
só faz sentido de modo eficiente. Se cada operando for inserido no registrador a partir da memória 
e utilizado apenas uma vez e depois enviado à memória principal, então seu uso não será otimizado, 
sendo necessário um passo intermediário no processo, aumentando uma etapa no ciclo de instrução. 
Por outro lado, se o operando permanecer no registrador durante algumas operações, então haverá 
economia de etapas no ciclo de busca e execução dos operandos.
6.7.5 Endereçamento indireto por registradores
Assim como o endereçamento por registradores é semelhante ao direto (memória), o endereçamento 
indireto por registradores, por sua vez, é semelhante ao indireto (memória). Nos dois casos, a diferença é 
em relação ao campo de endereço, que difere ao se referenciar a um registrador ou à memória principal. 
Outra característica no indireto por registradores é quanto à menor utilização de referências à memória 
se comparada ao endereçamento indireto.
6.7.6 Endereçamento por deslocamento
Combina as capacidades de endereçamento direto e indireto por registradores e pode ser 
representado como:
EA=A+(R)
Nessa modalidade é necessário que a instrução possua dois campos de endereçamento, dos quais 
um deverá ser explícito, ou seja, o valor contido em um campo de endereço como (A) deverá ser 
utilizado diretamente. Em um outro campo de endereço, será aplicada uma referência implícita baseada 
no opcode, que por sua vez refere‑se a um registrador cujo conteúdo é adicionado em A, de modo a 
produzir um endereço efetivo.
Há três usos comuns para o endereçamento por deslocamento: endereçamento relativo, 
endereçamento por registrador base e indexação.
Endereçamento relativo
Ocorre quando o registrador program conter (PC) é referenciado, ou seja, o endereço da próxima 
instrução será adicionado ao campo de endereço da operação. Assim, o endereço efetivo é o 
deslocamento relativo para a operação em uso. O uso de endereçamentos relativos economiza bits, 
pois a maioria das referências de memória já está na próxima instrução a ser executada.
176
Unidade II
Endereçamento por registrador base
Nessavariação, o registrador base contém um endereço de memória, e o campo de endereço possui 
um deslocamento, geralmente um número inteiro sem sinal. As referências aos registradores nesse 
caso podem ser de forma explícita ou implícita, o que também é considerada uma forma eficiente 
para executar a segmentação de instruções. Em algumas implementações de endereçamento, um único 
registrador de segmento pode ser usado implicitamente. Já em outras situações, o programador de 
hardware pode escolher um registrador para guardar o endereço base de um segmento, e a instrução 
deverá referenciá‑lo explicitamente. Nesta última opção, se o tamanho do campo de endereço for k e o 
número de possíveis registradores for N, então uma instrução pode referenciar qualquer uma de N áreas 
de 2k palavras.
Indexação
Nesse caso, o campo de endereço referencia uma posição que contém um endereço na memória 
principal, e o registrador que for referenciado conterá um deslocamento positivo desse endereço. Como 
o campo de endereço é considerado um endereço de memória na indexação, geralmente ele conterá mais 
bits quando comparado a um campo de endereço de uma instrução com endereçamento por registrador 
base. Apesar disso, o método para calcular o EA será o mesmo aplicado para o endereçamento por 
registrador base e indexação, e nos dois casos a referência do registrador será algumas vezes explícita; 
em outras, implícita, em diferentes processadores.
Uma das opções na indexação é a permissão para que algum mecanismo possa efetuar operações 
iterativas. Por exemplo, suponha uma lista de números armazenados, iniciando‑se na posição A. 
Suponha também que se queira adicionar 1 a cada elemento de uma lista. Será necessário obter cada 
valor, adicionar 1 a esse número e armazená‑lo de volta. A sequência de endereçamentos efetivos 
requeridos será A, A + 1, A + 2, A + 3..., até a última posição dessa lista. Ao se utilizar o endereçamento 
por indexação, essa tarefa é realizada de modo mais fácil, pois o valor A será armazenado no campo 
de endereço da instrução, e o registrador indexador será inicializado com zero. Após cada operação, o 
registrador indexador será incrementado por 1. Os registradores indexadores são comumente usados 
em tarefas iterativas, o que torna normal a necessidade de incrementar e decrementar o registrador 
indexador após cada referência a ele. Por se tratar de uma operação muito comum, alguns sistemas 
fazem isso de forma automática no próprio ciclo de instrução, o que é conhecido como autoindexação. 
Se forem utilizados registradores de uso geral para a indexação, a operação de autoindexação pode 
exigir uma sinalização feita por 1 bit dentro da própria instrução. Pode‑se descrever como exemplo de 
autoindexação para o uso de incremento:
EA=A+(R)
(R)←(R)+1
177
ARQUITETURA DE COMPUTADORES MODERNOS
Em alguns computadores, o endereçamento indireto e a indexação fazem parte de sua estrutura, 
sendo possível usar as duas possibilidades em uma mesma instrução. A indexação é executada antes ou 
depois da indireção. Se a indexação for executada depois da indireção, ela será chamada pós‑indexação 
e pode ser representada como:
EA=(A)+(R)
O conteúdo dos campos de endereço é geralmente utilizado para acesso ao local de memória que 
contém o endereço direto. Depois, esse endereço será indexado por um valor contido no registrador. Tal 
técnica será útil para o acesso do interior de vários blocos de dados de formato fixo. Por exemplo, nos 
sistemas operacionais é necessário implementar um bloco de controle de processos (program control 
block – PCB), onde todos os dados referentes ao processo são armazenados. Assim, a operação executada 
será a mesma, independentemente de qual bloco está sendo manipulado no momento, de forma que 
os endereços nas instruções que fazem referência ao bloco podem apontar para um local (valor=A) 
contendo um ponteiro para o início do PCB. Ao utilizar a pré‑indexação antes da indireção, tem‑se:
EA=(A+(R))
O endereçamento é calculado da mesma forma que na indexação simples, pois, nesse caso, o 
endereço calculado não contém o operando, mas o endereço de onde o operando se encontra. 
Por exemplo, pode‑se citar uma tabela contendo múltiplos endereços de desvio. Em um certo ponto 
do programa, pode haver uma ramificação para uma série de posições diferentes que dependem de 
sua condição. Uma tabela de endereços poderá ser definida com início em A. Baseando‑se na indexação 
dessa tabela, a localização desejada poderá ser encontrada.
6.7.7 Endereçamento de pilha
Uma pilha pode ser definida como um vetor linear de posições e contém um conjunto de elementos 
em que somente um deles pode ser acessado de cada vez. Uma pilha tem um tamanho variável, e 
o ponto de acesso à pilha é denominado topo da pilha, assim como o último elemento da pilha é 
conhecido como base da pilha. Os itens adicionados ou removidos da pilha só podem ser acessados do 
seu topo e, por esse motivo, uma pilha também pode ser conhecida como último a entrar, primeiro a sair 
(Last In First Out – LIFO). A figura a seguir mostra algumas operações básicas de uma pilha.
178
Unidade II
SP → SP → I
J J SP → J
K K K SP → J × K
L L L L
M M M M
• • • •
• • • •
• • • •
BP → • BP → • BP → • BP → •
SP = stack pointer (ponteiro de pilha)
BP = base pointer (ponteiro de base)
Estado inicial Após PUSH Após POP Após operação 
de multiplicação
En
de
re
ço
s d
ec
re
sc
en
te
s
Figura 151 – Operações básicas de pilha
Fonte: Stallings (2010, p. 321).
No exemplo da figura anterior, nota‑se que a pilha é constituída de alguns elementos em seu estado 
inicial. O estado irá se modificar através da operação PUSH, que tem como função acrescentar um 
elemento novo ao topo da pilha. A operação POP, na sequência, irá retirar o elemento do topo da 
pilha. Nesses dois casos, o topo da pilha se modifica de acordo com a operação realizada. Operadores 
binários também podem ser usados e exigirão dois operandos (multiplicar, dividir, somar, subtrair). Nesse 
caso, ao utilizar dois itens no topo da pilha como operandos, serão removidos dois itens relacionados 
à operação e o resultado será colocado novamente no topo da pilha. Em outras operações, conhecidas 
como unárias, exige‑se apenas um operando (NOT) para modificar o topo da pilha. Algumas operações 
em pilhas podem ser observadas no quadro a seguir.
Quadro 1 – Operações orientadas à pilha
PUSH Acrescenta um novo elemento ao topo da pilha
POP Retira um elemento do topo da pilha
Operação unária Realiza operação sobre o elemento do topo da pilha. Substitui o elemento do topo pelo resultado
Operação binária
Realiza operação sobre os dois elementos do topo da pilha. 
Exclui os dois elementos da pilha. Coloca o resultado da 
operação no topo da pilha
Fonte: Stallings (2010, p. 322).
179
ARQUITETURA DE COMPUTADORES MODERNOS
A tabela a seguir mostra, de forma resumida, as possíveis operações de cálculo de endereçamento 
discutidas até o momento.
Tabela 8 – Modos básicos de endereçamento
Modo Algoritmo Principal vantagem Principal desvantagem
Imediato Operando=A Nenhuma referência de memória Magnitude de operando limitada
Direto EA=A Simples Espaço de endereçamento limitado
Indireto EA=(A) Espaço de endereçamento grande Múltiplas referências de memória
Registrador EA=R Nenhuma referência de memória Espaço de endereçamento limitado
Indireto por registrador EA=(R) Espaço de endereçamento grande Referência extra de memória
Deslocamento EA=A+(R) Flexibilidade Complexidade
Pilha EA=topo da pilha Nenhuma referência de memória Aplicabilidade limitada
Fonte: Stallings (2010, p. 331).
6.8 O computador e as interrupções
Todo computador ou sistema embarcado oferece algum mecanismo para que operações que envolvam 
alguma comunicação com a memória, o processador ou dispositivos de E/S possam ser interrompidas 
em algum momento de sua operação.
 Observação
Embora possa parecer ao usuário que uma máquina trabalhe melhor 
sem ser interrompida, as interrupções na verdadegarantem uma operação 
otimizada de um computador.
No quadro a seguir, destacam‑se os tipos mais comuns de classes de interrupções.
Quadro 2 
Programa
Gerada por alguma condição que ocorre como resultado da execução de uma 
instrução, como o overflow aritmético, divisão por zero, tentativa de executar 
uma instrução de máquina ilegal ou referência fora do espaço de memória 
permitido para o usuário
Timer Gerada por um timer dentro do processo. Isso permite que o sistema operacional realize certas funções regularmente
E/S Gerada por um controlador de E/S para sinalizar o término normal de uma operação ou para sinalizar uma série de condições de erro
Falha de hardware Gerada por uma falha como falta de energia ou erro de paridade de memória
Fonte: Stallings (2010, p. 60).
180
Unidade II
As interrupções são inseridas durante o ciclo de instruções como uma forma de otimizar a 
eficiência do processamento das instruções. Em um exemplo simulado, imagine que um processador 
esteja transferindo dados a um dispositivo (impressora) utilizando o esquema de ciclo de instrução. 
Após cada operação para realização de escrita (gravação dos dados), o processador deve permanecer 
ocioso até que o dispositivo de impressão o acesse. O tempo dessa pausa deve ser da ordem 
de centenas de ciclos de instrução que não envolverão acesso à memória, o que ocasiona uma 
ociosidade de uso do processador, que ficará aguardando instruções nesse período. A figura a 
seguir ilustra essa situação, em que o programa de usuário realiza uma série de chamadas WRITE 
intercaladas com algum processamento. É possível observar também que os segmentos de código 
1, 2 e 3 referem‑se às sequências de instruções que não envolvem alguma comunicação com 
dispositivos de E/S.
Programa 
do usuário
Write
Write
Write
Programa 
de E/S
Comando 
de E/S
End
1
2
3
5
4
Figura 152 – Fluxo de controle de programa sem interrupções
Fonte: Stallings (2010, p. 61).
181
ARQUITETURA DE COMPUTADORES MODERNOS
Geralmente, o programa de E/S consiste em três seções:
• Uma sequência de instruções (anotado como 4 na figura anterior) é utilizada a fim de preparar 
a operação de E/S, o que pode incluir a cópia dos dados para a saída alocada em um buffer 
(memória auxiliar temporária).
• O comando de E/S (sem o uso de interrupções) é emitido e o programa precisa esperar até que o 
dispositivo de E/S esteja pronto para realizar a função desejada ou sondar, de forma periódica, se 
a operação de E/S terminou.
• A instrução seguinte (anotada como 5 na figura anterior) completará a operação, o que pode 
incluir uma notificação (flag) para indicar o sucesso ou falha na operação.
 Lembrete
As operações de E/S levam um longo tempo para serem finalizadas e o 
programa de E/S geralmente fica esperando que a operação termine.
6.8.1 As interrupções e o ciclo de instrução
O uso de interrupções durante o ciclo operacional do computador pode otimizar o desempenho 
do processador. Considere, como exemplo, o fluxo de controle de um programa da próxima figura. 
Nessa operação, o programa de usuário alcança um ponto em que é realizada uma chamada sistema 
(system call) na forma de uma chamada WRITE. O programa de E/S será invocado depois que algumas 
poucas instruções tiverem sido executadas. Então, o controle retorna ao programa de usuário enquanto 
o dispositivo externo está ocupado aceitando/imprimindo dados oriundos da memória principal. 
A  operação de E/S será realizada simultaneamente com a execução de instruções no programa de 
usuário. Quando algum dispositivo de E/S estiver pronto para aceitar mais dados do processador, o 
módulo de E/S para o dispositivo externo enviará um sinal de interrupção ao processador, de modo 
que o processador responderá suspendendo a operação do programa em execução, desviando para 
um programa do sistema operacional (tratador de interrupção) atender a algum dispositivo de E/S, 
retomando a execução original depois que o dispositivo for atendido.
182
Unidade II
Programa 
do usuário
Write
Write
Write
Programa 
de E/S
Comando 
de E/S
End
Tratador de 
interrupção
1
3b
2b
3a
2a
5
4
Figura 153 – Fluxo de controle de programa com interrupções de curta espera
Fonte: Stallings (2010, p. 61).
Uma interrupção é definida, simplificadamente, também como uma quebra na sequência de 
execução normal de algum software ou hardware. Quando o tratamento da interrupção tiver finalizado, 
a execução retornará do mesmo ponto de onde foi interrompida. O processador e o sistema operacional 
são os responsáveis pela suspensão do programa de usuário para depois retorná‑lo ao mesmo ponto. 
Dessa forma, o programa de usuário não precisará conter qualquer outro código especial para acomodar 
as interrupções, como mostra o esquema da figura a seguir.
183
ARQUITETURA DE COMPUTADORES MODERNOS
Programa do usuário Tratador de interrupção
Interrupção 
ocorre aqui
1
2
i
i + 1
M
Figura 154 – Transferência de controle de tarefas via interrupções
Fonte: Stallings (2010, p. 62).
Para que as interrupções ocorram, um novo ciclo de interrupção será acrescentado ao ciclo de 
instrução simples, como pode ser observado na figura a seguir.
Ciclo de busca Ciclo de execução Ciclo de interrupção
Interrupções 
desabilitadas
Interrupções 
habilitadas
Início
Fim
Buscar próxima 
instrução
Executar 
instrução
Verificar interrupção: 
processar interrupção
Figura 155 – Ciclo de instruções com interrupções
Fonte: Stallings (2010, p. 62).
No ciclo de instrução onde ocorrerão interrupções, o processador verifica se há algum sinal de 
interrupção. Se nenhuma interrupção ocorrer ou estiver pendente em um certo período, o processador 
pode seguir para a próxima etapa do ciclo de busca, que será ler a próxima instrução do programa em 
execução. Porém, se alguma interrupção estiver pendente, o processador executará as seguintes tarefas 
(STALLINGS, 2010):
184
Unidade II
• Primeiro suspenderá o programa que está em execução e salvará o endereço da próxima instrução 
(indicada pelo program counter – PC) a ser executada ou qualquer outro dado relacionado à 
operação em atividade.
• Depois irá armazenar no program counter o endereço inicial da rotina que será tratado 
a interrupção.
Como observado na figura anterior, o ciclo de busca obtém a primeira instrução da rotina de 
tratamento de interrupção que irá atender à interrupção solicitada. Então, o tratador de interrupção 
determina qual é a finalidade da interrupção e executa as ações necessárias para sua realização. 
No exemplo da figura 153 (fluxo de interrupção de curta espera), o tratador define qual módulo de E/S 
foi o responsável pelo sinal de interrupção e desvia a solução para um programa que escreverá os dados 
no dispositivo de E/S. Quando a rotina de tratamento de interrupção terminar, o processador poderá 
retomar a execução do programa de usuário que estava em operação antes da interrupção justamente 
do ponto de parada.
Esse tipo de operação de tratamento de interrupção geralmente engloba o uso excessivo de memória, 
conhecido como overhead; apesar disso, devido à quantidade de tempo relativamente grande envolvida 
no processo, o uso indevido de tempo do processador pode ser desperdiçado simplesmente pela longa 
espera de um sinal que envolva a comunicação do processador com algum dispositivo de E/S, tornando 
muito mais eficiente o uso de interrupções durante o processo. O tempo exigido para a operação de E/S 
será relativamente mais curto (interrupção de curta espera), ou seja, menos do que o tempo total para 
completar a execução das instruções entre as operações de escrita no programa de usuário. Situações 
com respostas mais lentas, como dispositivos de impressão, resultarão em operações de E/S com muito 
mais tempo de execução para uma sequência de instruções do usuário.
A figura a seguir mostra uma situação em que o programa de usuário alcança a segunda chamada 
WRITE antes do término da primeira operação de E/S. O resultado dessa operação é que o programado 
usuário ficará travado nesse ponto, de modo que, quando a operação de E/S anterior tiver terminado, 
essa nova chamada WRITE será processada, fazendo com que uma nova operação de E/S seja iniciada.
185
ARQUITETURA DE COMPUTADORES MODERNOS
Programa 
do usuário
Write
Write
Write
Programa 
de E/S
Comando 
de E/S
End
Tratador de 
interrupção
1
2
5
4
3
Figura 156 – Fluxo de controle de programa com interrupções de longa espera
Fonte: Stallings (2010, p. 61).
Já a figura a seguir mostra o diagrama de ciclo de instruções revisado, onde é possível verificar 
a inclusão do ciclo de interrupção. Como pode ser observado, o processo se inicia geralmente com 
o cálculo do endereço da próxima instrução. Após esse primeiro estágio, são realizadas a busca da 
instrução e a decodificação dos operandos envolvidos no processo.
186
Unidade II
Armazenamento 
do operando
Busca do 
operando
Busca da 
instrução
Cálculo do 
endereço da 
instrução
Cálculo do 
endereço do 
operando
Decodificação 
da operação da 
instrução
Cálculo do 
endereço do 
operando
InterrupçãoVerificação da interrupção
Operação 
dos dados
Múltiplos 
operandos
Instrução completa, busca a 
próxima instrução
Retorna dados de string 
ou vetor
Nenhuma 
interrupção
Múltiplos 
resultados
Figura 157 – Diagrama de ciclo de instruções com interrupções
Fonte: Stallings (2010, p. 64).
Na sequência, é realizado o cálculo do endereço de onde estão esses operandos para que eles sejam 
buscados e, finalmente, a operação de dados seja executada. O processo é finalizado com um novo 
cálculo do endereço para que seja possível armazenar o resultado em um novo operando. Note que, 
na figura, durante esse ciclo inicial não houve nenhuma interrupção, o que poderia ter ocorrido em 
qualquer momento do ciclo. Se houver uma interrupção, é possível observar que ela será atendida 
prioritariamente e um novo ciclo será iniciado com a busca da instrução de interrupção requerida. Após 
o término do tratamento da interrupção, o ciclo voltará a ser executado do estágio em que havia sido 
interrompido inicialmente.
 Lembrete
As interrupções abordadas até o momento destacaram a ocorrência de 
interrupções simples, ou seja, que ocorrem uma a uma.
6.8.2 Interrupções múltiplas
Em uma nova situação, podemos incorporar um caso em que ocorram múltiplas interrupções, em 
que um programa receberá dados de um controlador de linha de comunicações e precisará imprimir 
o resultado disso, de forma que a impressora gere uma interrupção toda vez que dados unitários 
chegarem. Nessa situação, pode‑se empregar duas técnicas para tratar as múltiplas interrupções. Na 
primeira, desativam‑se as interrupções enquanto uma interrupção já estiver sendo tratada, o que 
significa que o processador poderá ignorar qualquer tipo de sinal de requisição de interrupção novo. 
Se alguma interrupção ocorrer durante esse período, ela permanecerá pendente e será averiguada 
pelo processador após ele ter habilitado novamente as operações de interrupções. Depois que a rotina 
de tratamento de interrupção tiver sido finalizada, as interrupções são novamente habilitadas antes 
187
ARQUITETURA DE COMPUTADORES MODERNOS
que o programa de usuário dê continuidade do ponto da parada inicial, de modo que o processador 
verificará se houve interrupções adicionais durante o período em que as interrupções adicionais foram 
desabilitadas. Apesar de simples, essa técnica é muito boa, pois as interrupções são tratadas de forma 
sequencial, como pode ser observado na figura a seguir. Uma desvantagem dessa técnica é que ela não 
considera a prioridade relativa ou mesmo necessidades de tempo crítico em que, por exemplo, a entrada 
chega à linha de comunicações e precisa ser absorvida rapidamente para que seja liberado mais espaço 
para outras entradas, de forma que, se o primeiro lote de entrada não for processado antes da chegada 
do segundo lote, alguns dados ou todos poderão ser perdidos.
Programa 
de usuário
____
____
____
____
____
____
____
____
____
____
Tratador de 
interrupção X
____
____
____
____
____
Tratador de 
interrupção Y
____
____
____
____
____
Figura 158 – Transferência de controle de execução de processos com interrupção sequencial
Fonte: Stallings (2010, p. 65).
Em uma outra técnica de interrupções múltiplas, definem‑se as prioridades de interrupção a fim de 
permitir que uma interrupção de maior prioridade possa ter um tratamento de interrupção distinto ao 
de menor prioridade, inclusive ocasionando a pausa deste último, como se observa na figura a seguir.
Programa 
de usuário
____
____
____
____
____
____
____
____
____
____
Tratador de 
interrupção X
____
____
____
____
____
Tratador de 
interrupção Y
____
____
____
____
____
Figura 159 – Transferência de controle de execução de processos com interrupção aninhada
Fonte: Stallings (2010, p. 65).
188
Unidade II
Por exemplo, considere um sistema formado por três dispositivos de E/S (impressora, disco rígido 
e alguma linha de comunicação com dispositivos externos) constituídos com as prioridades 2, 4 e 5, 
respectivamente. Um usuário inicia uma tarefa em t = 0, e em t = 10 ocorre uma interrupção ocasionada 
pela impressora. A informação do usuário é posta na pilha do sistema, e a execução continua na rotina 
de serviço de interrupção, como mostra a figura a seguir.
Programa 
de usuário
____ 
____
____
____
____
____
____
____
____
____
Rotina de serviço 
de interrupção 
de impressora
____
____
____
____
____
____
____
Rotina de serviço 
de interrupção 
de comunicação
____
____
____
____
____
Rotina de serviço 
de interrupção 
de disco
____
____
____
____
____
t = 0
t = 10 t =
 15
t = 40
t = 25
t = 25
t = 35
Figura 160 – Sequência de tempo para múltiplas interrupções aninhadas
Fonte: Stallings (2010, p. 66).
Durante a execução dessa rotina, temos que em t = 15 ocorre uma interrupção de comunicação, 
de forma que, como a linha de comunicação possui prioridade maior se comparada à impressora, a 
interrupção será aceita. Sendo aceita a interrupção da impressora, seu estado será colocado na pilha de 
execução contínua. Contudo, para complicar a situação, ocorre uma nova interrupção de disco em t = 20 
durante o processo em execução (serviço de comunicação). Como esse tipo de interrupção tem menor 
prioridade (disco rígido) do que o serviço de comunicação, ela será retida, e o serviço de comunicação 
será executado até o final. Quando o serviço de comunicação termina em t = 25, o estado anterior do 
processador (impressora) é restaurado. Entretanto, antes que uma instrução da rotina seja executada, 
o processador aceita a interrupção de disco rígido que estava em espera e que possuía maior prioridade 
que a impressora, transferindo o controle para a rotina de serviço de interrupção. Por fim, quando t = 40 
(última rotina), o controle retorna para o programa de usuário, aguardando novas instruções.
6.9 Pipeline de instruções
As etapas de pipeline podem ser entendidas como um processo de linha de montagem de uma 
fábrica, como na figura a seguir, onde um produto na linha de montagem passa por vários estágios que 
podem ser trabalhados de forma simultânea. Esse processo ficou conhecido como pipelining, pois, como 
em uma esteira, novas entradas serão aceitas em um lado da linha de fabricação antes que as entradas 
aceitas anteriormente apareçam finalizadas na saída do outro lado da linha de produção, ou seja, antes 
do término de todo o processo.
189
ARQUITETURA DE COMPUTADORES MODERNOS
Figura 161 – Linha de montagem de placas‑mãe
Disponível em: https://bit.ly/3DeMRwC. Acesso em: 24 jan. 2023.
Aplicando esse conceito aos computadores, sabe‑se que uma instrução também possui vários 
estágios de processamento, como observado na figura anterior onde se nota a fabricação em série 
de placas‑mãe. Utilizando instruções a serem processadas como exemplo, considere dividir todo o 
processamento das instruções em apenas dois estágios: ler instrução e executar instrução. Nessecaso, 
haverá momentos durante a execução de uma instrução em que a memória principal não será acessada, 
ou seja, ficará ociosa. Essa “fatia” do tempo poderia ser usada para obter a próxima instrução, de forma 
paralela e não interferindo na execução da instrução atual, como está exemplificado na figura a seguir.
Instrução Instrução Resultado
Leitura Execução
Figura 162 – Pipeline de instruções de dois estágios simplificados
Fonte: Stallings (2010, p. 365).
Como observado na figura anterior, o pipeline possui dois estágios independentes, e o primeiro 
deles obtém a instrução e a coloca em espera (buffer). Após o segundo estágio estar liberado, o 
primeiro estágio repassa para ele a instrução do buffer. Enquanto o segundo estágio está em execução, 
o primeiro aproveita qualquer ciclo de memória que não está sendo utilizado para obter a próxima 
instrução a ser executada e a coloca no buffer. Esse processo ficou conhecido como busca antecipada 
(prefetch) ou busca sobreposta (STALLINGS, 2010). Uma possível desvantagem nessa abordagem de 
tratamento de instruções em paralelo é a grande utilização de registradores que são aplicados para 
guardar não só instruções, mas também dados usados entre os estágios. Apesar disso, o processo de 
pipelining irá acelerar a execução das instruções, e se os estágios de leitura e execução tiverem o 
190
Unidade II
mesmo tempo de duração, o ciclo de instrução poderá ser reduzido pela metade do tempo. Porém, ao 
verificar o esquema da próxima figura, nota‑se que seria pouco provável dobrar a taxa de execução 
em razão dos seguintes aspectos:
• O tempo de execução, que é maior do que o tempo de leitura da instrução, de forma que o estágio 
de leitura poderá ter que esperar por algum tempo antes de esvaziar seu buffer.
• Uma instrução de desvio condicional pode ocorrer durante a execução da instrução, o que faz 
com que o endereço da próxima instrução, que ainda será obtida, não seja conhecido. Dessa 
forma, o estágio de leitura precisará esperar até que receba o endereço da próxima instrução 
contida no estágio de execução, daí o estágio de execução também precisará esperar até que a 
próxima instrução seja recebida.
Instrução Instrução Resultado
Leitura Execução
Descartar
Espera EsperaNovo endereço
Figura 163 – Pipeline de instruções de dois estágios expandidos
Fonte: Stallings (2010, p. 362).
Nesse exemplo com desvio incondicional, uma instrução passa do estágio de leitura para o estágio de 
execução. O estágio de leitura obtém a próxima instrução na memória principal após a instrução de desvio; 
se o desvio requerido não for atendido, nenhum tempo será perdido durante o processo. Entretanto, se 
o desvio for atendido, a instrução ativa no processo poderá ser descartada e uma nova instrução será 
lida e executada. De fato, esses fatores podem reduzir a eficiência do processo de pipeline de dois 
estágios, mas algum ganho na aceleração ainda ocorrerá, de forma que, para obter mais velocidade, o 
pipeline deverá conter mais estágios a fim de tratar possíveis atrasos em estágios de forma individual. 
Para que o  pipeline obtenha maior desempenho, mais estágios serão necessários, de forma que os 
estágios possam ser decompostos, possuindo menos operações a cada ciclo. Essa divisão de estágios 
varia em tamanho, de acordo com a capacidade do hardware de conter ou não mais registradores 
em seu processador, possibilitando maior armazenamento de instruções em um buffer. Um sistema de 
pipeline padrão é constituído por seis estágios, divididos em:
• Buscar instrução (fetch instruction – FI): tem como objetivo ler a próxima instrução esperada 
em um buffer.
• Decodificar instrução (decode instruction – DI): tem como meta determinar o código da 
operação (opcode) e a especificação dos operandos.
191
ARQUITETURA DE COMPUTADORES MODERNOS
• Calcular operandos (calculate operand – CO): tem como fito o cálculo do endereço de cada 
operando. Essa operação pode envolver o endereçamento por deslocamento, o indireto por 
registrador, o endereçamento indireto pela memória e outros tipos.
• Obter operandos (fetch operands – FO): tem como propósito obter cada operando da memória 
principal. Nesse caso, os operandos que estão nos registradores não precisarão ser lidos da memória.
• Executar instrução (instruction execution – IE): tem como intuito executar a operação indicada 
após a obtenção dos operandos e armazena o resultado em algum local específico.
• Escrever operandos (write operands – WO): tem como objetivo o armazenamento do resultado 
da operação na memória principal.
A partir dessa decomposição de uma instrução, baseada em seis estágios, é possível quantificar 
qual o tempo de duração de cada etapa. A figura a seguir destaca essa situação hipotética de 
processamento paralelo utilizando o pipeline; vê‑se que é possível reduzir o tempo de execução das 
instruções em paralelo (tempo 14) em vez de executá‑las todas em série (enfileiradas).
Tempo 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Instrução 1 FI DI CO FO EI WO
Instrução 2 FI DI CO FO EI WO
Instrução 3 FI DI CO FO EI WO
Instrução 4 FI DI CO FO EI WO
Instrução 5 FI DI CO FO EI WO
Instrução 6 FI DI CO FO EI WO
Instrução 7 FI DI CO FO EI WO
Instrução 15 FI DI CO FO EI WO
Instrução 16 FI DI CO FO EI WO
Figura 164 – Diagrama temporal para operação de instruções em paralelo
Fonte: Stallings (2010, p. 366).
O esquema apresentado na figura anterior mostra que cada instrução atravessa os seis estágios do 
pipeline e que todos os estágios podem ser executados em paralelo, supondo‑se também que não haverá 
em nenhum momento algum conflito de memória. Todavia, os estágios FI, FO e WO geralmente envolvem 
acesso à memória, o que implica que nesses casos os acessos podem ocorrer de forma simultânea, o que 
fará com que sistemas de memória não permitam tais acessos simultâneos. Porém, o valor desejado na 
operação pode estar contido na memória cache ou mesmo os estágios FO ou WO podem estar nulos, 
causando diversos conflitos, mas que, por sua vez, não irão desacelerar o processo de pipeline.
192
Unidade II
 Observação
Outros fatores poderão limitar o desempenho no pipeline. Em uma 
situação real, os seis estágios não terão a mesma duração, ocasionando 
espera em vários estágios diferentes.
Uma instrução de desvio condicional pode invalidar várias leituras de instruções, de modo semelhante 
ao mostrado no esquema da figura a seguir.
Tempo Penalidade por desvio 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Instrução 1 FI DI CO FO EI WO
Instrução 2 FI DI CO FO EI WO
Instrução 3 FI DI CO FO EI WO
Instrução 4 FI DI CO FO
Instrução 5 FI DI CO
Instrução 6 FI DI
Instrução 7 FI
Instrução 8 FI DI CO FO EI WO
Instrução 9 FI DI CO FO EI WO
Figura 165 – Diagrama temporal para operação de instruções em paralelo com desvio condicional
Fonte: Stallings (2010, p. 367).
Como ilustrado na figura anterior, o tempo 3 (eixo Y) representa um desvio condicional para a 
instrução 15 (eixo X). Antes de a instrução ser executada não há como prever qual instrução entrará 
na sequência. Dessa forma, o pipeline irá carregar a próxima instrução (instrução 4) na sequência e 
prosseguirá com o carregamento das próximas instruções. Na figura 164 não ocorre nenhum desvio; 
assim, houve um benefício total do aumento do desempenho do pipeline. Entretanto, na figura anterior 
o desvio ocorre sem ser interpretado até o fim da unidade de tempo 7 (eixo Y), sendo que nesse ponto 
será necessário que o pipeline seja limpo das instruções que não serão úteis. Assim, durante o tempo 8 
(eixo Y) a instrução 15 (eixo X) entra no pipeline, fazendo com que nenhuma instrução seja completa 
durante as unidades de tempo de 9 a 12 (eixo Y). Isso caracteriza uma penalidade de desempenho do 
pipeline, pois não foi possível, durante todo o processo, antecipar o desvio como sendo uma interrupção 
a ser tratada pelo tratador de interrupção e depois retornar ao ponto da parada do processo. Como 
observado, o fato de “limpar” as instruções do pipeline fazcom que os dados e instruções já carregados 
no processo possivelmente sejam perdidos (STALLINGS, 2010). A figura a seguir mostra, na forma de um 
fluxograma, a lógica necessária no funcionamento do pipeline para computar desvios e interrupções.
193
ARQUITETURA DE COMPUTADORES MODERNOS
Desvio ou 
interrupção?
Desvio não 
condicional?
Busca 
instrução
Decodificar 
instrução
Calcular 
operandos
Buscar 
operandos
Executar 
instrução
Escrever 
operandos
Atualizar 
PC
Esvaziar 
pipeline Sim
Sim
EO
EI
OO
CO
DI
OI
Não
Não
Figura 166 – Pipeline de seis instruções com desvio condicional
Fonte: Stallings (2010, p. 368).
Algumas situações que antes não eram vistas no pipeline com somente dois estágios surgem com o 
aumento do número de estágios. O estágio calcular operandos (CO) pode ter que depender do conteúdo 
de um registrador que é alterado por uma instrução anterior que ainda esteja contida no pipeline. Outros 
conflitos podem ocorrer com registradores e a memória principal, de modo que o sistema operacional 
que gerencia todos os dispositivos também precisa lidar com esses conflitos.
A partir dos exemplos de pipeline discutidos, é possível concluir o seguinte: quanto maior o número 
de estágios do pipeline, maior será a taxa de execução de instruções, aumentando seu desempenho de 
processamento paralelo. Além disso, outras conclusões podem ser obtidas:
194
Unidade II
• A cada estágio do pipeline existirá algum esforço extra na movimentação de dados de um 
sistema de buffer para outro para efetuar a entrega de dados. Esse esforço desacelera o tempo 
total de execução de uma única instrução, o que melhora o desempenho em situações em que 
as instruções sequenciais são dependentes umas das outras ou mesmo pelo uso demasiado de 
desvios de acesso à memória principal.
• A lógica de controle necessária para lidar com a dependência de memória e registradores, além 
de otimizar o uso do pipeline, aumentará em razão do número de estágios. Outro fator a ser 
considerado é o aumento de tempo gasto pelos buffers de pipeline, que elevarão o tempo total do 
ciclo de instruções.
Por fim, a conclusão é que o pipeline de fato é uma técnica muito poderosa para melhorar o 
desempenho de um processador; em contrapartida, o projeto requer muitos cuidados para que sejam 
alcançados bons resultados, devido à atual complexidade dos sistemas.
6.9.1 Desempenho do pipeline
Para obter o cálculo do desempenho do pipeline, inicialmente é preciso definir quais parâmetros 
estão envolvidos no processo. O tempo de ciclo (tau) de uma instrução de pipeline é definido como o 
tempo necessário para que uma instrução avance um estágio no processo, de modo que cada coluna 
(eixo Y) nas figuras 164 e 165 simbolizava um tempo de ciclo. Assim, o tempo de ciclo do pipeline pode 
ser definido como:
τm = max[τi] + d para 1 < i < k
Em que:
•	 τi é o tempo de demora de resposta do circuito no estágio i do pipeline;
•	 τmé o tempo de demora máximo de resposta do estágio;
•	 k é o número de estágios no pipeline;
•	 d é o tempo de resposta do ciclo utilizado para avançar de um estágio para outro.
Rearranjando a expressão de modo a isolar para descobrir o tempo gasto em cada ciclo de instrução 
unitário (buscar, decodificar, executar etc.), temos:
τi= τ ‑ d
195
ARQUITETURA DE COMPUTADORES MODERNOS
Exemplo de aplicação
Qual é o tempo estimado de resposta de um único ciclo, dado que o computador em operação possua 
frequência de clock τ = 20 MHz e um tempo estimado para transição entre estágios d = 33,45 ns?
Resolução
Colocando os valores em notação científica: 20 x 106 Hz e 33,45 x 10‑9 segundos, e substituindo na 
equação modificada, lembrando que:
τ = =
20 x 106
1
f
1 50 x 10‑9 segundos ou 50 ns (nanossegundos)
Tem‑se:
τi 50 x 10
‑9 – 33,45 x 10‑9 = 16,55 x 10‑9 segundos ou 16,55 ns (nanossegundos)
Suponha agora que n instruções serão processadas sem nenhum desvio. Considere Tk,n o tempo total 
necessário para que um pipeline que possua k estágios processe n instruções, como:
τkn = [k + (n ‑ 1)] τ
Um total de k ciclos é exigido para que se complete a execução da primeira instrução, de modo 
que o restante de n – 1 instruções irá requerer n – 1 ciclos? Essa equação pode ser obtida através 
do entendimento da figura 164, em que se nota que a instrução nove completará o ciclo no tempo 
quatorze, resultando em: 14 = [(6 + (9 – 1)].
Em uma nova situação, considere que um processador possua funções equivalentes ao exemplo 
anterior, entretanto sem o uso do pipeline. Suponha ainda que o tempo de ciclo da instrução seja 
kτ. Então, será necessário calcular o fator de aceleração, também conhecido como Speedup, para as 
instruções do pipeline, comparado com a execução sem pipeline, definido como:
Speedup = [k + (n‑1)] τ
nkτ
Nota‑se na equação anterior que o valor ocorre tanto no numerador quanto no denominador e 
pode ser cortado, resultando em:
Speedup = 
[k + (n‑1)]
nk
196
Unidade II
Exemplo de aplicação
Qual será o Speedup para um computador que possua um pipeline de k = 6 estágios e é solicitado 
que ele execute n = 320 instruções? Qual será o tempo total (em milissegundos) para que todas as 
instruções sejam executadas? Considere também que um outro computador execute as mesmas 
n = 320 instruções, entretanto utilizando um pipeline de k = 3 estágios. Ao final, faça um comparativo 
do desempenho dos dois computadores, levando em consideração a influência que o número de estágios 
produz no resultado.
Resolução
Para o primeiro computador, n = 320 e k = 6.
Speedup = 
[6 + (320‑1)]
320.6 = 5,90 ms
Para o segundo computador, n = 320 e k = 3.
Speedup = [3 + (320‑1)]
320.3
 = 2,98 ms
De acordo com os resultados obtidos, percebe‑se que houve um ganho de 1,98 na aceleração do 
processamento das instruções para o computador com apenas k = 3 estágios em comparação com o 
computador que possuía k = 8 estágios.
• Observação 1: o ganho foi obtido através da divisão dos resultados.
• Observação 2: o ganho é adimensional e não possui unidade de medida.
Entretanto, esse ganho pode não ser de fato o real, pois não há como garantir que o desempenho em 
cada estágio será o mesmo ou melhor do que o outro estágio unitário, podendo haver atrasos, incluindo 
perda de tempo de processamento.
Assim, um estágio que possui como objetivo buscar uma instrução não terá o mesmo tempo de 
duração que um outro estágio, por exemplo, se comparado com o estágio de execução. Além disso, 
diminuir o número de estágios implica que os estágios reduzidos terão muito mais funcionalidades, 
aumentando seu tempo operacional. Outro grau comparativo que também pode ser abordado é o uso 
da mesma quantidade de estágios em um computador, somente variando a quantidade de instruções 
envolvidas. Nessa situação, como o computador utilizaria o mesmo número de estágios, obviamente 
que operar menos instruções geraria um ganho real. Assim, em algumas situações o ganho pode até 
diminuir devido a fatores como:
• aumento de custo computacional na implementação;
• atrasos possíveis entre estágios do pipeline;
• atrasos ocorridos no processo de esvaziamento do pipeline.
197
ARQUITETURA DE COMPUTADORES MODERNOS
A figura a seguir mostra o fator de aceleração (Speedup) como uma função do número de instruções 
que são executadas sem desvio. Como observado, no limite n → ∞ (lê‑se “n tendendo ao infinito”), 
tem‑se uma aceleração pelo fator k.
Fa
to
r d
e 
ac
el
er
aç
ão
Número de instruções (Escala logarítmica)
k = 12 estágios
k = 9 estágios
k = 6 estágios
2 4 8 16 32 64 1281
12
10
8
6
4
2
0
Figura 167 – Fator de aceleração em função do número de instruções em escala logarítmica
Fonte: Stallings (2010, p. 370).
Já a figura a seguir mostra o fator de aceleração como uma função do número de estágios no 
pipeline da instrução. Nesse exemplo, o fator de aceleração se aproxima do número de instruções que 
podem ser utilizadas no pipeline sem desvios. Dessa forma, hipoteticamente, quanto maior o número de 
estágiosde pipeline, maior será a aceleração. Contudo, em termos práticos, os ganhos reais dos estágios 
adicionais do pipeline podem ser confrontados pelo aumento do custo de tempo e computacional, além 
de possíveis atrasos entre estágios, porque os desvios geralmente requerem o esvaziamento do pipeline, 
que deverá ser recarregado com novas instruções.
Fa
to
r d
e 
ac
el
er
aç
ão
Número de estágios
n = 30 instruções
5 10 15 200
14
12
10
8
6
4
2
0
n = 20 instruções
n = 10 instruções
Figura 168 – Fator de aceleração em função do número de instruções
Fonte: Stallings (2010, p. 370).
198
Unidade II
Considerando o número de ciclos necessários para executar um conjunto de instruções, a priori pode 
até parecer que o pipeline não melhora o desempenho de execução de um processador. Ao se projetar 
um pipeline, aumenta‑se o número de ciclos de clock necessários para executar um dado programa, pois 
algumas funções ficam aprisionadas no pipeline aguardando que as instruções que geram suas entradas 
sejam executadas. Assim, a duração do ciclo em um processador que utiliza o pipeline ficará dependente 
de quatro fatores:
• duração do ciclo de clock;
• número de estágios do pipeline;
• homogeneidade na divisão de tarefas entre os estágios do pipeline;
• latência dos latches (registradores encarregados de armazenar dados temporários).
Exemplo de aplicação
Considere um processador que não tenha em sua estrutura o uso do pipeline. Esse processador 
possui duração de ciclo de clock de 100 ms (milissegundos ou x 10‑6 segundos). Qual será a duração do 
ciclo de uma versão desse processador com pipeline de 6 estágios divididos homogeneamente se cada 
latch tem uma latência de 1 ms? Suponha também, em uma outra situação, um processador dividido 
em 20 estágios de pipeline com o mesmo tempo de 1 ms de latência de latch.
Resolução
Para o primeiro caso, com um sistema sem pipeline possui tempo de ciclo de 100 ms, se considerar 
os 3 estágios e a latência de 1 ms, tem‑se (CARTER, 2002):
Duração do ciclo com pipeline = 
6 estágios
100ms + 1ms
Reescrevendo em notação científica, temos: 6 estágios
100 x 10‑6
 + 1 x 10‑ 6 = 1,76 x 10‑ 5 segundos.
ou 17,66 x 10‑6 segundos, o que equivale a 17,66 ms em notação científica.
Para o segundo caso, em que a duração do ciclo sem pipeline também é 100 ms, porém aumentando‑se 
o número de estágios para 30, tem‑se:
Duração do ciclo com pipeline = 
20 estágios
100 ms +1 ms = 6 ms
Enquanto o pipeline pode reduzir a duração do ciclo de um processador, elevando a taxa de 
rendimento das instruções, ele aumenta a latência do processador em, pelo menos, a soma de todas as 
latências dos latches. A latência de um pipeline é a soma do tempo que uma única instrução demora 
para passar através do pipeline, o que é o produto do número de estágios pela duração de ciclo de clock.
199
ARQUITETURA DE COMPUTADORES MODERNOS
6.9.2 Hazards de pipeline
São definidos como eventos em que a próxima instrução de pipeline não poderá ser executada no 
ciclo de clock seguinte, o que irá causar um efeito “bolha” no pipeline. Isso ocorre devido a alguma 
parte do processo de pipeline precisar parar de executar por alguma situação que não permite sua 
execução contínua (sem interrupção), por exemplo, um desvio (interrupção de uma etapa do pipeline 
para execução de outra etapa de outra instrução em espera). Os hazards de pipeline são subdivididos em 
três categorias: de recursos, de dados e de controle (STALLINGS, 2010).
Hazard de recursos
Conhecido como hazard estrutural, esse tipo de bolhas de recursos ocorre quando duas ou mais 
instruções, que já estão no pipeline, necessitam do mesmo recurso resultando que as instruções precisarão 
ser executadas em série em vez de paralelo, o que, como já abordado, piora seu desempenho. Suponha 
um pipeline simples contendo cinco estágios, em que cada estágio ocupa um ciclo de clock, como mostra 
a figura a seguir. Em uma situação idealizada, uma nova instrução entra no pipeline a cada ciclo de clock.
Ciclo de clock
1 2 3 4 5 6 7 8 9
In
st
ru
çã
o I1 FI DI FO EI WO
I2 FI DI FO EI WO
I3 FI DI FO EI WO
I4 FI DI FO EI WO
Figura 169 – Hazard de recursos de cinco estágios
Fonte: Stallings (2010, p. 371).
Suponha em um outro caso em que a memória principal tenha uma única porta de entrada/saída, 
ou seja, responsável por realizar as leituras e escritas de instruções e que deva ser executada uma a uma. 
Nessa situação, uma leitura ou escrita do operando na memória principal não poderá ser executada em 
paralelo, como exemplificado na figura a seguir. Nessa situação, assume‑se que o operando de origem 
para a instrução I1 no eixo y da figura a seguir está na memória principal em vez de estar alocado em 
algum registrador. Assim, o estágio responsável pela busca de uma instrução deverá ficar ocioso por um 
ciclo de instrução antes de começar a busca da instrução para a instrução I3.
Ciclo de clock
1 2 3 4 5 6 7 8 9
In
st
ru
çã
o I1 FI DI FO EI WO
I2 FI DI FO EI WO
I3 Ocioso FI DI FO EI WO
I4 FI DI FO EI WO
Figura 170 – Hazard de recursos de cinco estágios com operando de origem na memória
Fonte: Stallings (2010, p. 371).
200
Unidade II
Outro conflito de recurso pode ocorrer quando várias instruções estão prontas para entrar na fase de 
execução da instrução, entretanto só há uma ULA disponível. Uma solução para essa bolha de recursos 
é aumentar os recursos disponíveis, por exemplo, ter múltiplas portas para acesso à memória principal 
ou para a ULA.
Hazard de dados
Uma bolha de dados irá ocorrer quando houver um conflito no acesso de uma posição na 
memória de algum operando. Um hazard de dados também pode ser definido da seguinte forma: 
duas instruções de um programa estão a ponto de serem executadas na sequência, de modo que 
ambas as instruções acessam um determinado operando localizado ou na memória ou em algum 
registrador ao mesmo tempo. Contudo, se as instruções são executadas em um pipeline, então 
possivelmente o valor do operando será atualizado de forma que produza um resultado diferente 
do que o esperado do obtido por uma instrução em série. Isso tudo pode ser traduzido como um 
programa que gera um resultado incorreto para o usuário devido ao uso do pipeline. Pode‑se tomar 
como exemplo uma sequência de instruções em uma máquina com arquitetura x86. A primeira 
instrução no exemplo irá somar o conteúdo dos registradores EAX e EBX e armazenar o resultado 
em EAX. A segunda instrução irá subtrair o conteúdo EAX de ECX e armazenar o resultado em ECX. 
A figura a seguir mostra como será o comportamento desse pipeline.
Ciclo de clock
1 2 3 4 5 6 7 8 9 10
ADD, EAX, EBX FI DI FO EI EO
SUB ECX, EAX FI DI Ocioso FO EI WO
I3 FI DI FO EI WO
I4 FI DI FO EI WO
Figura 171 – Hazard de dados
Fonte: Stallings (2010, p. 372).
Como mostra a figura 171, a instrução de soma ADD não atualiza EAX até o fim do estágio cinco, 
que ocorre no ciclo cinco de clock (eixo X). Todavia, a instrução de subtração (SUB) necessita desse valor 
no começo de seu estágio dois, que ocorre no ciclo quatro de clock. Assim, para manter a operação de 
forma correta, o pipeline deverá atrasar dois ciclos de clock. Então, na falta de hardware disponível e de 
algoritmos específicos que evitem esse tipo de problema, o hazard de dados poderá resultar em um uso 
ineficiente do pipeline. O hazard de dados pode ainda ser subdividido em três tipos:
• Leitura após escrita ou dependência verdadeira: quando uma instrução modificará o 
conteúdo de um registrador ou de uma posição da memória principal de modo que uma instrução 
subsequente irá ler os dados dessa posição. Nessa situação, a operação de leitura ocorre antes de 
a operação de escrita ter sido completada.
201
ARQUITETURA DE COMPUTADORES MODERNOS
• Escrita após leitura ou antidependência: caso em que uma instrução irá ler o conteúdo de um 
registrador ou posição da memória e uma instrução subsequente será escrita nessa posição. Nessa 
situação, o hazard ocorre se a operaçãode escrita for completada antes da operação de leitura.
• Escrita após escrita ou dependência de saída: caso em que duas instruções escrevem dados ou 
instruções na mesma posição (memória ou registrador). O problema nesse caso ocorre quando as 
operações de escrita são executadas na sequência inversa da qual era esperada.
Hazard de controle
Uma bolha de controle, conhecida também como hazard de desvio, ocorre quando o pipeline toma 
uma decisão equivocada ao tentar prever algum tipo de desvio e, dessa forma, trazer instruções que 
precisarão ser descartadas para dentro do pipeline.
6.9.3 Previsão de desvio em pipeline
Um dos problemas ao se implementar um projeto otimizado de pipeline é garantir um fluxo estável 
e contínuo de instruções para os estágios iniciais do pipeline, o que é geralmente afetado por desvios 
condicionais. Assim, até que a instrução seja de fato executada, é quase impossível prever se o desvio 
para uma outra instrução será tomado ou não. Essa indecisão sobre a tomada de decisão para desvios, 
que podem afetar o desempenho do pipeline, pode ser implementada através de soluções com as 
seguintes abordagens: múltiplos fluxos, busca antecipada do alvo de desvio, buffer de laço de repetição, 
previsão de desvio e desvio atrasado.
Os múltiplos fluxos
Mesmo um pipeline simplificado possuirá atrasos (penalidades) na execução de uma instrução, pois 
durante a busca por duas ou mais instruções algumas delas podem estar incorretas. Nessa situação, uma 
possível abordagem envolve um esforço do tipo força bruta, que replica as partes iniciais do pipeline 
e permite que as instruções corretas sejam obtidas, mantendo assim o uso de dois fluxos. No entanto, 
ainda existem dois problemas com essa abordagem:
• Devido aos múltiplos pipelines, ainda existirão atrasos no acesso à memória principal ou aos 
registradores.
• Algumas instruções de desvio adicionais também podem entrar no pipeline antes mesmo da 
solução da tomada de decisão referente ao desvio original, o que ocasionaria fluxos adicionais e 
desnecessários para tomadas de decisão.
Apesar das desvantagens apresentadas, a estratégia de múltiplos fluxos ainda pode melhorar o 
desempenho do pipeline, como os obtidos nas máquinas IBM 370/168 e IBM 3033.
202
Unidade II
Busca antecipada do alvo de desvio
Após um desvio condicional ser reconhecido durante o processo, o alvo do desvio condicional é lido 
antecipadamente. Assim, o alvo é salvo até que a instrução de desvio seja executada completamente, de 
maneira que, se o desvio for tomado, o alvo já terá sido obtido.
Buffer de laço de repetição
É um pequeno e rápido espaço de memória (buffer) mantido no estágio de busca de instrução e que 
contém n instruções recentemente lidas na sequência. Dessa forma, se um desvio está a ponto de ser 
tomado, o hardware verifica se o alvo do desvio está no buffer. Assim, se estiver, a próxima instrução será 
obtida do buffer. Nessa abordagem, o buffer de laço de repetição traz alguns benefícios:
• Por meio da busca antecipada, o buffer de laço irá conter algumas instruções na sequência, 
antes do endereço da instrução atual. Dessa forma, as instruções obtidas na sequência ficarão 
disponíveis, sem a necessidade do uso do tempo para acesso à memória principal.
• Se, porventura, o desvio para o alvo estiver contido em apenas algumas posições na frente do 
endereço da instrução de desvio, então o alvo já estará no buffer, o que é muito útil em ocorrências 
de tomadas de decisão IF‑THEN‑ELSE.
• Se, porventura, o buffer de laço de repetição for muito grande para conter todas as instruções 
do laço, então essas instruções precisarão estar disponíveis na memória apenas uma vez, logo na 
primeira iteração. Nas demais iterações, todas as instruções necessárias já estarão no buffer.
O buffer de laço de repetição pode ser compreendido como uma memória cache dedicada somente 
para instruções. A única diferença é que o buffer de laço pode guardar apenas instruções na sequência; 
além disso, ele possui um tamanho e custo menor se comparado com uma memória propriamente cache.
Previsão de desvio
As abordagens baseadas em previsão de desvio podem se valer do uso de várias técnicas, como: 
previsão nunca tomada, previsão sempre tomada, previsão por código de operação (opcode), chave 
tomada/não tomada e tabela de histórico de desvio. As três primeiras abordagens são estáticas e não 
dependem do histórico de execução até ocorrer a instrução de desvio condicional. Já as duas últimas 
abordagens (chave tomada/não tomada e tabela de histórico de desvio) são dinâmicas, o que significa 
que dependerão do histórico da execução. Nas situações mais simples como a previsão nunca tomada 
e previsão sempre tomada, assume‑se que o desvio nunca será tomado e continuarão se valendo 
da obtenção das instruções sequencialmente, ou também se pode assumir que o desvio será tomado, 
obtendo‑se o alvo do desvio para ser tratado.
203
ARQUITETURA DE COMPUTADORES MODERNOS
 Observação
Alguns estudos que lidam com o tratamento de desvio e seu 
comportamento indicam que os desvios condicionais nos programas são 
tomados em cerca 50% das ocasiões, de maneira que, se o custo de uma 
busca antecipada dos dois caminhos for o mesmo, a realização da busca 
antecipada no mesmo endereço do alvo do desvio pode, de fato, oferecer 
um ganho no desempenho.
Ao realizar‑se uma busca, utilizando por exemplo uma memória virtual como a paginação, 
poderá ocorrer uma falha na página de busca, o que trará como consequência alguma penalidade 
no desempenho (STALLINGS, 2010). A abordagem estática toma uma decisão baseada no código 
de operação da instrução de desvio, de modo que o processador assumirá que o desvio realizado 
será executado somente para alguns códigos de operações, e não para outros, reportando uma taxa 
de sucesso superior a 75%. Já as abordagens dinâmicas tentam melhorar não só o desempenho 
como a precisão da previsão, principalmente armazenando um histórico de instruções de desvios 
condicionais contidas em um programa. Por exemplo, alguns bits podem ser associados com cada 
instrução de desvio condicional referente ao histórico recente da instrução. Esses bits, conhecidos 
como uma chave tomada/não tomada, direcionam o processador a tomar uma decisão na próxima 
vez que a instrução desejada for encontrada. Geralmente, esses bits contidos no histórico não são 
associados com a instrução na memória principal, mas sim guardados em um armazenamento 
temporário. Outra possibilidade seria associar esses bits com qualquer instrução de desvio condicional 
que esteja associada em uma memória cache. Assim, quando a instrução for substituída na cache, o 
seu histórico será perdido. Entre outras possibilidades, é possível manter uma tabela com instruções 
de desvio recentemente executadas. Assim, o processador pode acessar a tabela usando os bits de 
ordem mais baixa do endereço da instrução de desvio condicional. Com apenas um bit, o que pode ser 
guardado se refere à última execução dessa instrução, que resultou em um desvio condicional ou não. 
Logicamente que há desvantagens nessa abordagem, uma delas é que usar um bit único pode levar a 
instrução de desvio a sempre tomar como uma instrução um loop repetitivo. Além disso, com apenas 
um bit no histórico, um erro de previsão de desvio ocorrerá duas vezes para cada uso do loop: uma 
vez ao entrar no loop e outra vez ao sair do loop. Se dois bits forem utilizados, então sua função será 
guardar o resultado das duas últimas instâncias da execução da instrução associada ao processo no 
momento. A figura a seguir mostra um fluxograma representando o comportamento de uma previsão 
de desvio. Iniciando o fluxograma a partir da leitura da próxima instrução do desvio condicional, à 
medida que cada instrução de desvio condicional na sequência for tomada, o processo de decisão 
poderá prever se o próximo desvio será tomado.
204
Unidade II
Desvio tomado?
Sim
Desvio tomado?
Ler próxima 
instrução de 
desvio condicional
Preverque não 
será tomado
Prever que não 
será tomado
Sim
Não
Ler próxima 
instrução de 
desvio condicional
Desvio tomado?
Ler próxima 
instrução de 
desvio condicional
Prever que 
será tomado
Prever que 
será tomado
Não
Sim
Não
Desvio tomado?
NãoSim
Ler próxima 
instrução de desvio 
condicional
Figura 172 – Fluxograma contendo tomadas de decisão para previsões de desvio
Fonte: Stallings (2010, p. 375).
Se durante o processo uma única previsão estiver errada, então o algoritmo continuará prevendo 
que o próximo desvio também será tomado. Logo, apenas se dois ou mais desvios seguidos não forem 
atendidos, isso fará com que o algoritmo seja direcionado para o lado direito do fluxograma. Somente 
nos casos em que o algoritmo contiver duas previsões erradas é que ele irá de fato mudar sua decisão 
de previsão. A figura a seguir ilustra uma forma mais compacta para a previsão de desvios que pode ser 
obtida através da representação de máquina de estados finitos.
205
ARQUITETURA DE COMPUTADORES MODERNOS
Prever que será 
tomado
Prever que não 
será tomado
Prever que não 
será tomado
Prever que não 
será tomado
To
m
ad
o
Nã
o 
to
m
ad
o
Tomado
Não tomado
Não tomado
Tomado
Não tomado
Tomado
Figura 173 – Previsão de desvio baseado em máquinas de estados finitos
Fonte: Stallings (2010, p. 375).
Ao utilizar o histórico de desvios, algumas desvantagens podem ocorrer: se houver uma decisão de 
aceitar e tomar o desvio, a instrução alvo não poderá ser obtida até que o endereço do alvo seja 
decodificado. Obtém‑se uma eficiência maior no processo se a leitura da instrução for iniciada assim 
que a decisão de desvio tomada for realizada. Para isso, mais informações do processo precisam ser 
salvas no buffer de alvo do desvio ou em uma tabela de histórico de desvio.
 Saiba mais
Conheça um pouco mais sobre processamento paralelo em:
PROCESSAMENTO paralelo chega aos computadores de mesa. Inovação 
Tecnológica, 2007. Disponível em: https://bit.ly/3GJqtfu. Acesso em: 18 jan. 2023.
6.10 Princípios da linguagem de montagem
Uma linguagem de montagem é definida como uma codificação de baixo nível e nela cada declaração 
(instrução) produzirá exatamente uma operação, ou seja, existe uma correspondência um‑para‑um 
entre as instruções de máquina e as declarações obtidas no programa de montagem. Dessa forma, se 
para cada linha no código em linguagem de montagem houver uma declaração e para cada palavra de 
máquina houver uma instrução, então um código em linguagem de montagem terá n linhas e produzirá 
um código em linguagem de máquina de n instruções (TANENBAUM; AUSTIN, 2013).
As linguagens de montagem fazem parte da estrutura de todos os computadores modernos. Esse 
tipo de linguagem possui características diferentes quando comparado aos demais níveis da arquitetura 
de um computador, por exemplo, nível Instruction Set Architecture (ISA – arquitetura do conjunto de 
instrução) ou nível de sistema operacional, pois se implementa através da tradução em vez de uma 
206
Unidade II
interpretação. Os tradutores são programas que convertem um código em nível de usuário em um outro 
programa. A linguagem na qual o código original é escrito denomina‑se linguagem‑fonte e, por sua vez, 
a linguagem na qual esse código é convertido denomina‑se linguagem‑alvo. Outra diferença entre as 
linguagens é que, na tradução, o código original na linguagem‑fonte não é executado diretamente, pois 
primeiro ele é convertido para um programa equivalente, denominado programa‑objeto ou programa 
binário executável. Essa tarefa de conversão é realizada somente após a conclusão da tradução, gerando, 
nesses casos, duas etapas distintas:
• geração de um programa equivalente na linguagem‑alvo;
• execução do programa recém‑gerado na linguagem‑alvo.
Essas etapas não ocorrerão simultaneamente, pois a segunda etapa só pode iniciar após a conclusão 
da primeira. Já no processo de interpretação, só há uma etapa, que é a execução do programa‑fonte 
original. Assim, não é preciso gerar, com alguma antecedência, qualquer código equivalente, mesmo 
que em algumas situações exista a necessidade de o programa‑fonte ser convertido para alguma forma 
intermediária de codificação, como ocorre na linguagem de programação de alto‑nível como o Java e 
seus bytecodes.
Os tradutores são geralmente divididos em dois grupos:
• Assembler (montador): nessa situação, a linguagem‑fonte se baseia em uma representação 
simbólica para uma linguagem de máquina numérica.
• Assembly: expressa a linguagem de montagem legível para o ser humano e é utilizada para 
programar códigos específicos identificados pelas máquinas.
 Observação
O uso da linguagem de montagem é justificado pela dificuldade em 
se programar diretamente em código binário (0’s e 1’s) ou mesmo 
em  codificação hexadecimal (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F), 
dificultando seu manuseio pelo usuário final.
É muito mais simples para um usuário final trabalhar com nomes ou abreviaturas simbólicas 
(mnemônicos) como ADD, SUB, MUL e DIV para operações de soma, subtração, multiplicação e divisão 
do que utilizar valores numéricos em binários como os usados pela máquina. Os tipos mais comuns 
de operações em linguagem de máquina são: transferência de dados, aritmética, lógica, conversão, 
E/S, controle do sistema e transferência de controle. O quadro seguir mostra os tipos mais comuns de 
operações aplicadas em linguagens de máquina.
207
ARQUITETURA DE COMPUTADORES MODERNOS
Quadro 3 – Operações lógicas e aritméticas do conjunto de instruções
Tipo Nome da operação Descrição
Transferência de dados
Move (transferência) Transfere palavra ou bloco da origem ao destino
Store (armazenamento) Transfere palavra do processador para a memória
Load (busca) Transfere palavra da memória para o processador
Exchange (troca) Troca o conteúdo da origem e do destino
Clear (reset) Transfere palavra de 0s para o destino
Set Transfere palavra de 1s para o destino
Push Transfere palavra da origem para o topo da pilha
Pop Transfere palavra do topo da pilha para o destino
Aritmética
Soma Calcula a soma de dois operandos
Subtração Calcula a diferença de dois operandos
Multiplicação Calcula o produto de dois operandos
Divisão Calcula o quociente de dois operandos
Absoluto Substitui o operando pelo seu valor absoluto
Negativo Troca o sinal do operando
Incremento Soma 1 ao operando
Decremento Subtrai 1 do operando
Lógica
AND Realiza o AND lógico
OR Realiza o OR lógico
NOT (complemento) Realiza o NOT lógico
Exclusive‑OR Realiza o XOR lógico
Test Testa condição especificada; define flag(s) com base no resultado
Compare Comparação lógica/aritmética de dois ou mais operandos; define flag(s) com base no resultado
Definir variáveis de controle Classe de instruções para definir controles para fins de proteção, controle etc.
Shift Desloca o operando para a esquerda (direita), introduzindo constantes na extremidade
Rotate Desloca ciclicamente o operando para a esquerda (direita), de uma à direita
Fonte: Stallings (2010, p. 18).
208
Unidade II
Quadro 4 – Principais operações de controle e 
transferência de dados do conjunto de instruções
Tipo Nome da operação Descrição
Transferência 
de controle
Jump (desvio) Transferência incondicional; carrega PC com endereço especificado
Jump condicional Testa condição especificada ou carrega PC com endereço especificado 
Jump para sub‑rotina Coloca informação do controle do programa atual em local conhecido
Return Substitui conteúdo do PC por outro registrador de local conhecido
Execute Busca operando do local especificado e executa como instrução
Skip Incrementa o PC para saltar para a próxima instrução
Skip condicional Testa condição especificada; ou salta ou não faz nada, com base na condição
Halt Termina a execução do programa
Wait (hold) Termina a execução do programa; testa condição especificada repetidamente
No operation Nenhuma operação é realizada, mas a execução do programa continua
Entrada/SaídaInput (leitura) Transfere dados da porta de E/S ou dispositivo especificado para o destino
Output (escrita) Transfere dados da origem especificada para porta de E/S ou dispositivo
Start I/O Transfere instruções para o processador de E/S para iniciar operação de E/S
Test I/O Transfere informações de estado do sistema de E/S para o destino especificado
Conversão
Translate Traduz valores em uma seção da memória com base em uma tabela de correspondências
Convert Converte o conteúdo de uma palavra de uma forma para outra
Fonte: Stallings (2010, p. 18).
 Lembrete
Um desenvolvedor que utiliza linguagem de montagem pode 
atribuir nomes simbólicos a endereços da memória RAM e deixar que 
o assembler (emulador para assembly) se ocupe em fornecer os valores 
numéricos corretos.
As linguagens de montagem possuem outras propriedades além do mapeamento de declarações 
um‑para‑um. Diferentemente de quem desenvolve em linguagens de alto nível, o desenvolvedor em 
linguagem de montagem possuirá acesso a todos os recursos e instruções disponíveis na máquina‑alvo. 
As linguagens de montagem possuem acesso completo ao hardware, além de facilitar a configuração 
de várias aplicações de hardware embarcado (embedded systems). Assim, tudo o que pode ser realizado 
em linguagem de máquina também pode ser feito em linguagem de montagem; entretanto, muitas 
instruções, registradores ou outros recursos não estarão disponíveis para uso por um programador de 
linguagem de alto nível.
Nem tudo é vantagem nas linguagens de montagem. Linguagens de alto nível podem, a princípio, 
ser executadas em todos os computadores atuais, porém linguagens de montagem só podem ser 
executadas em uma família específica de máquinas, como a família Intel x86 ou a família Advanced 
209
ARQUITETURA DE COMPUTADORES MODERNOS
Risc Machine (ARM). Já em se tratando de codificação, a estrutura de uma declaração em linguagem de 
montagem é parecida com a estrutura de linguagem de máquina, de forma que praticamente todas as 
operações aritméticas e lógicas podem ser representadas em linguagem de montagem sem problemas 
de identificação. A tabela a seguir mostra alguns fragmentos de programas de linguagem de montagem 
em uma arquitetura do tipo x86 com o objetivo de efetuar o cálculo N = I + J.
Tabela 9 – Cálculo de N = I + J na arquitetura Intel x86
Etiqueta Opcodes Operandos Comentários
Fórmula: MOV EAX,I ;registrador EAX=I
ADD EAX,J ;registrador EAX=I+J
MOV N,EAX ;N=I+J
I DD 3 ;reserve 4 bytes com valor inicial 3
J DD 4 ;reserve 4 bytes com valor inicial 4
N DD 0 ;reserve 4 bytes com valor inicial 0
Fonte: Tanenbaum e Austin (2013, p. 416).
Nesse exemplo, as declarações são comandos requeridos para o assembler reservar memória para as 
variáveis I, J e N. Nesse caso, são necessários no máximo dois endereços de memória para referenciar 
os operandos de origem. Os resultados dessas operações precisam ser armazenados, o que sugere a 
exigência de um terceiro endereço a ser definido para abrigar o operando de destino. Após o término de 
uma instrução, a próxima instrução precisará ser buscada e seu endereço também será necessário para 
realizar a operação.
Através dessa linha de raciocínio, observa‑se que uma instrução pode conter quatro referências 
de endereços, sendo dois operandos de origem, um operando de destino e o endereço da próxima 
instrução. Na figura a seguir, é possível observar uma comparação entre instruções típicas de um, dois e 
três endereços de operandos, os quais são usados para realizar o cálculo: Y = (A‑b) 
 C+(D . E)
.
Instrução Comentário
SUB Y, A, B Y ← A ‑ B
MPY T, D, E T ←	D × E
ADD T, T, C T ← T + C
DIV Y, Y, T Y ← Y ÷ T
Figura 174 – Programa para executar a operação aritmética 
utilizando três operandos de endereçamento
Fonte: Stallings (2010, p. 290).
Nesse exemplo, observa‑se o início do programa realizando uma operação aritmética de subtração 
SUB Y, A, B, em que os conteúdos de A e B são subtraídos e armazenados temporariamente no 
operando Y. Na linha seguinte, é feita a operação de multiplicação de MPY D, E, armazenando 
o resultado da operação em T. A penúltima operação envolve a adição do resultado contido na 
210
Unidade II
multiplicação e armazenada em T, somado ao operando C e armazenando o resultado da operação 
também em T. Para finalizar a operação, o resultado da subtração (A – B) armazenado em Y é dividido 
pelo resultado da operação (C + (D . E)) armazenado em T, colocando‑se tudo como resposta em Y. 
A mesma equação pode ser resolvida utilizando somente dois endereços de operandos, como mostra 
a figura a seguir.
Instrução Comentário
MOVE Y, A Y ← A
SUB Y, B Y ←	Y - B
MOVE T, D T ← D
MPY T, E T ← T × E
ADD T, C T ← T + C
DIV Y, T Y ← Y ÷ T
Figura 175 – Programa para executar a operação aritmética 
utilizando dois operandos de endereçamento
Fonte: Stallings (2010, p. 290).
O programa inicia fazendo uma cópia do conteúdo do operando A, movendo‑o para o endereço do 
operando Y. Depois, realiza‑se a subtração de Y, B, que nada mais é do que a subtração de (A – B). Na 
terceira linha, move‑se o conteúdo do operando D para o endereço T. Em seguida, multiplica‑se T, E. 
Na penúltima linha, aciona‑se o resultado obtido na multiplicação anterior armazenado em T por C, 
como na equação original. Por fim, dividem‑se os valores armazenados em Y, resultantes de (A – B) pelos 
valores contidos em T (C + (D . E)). Para operações que envolvem apenas um endereço de operando, as 
instruções são mais simples. Para que esse tipo de instruções funcione, um segundo endereço precisa ser 
implícito, como ocorria em computadores mais antigos. Um endereço implícito geralmente corresponde 
a um registrador acumulador (AC). O acumulador irá conter um dos operandos que será usado para 
armazenar o resultado, como mostra o exemplo da figura a seguir.
Instrução Comentário
LOAD D AC ← D
MPY E AC ←	AC × E
ADD C AC ←	AC + C
STOR Y Y ← AC
LOAD A AC ← A
SUB B AC ←	AC - B
DIV Y AC ←	AC ÷ Y
STOR Y Y ← AC
Figura 176 – Programa para executar a operação aritmética 
utilizando um operando de endereçamento
Fonte: Stallings (2010, p. 290).
211
ARQUITETURA DE COMPUTADORES MODERNOS
Nesse último exemplo, inicialmente o operando D é carregado para o acumulador através da 
operação LOAD. Após ter carregado D, a operação seguinte é a multiplicação do operando E pelo 
conteúdo do acumulador (D). A operação prossegue com a soma do conteúdo do acumulador 
pelo operando C. Com a parte do denominador da equação já resolvida (C + (D . E)), o resultado é 
transferido para o operando Y através da operação LOAD, pois o acumulador terá seus valores alterados 
com as próximas operações. A operação do numerador se inicia com o carregamento do operando A 
para o acumulador, pela operação LOAD A. Depois, o conteúdo do acumulador (A) é subtraído de B, 
terminando as operações no numerador. Por fim, necessita‑se dividir o numerador pelo denominador 
através da operação DIV Y, que representa a divisão do conteúdo armazenado em Y pelo conteúdo 
armazenado no acumulador, tudo isso sendo armazenado novamente em Y (STOR Y).
Exemplo de aplicação
Considere um processador do tipo RISC que utiliza apenas dois operandos em cada linha de operação 
(relação um‑pra‑um) da ULA. Esse mesmo processador precisa resolver a seguinte equação matemática:
X = 12 ‑ B
Y ‑ W * A
Resolução
Como não há nenhuma incógnita entre parênteses, podemos então iniciar a resolução a partir 
do denominador obedecendo à regra de precedência para valores expoentes e depois resolvemos a 
expressão do numerador; por fim, dividimos o resultado no numerador pelo denominador:
MOVE X, J
MPY X, X
SUB X, B
MPY W, A
SUB Y, W
DIV Y, X
MOVE X, Y
 Saiba mais
Para conhecer um pouco mais sobre linguagens de baixo nível, leia o 
capítulo 3 da obra indicada a seguir:
ANIDO, R. Linguagens de montagem. 9. ed. Rio deJaneiro: Elsevier, 2016.
212
Unidade II
7 FUNDAMENTOS DAS ARQUITETURAS RISC X CISC, PROCESSAMENTO 
PARALELO, PROCESSADORES SUPERESCALARES, MULTITHREADING E MULTICORE
7.1 Arquitetura RISC
Atualmente muito utilizadas em sistemas embarcados, as arquiteturas de computadores RISC 
(Reduced Instruction Set Computer – computador contendo um conjunto reduzido de instruções) foram 
um grande avanço nas arquiteturas dos processadores modernos. Esse tipo possui grande quantidade de 
vantagens em sua operação, como será abordado a seguir (MONTEIRO, 2019).
7.1.1 Menor quantidade de instruções e todas com largura fixa
Entre as principais características do sistema RISC está a sua tendência natural de possuir um 
conjunto de instruções menor se comparado com o das máquinas CISC (Complex Instrucion Set 
Computer – computador com conjunto complexo de instruções) com a mesma configuração de hardware. 
Essa arquitetura teve seu início com a família Spark, da SUN Microsystems, por volta da década de 1980, 
e possuía cerca de 50 instruções. Como comparativo, os computadores VAX‑11/780 eram totalmente 
CISC e possuíam até 300 instruções; já o Intel 80486 foi lançado com a capacidade de 147 instruções. 
Vale ressaltar que uma menor quantidade de instruções, e cada uma delas possuindo uma execução 
otimizada, resultará em um sistema com melhor desempenho no geral. Dessa forma, menos instruções 
logicamente também irão ocasionar programas um pouco mais longos se comparados a sistemas com 
um maior número de instruções, pois muitas vezes é necessário repetir instruções para se obter o mesmo 
resultado. Outras vantagens podem ser observadas ao se utilizar um conjunto reduzido de instruções:
• Uma menor quantidade de transistores no chip do processador, obtendo‑se assim um menor 
espaço físico para a implementação do VLSI (Very Large Scale Integration – integração em escala 
muito grande) e, consequentemente, reduzindo‑se o custo.
• Redução na complexidade do compilador ou decodificador de instruções, baseado em uma menor 
largura de entrada e saída, diminuindo‑se o tempo total para a decodificação das instruções.
Como as instruções seriam menores nessa situação, também haveria uma menor quantidade de bits 
no campo do código da operação ou opcode da instrução, o que reduziria o tamanho dos programas.
7.1.2 Execução otimizada de chamada: funções
Outra característica importante nas arquiteturas do tipo RISC, e que também se difere das arquiteturas 
CISC, refere‑se ao modo de realizar chamadas para as rotinas de parâmetros. No geral, os programas 
usam muito as chamadas funções, consumindo um tempo razoável do processador, mas aplicando 
usualmente poucos dados no processo, resultando em um consumo grande de processamento na 
transferência de dados/instruções.
213
ARQUITETURA DE COMPUTADORES MODERNOS
Nas máquinas CISC, a chamada rotina de funções conduz a operações que envolvam escrita/leitura 
constantes na memória principal (RAM), a fim de passar os parâmetros que serão lidos ou gravados. Já 
para máquinas com arquitetura do tipo RISC, essa transferência ocorre basicamente no processador; 
assim, para não perder o desempenho, utiliza‑se uma quantidade maior de registradores do que os 
usualmente encontrados nas arquiteturas CISC.
7.1.3 Menor quantidade de modos de endereçamento
Outra característica na arquitetura RISC está relacionada aos diferentes modos de endereçamento 
de memória pelo conjunto de instruções. Máquinas CISC tendem a possuir uma quantidade maior de 
endereçamentos, de maneira que uma operação simples para soma de dois valores armazenados em 
registradores possa ocorrer de forma mais rápida, a menos que um dos operandos usados na soma 
esteja na memória e o outro operando no registrador, ou pior, com os dois operandos contidos na 
memória, o que tornará o processo mais demorado, devido ao processo de busca na memória.
As arquiteturas RISC buscam por soluções mais simples, e uma delas ficou conhecida como Load/Store 
(Load – transfere o dado oriundo da memória para o registrador específico do processador, Store – operação 
contrária ao Load, que irá transferir um dado do registrador específico para algum endereço de memória). 
Embora pareça simples, essa técnica de implementação de execução de instruções diminui drasticamente 
os ciclos de clock necessários para o processamento da operação.
7.1.4 Modos de execução baseados no uso de pipeline
Como estudado anteriormente, as técnicas de pipeline tendem a ter um desempenho elevado na 
execução de instruções em paralelo (se comparados aos processos executados em série). Todavia, para 
que se extraia o seu melhor desempenho, é preciso que as instruções possuam formato e complexidade 
similares, ocasionando um tempo redundante em todas as etapas, equilibrando o tempo de execução 
em cada uma delas.
7.1.5 Execução de cada instrução em um ciclo de clock
Computadores do tipo CISC levam um tempo maior para executar instruções devido, entre outros 
fatores, ao uso de um microcódigo ou micro‑operações (microops), o que implicará a interpretação 
de cada uma das micro‑operações envolvidas no processo, causando um atraso total na execução das 
instruções. Em arquiteturas RISC, por outro lado, como utilizam poucas instruções e por elas serem mais 
simples, não haverá a necessidade do uso de microcódigos.
7.2 Arquitetura RISC da IBM
Especificamente, o computador com arquitetura RISC foi desenvolvido na década de 1980 pela IBM 
no laboratório de pesquisas Thomas J. Watson, em Nova Iorque (TANEMBAUM; AUSTIN, 2013). Esse 
projeto tinha o nome de IBM 801, não por causa de um termo técnico, mas sim em razão do nome do 
edifício onde a pesquisa estava ocorrendo. A IBM tinha como objetivo desenvolver um processador para 
o gerenciamento de uma central telefônica de grande porte, capaz de manipular, simultaneamente, 
214
Unidade II
300 chamadas por segundo. Como requisito inicial, o 801 da IBM deveria completar a execução de uma 
instrução a cada ciclo de clock, além de possuir um desempenho de 12 MIPS, de modo que seria capaz 
de executar até 20 mil instruções por chamada. Embora seu projeto inicial fosse o emprego do 801 na 
central telefônica, ele se mostrou muito popular no emprego do processamento de grandes mainframes. 
Depois, o processador do 801 passou a ser chamado ROMP (Research/OPD – microprocessor ou 
microprocessador do departamento da IBM), em Austin, Texas (Office Products Division). Uma evolução 
do IBM 801 foi o mainframe RS/6000 (figura a seguir), que se tornou um sucesso de vendas devido ao 
seu alto desempenho.
Figura 177 – Mainframe IBM RS/6000
Disponível em: https://bit.ly/3HbWtuc. Acesso em: 18 jan. 2023.
O RS/6000 tinha como principais características:
• Desenvolvido para ser utilizado também como estação de trabalho ou minicomputador.
• Tamanho fixo de instruções com 4 bytes.
• Acesso à memória principal usando o esquema load/store.
• 32 registradores de 32 bits para realizar o endereçamento de memória.
• 32 registradores de 64 bits para executar operações em ponto flutuante.
• Utilizava somente a ULA e sem acesso à memória para operações de lógica e aritmética.
• Uso de pipeline em unidades independentes de execução, além de quatro modos de endereçamento.
• Conjunto de 183 instruções, com nove formatos diferentes, além de quatro modos para 
o endereçamento.
• Endereços de 32 bits, permitindo um endereçamento de memória de até 4 GB.
• Caches L1, uma para dados e outra para instruções.
215
ARQUITETURA DE COMPUTADORES MODERNOS
 Lembrete
O pipeline serve para executar instruções em paralelo e geralmente é 
utilizado quando se quer melhorar o desempenho de processamento.
7.3 Pipeline na arquitetura RISC
Em máquinas RISC, a maioria das instruções é realizada com operações registrador‑para‑registrador, 
envolvendo apenas dois estágios de pipeline, havendo as seguintes instruções:
• I: busca a instrução.
• E: executa a instrução (efetua uma operação entre a ULA e os registradores).
Em operações de carregamentoe armazenamento em memória principal, serão necessários três 
estágios de pipeline:
• I: busca a instrução.
• E: executa a instrução (calcula um endereço da memória principal).
• D: operação de armazenamento entre o registrador e a memória ou vice‑versa.
A figura a seguir mostra um exemplo para o tempo decorrido de uma sequência de instruções 
sem pipeline executada sequencialmente. Nele, observa‑se um desperdício de tempo de execução de 
instruções, visto que elas são executadas em série, somente paralelizando as instruções ao término 
das instruções anteriores.
I E D
I E D
I E
I E D
I E
Figura 178 – Execução de instruções sequencialmente
Fonte: Stallings (2017, p. 474).
216
Unidade II
Na figura a seguir, observa‑se uma pequena melhoria no processamento paralelo, pois foi usado um 
pipeline de dois estágios, I e E, executados de forma simultânea.
I E D
I E D
I E
I E D
I E
I E
Figura 179 – Pipeline de dois estágios
Fonte: Stallings (2017, p. 474).
Nesse exemplo, os dois primeiros estágios do pipeline serão para a realização da busca da instrução 
e um estágio para a execução, além do armazenamento em memória da instrução resultante, o que 
incluirá operações de registrador para a memória ou memória para o registrador. Conforme ilustrado 
na figura anterior, o estágio de busca de instrução seguinte poderá ser executado em paralelo, ao 
mesmo tempo que a primeira parte do estágio, que irá realizar a operação execução/memória. Contudo, 
o estágio que faz a execução/memória da segunda instrução deverá ser atrasado, até que a primeira 
instrução possa esvaziar o segundo estágio. Mesmo com essa penalidade, o pipeline de dois estágios 
ainda pode aumentar em até duas vezes a taxa de execução das instruções se comparado com um 
sistema de execução sequencial (em série). Mesmo assim, dois problemas impedem que seja obtido o 
melhor desempenho na velocidade do pipeline. O primeiro envolve o acesso à memória, que, como se 
sabe, nessa situação será único e será usado apenas um acesso por estágio. O segundo é que, quando 
ocorre um desvio na instrução, o fluxo sequencial de execução também é interrompido, de forma que, 
para acomodar isso utilizando‑se a menor quantidade de estágios possíveis, insere‑se uma instrução no 
ciclo de estágios, o que, claramente, irá resultar em um ciclo de pipeline mais longo e demorado.
Como problemas podem ocorrer no processo de pipeline, como mencionado, ele ainda pode ser 
melhorado, permitindo, por exemplo, dois acessos simultâneos à memória para cada estágio. Isso 
resultará na situação em que três instruções poderão ser sobrepostas, obtendo um melhoramento com 
fator 3. Essas melhorias podem ser visualizadas na figura a seguir.
I E D
I E D
I E
I E
I E D
I E
Figura 180 – Pipeline de três estágios
Fonte: Stallings (2017, p. 474).
217
ARQUITETURA DE COMPUTADORES MODERNOS
Se alguma instrução de desvio entrar no pipeline durante o processamento, a aceleração máxima 
nunca será alcançada. Além disso, algumas dependências de dados poderão afetar esse circuito de 
processamento de instruções. Se alguma instrução necessitar alterar algum operando obtido da 
instrução anterior, ocorrerá um atraso, de forma que, novamente, uma instrução adicional será inserida 
no pipeline. No de três estágios, assim como nos anteriores, é interessante que todos os estágios possuam 
o mesmo tempo de duração, ou seja, teoricamente, o mesmo tamanho. Como o estágio E (execução) 
geralmente envolve alguma operação de ULA, ele será sempre mais demorado, assim, pode‑se dividir o 
estágio de execução em dois subestágios:
• E1: realiza a leitura no banco de registradores.
• E2: realiza a operação na ULA e a escrita em um registrador.
Como as instruções na arquitetura RISC são mais simples e regulares, um projeto com três ou quatro 
estágios será facilmente implantado. A figura a seguir mostra o resultado de um pipeline com 
quatro estágios, baseado na execução estendida.
I E1 E2 D
I E1 E2 D
I E1 E2
I E1 E2
I E1 E2
I E1 E2 D
I E1 E2
I E1 E2
I E1 E2
Figura 181 – Pipeline de quatro estágios
Fonte: Stallings (2017, p. 474).
7.4 Processador superescalar e superpipeline
Um processador superescalar é definido como aquele que possui múltiplos e independentes pipelines 
de instruções. Dessa forma, uma implementação do tipo superescalar, executada na arquitetura de um 
processador que possui instruções do tipo aritméticas de inteiros, de ponto flutuante, leitura/escrita e 
desvios condicionais, pode realizar essas tarefas de forma simultânea e independente (STALLINGS, 2010).
Uma das grandes vantagens da implementação de pipelines múltiplos é o aumento no nível de 
paralelismo de execução das instruções, o que possibilita múltiplos fluxos que também podem ser 
processados simultaneamente. Em vez da busca de somente uma instrução a cada vez (como nos 
sistemas convencionais), um processador superescalar possui como tarefa buscar múltiplas instruções 
simultaneamente, realizando, na sequência, uma tentativa de localização das próximas instruções, para 
que, de modo independente, possa executá‑las em paralelo. Entretanto, assim como em um sistema de 
218
Unidade II
pipeline comum, se a entrada de alguma operação dada por uma instrução for dependente da saída da 
instrução anterior, então a instrução seguinte não poderá completar a execução da tarefa ao mesmo 
tempo ou mesmo antes da instrução anterior. Assim, uma vez que todas as dependências no processo 
sejam identificadas, o processador poderá executar, e até mesmo completar, todas as instruções em uma 
ordem que seja diferente do código de máquina originalmente programado.
Uma forma de contornar esse problema pode ser o processador eliminar algum tipo de dependência 
de dados ou instruções desnecessárias, utilizando‑se, para isso, registradores adicionais, renomeando 
assim as referências obtidas dos registradores o código original. O projeto de processadores superescalares 
foi implementado em 1987, logo após o desenvolvimento da arquitetura RISC, embora a abordagem 
superescalar também possa ser implementada nas arquiteturas CISC. A figura a seguir mostra um 
comparativo entre uma organização escalar simples e uma organização de processamento superescalar.
A) Organização escalar
Memóri
Unidade funcional de 
inteiro com pipeline
Unidade funcional de ponto 
flutuante com pipeline
Banco de registradores 
de inteiro
Banco de registradores 
de ponto flutuante
B) Organização superescalar
Memória
Unidade funcional de inteiro 
com pipeline
• • •
Unidade funcional de ponto 
flutuante com pipeline
Banco de registradores de inteiro Banco de registradores de ponto flutuante
• • •
Figura 182 – Organização escalar (A) e organização superescalar (B)
Fonte: Stallings (2017, p. 493).
Na organização escalar convencional (parte A da figura anterior), existe uma unidade funcional em 
um pipeline único para realizar operações inteiras e outro pipeline para executar operações de ponto 
flutuante. Nesse tipo de organização, o paralelismo será obtido quando se habilitam múltiplas instruções 
em diferentes estágios do pipeline de uma só vez. Já em uma organização superescalar, existem várias 
unidades funcionais, e cada uma será implementada com um único pipeline. Cada uma dessas unidades 
efetivará um grau de paralelismo em função da estrutura. Assim, é de responsabilidade do hardware e 
do compilador garantir que a execução em paralelo não viole algum propósito do programa original.
219
ARQUITETURA DE COMPUTADORES MODERNOS
 Saiba mais
Para entender melhor o que é um compilador e como ele funciona, acesse:
SAIBA quais são as diferenças entre compilador e interpretador. S.O.S. 
Digital, 2021. Disponível em: https://bit.ly/3kgqpfK. Acesso em: 18 jan. 2023.
7.4.1 Comparativo entre processadores superescalar e superpipeline
A evolução da organização de pipeline simples ficou conhecida como superpipeline, desenvolvida em 
1988. Sua organização permite que sejam realizados vários estágios de pipeline; para tal,executam‑se 
tarefas que exigem metade do tempo de um ciclo de clock. Dessa forma, a velocidade de clock 
possibilitará que duas tarefas sejam realizadas em apenas um único ciclo. A figura a seguir mostra um 
comparativo entre as abordagens de pipeline simples, superescalar e superpipeline, todas considerando 
quatro estágios: buscar, decodificar, executar e escrever (salvar na memória).
Chave:
Busca Decodificação Escrita
Execução
In
st
ru
çõ
es
 su
ce
ss
iv
as
Tempo em ciclos básicos
0 1 2 3 4 5 6 7 8 9
Superpipeline
Pipeline simples 
de 4 estágios
Superescalar
Figura 183 – Comparação entre as abordagens de pipeline simples, superpipeline e superescalar
Fonte: Stallings (2017, p. 494).
220
Unidade II
Na figura anterior, observa‑se que as várias instruções podem ser executadas concorrentemente, 
sendo que apenas uma delas estará em seu estágio de execução. A parte seguinte da figura anterior 
mostra uma implementação do superpipeline, que é capaz de executar dois estágios de pipeline em 
um único ciclo de clock. Dessa forma, observa‑se que as funções executadas em cada estágio poderão 
ser divididas em duas partes, não ocorrendo sobreposição, e cada uma delas poderá ser executada 
na metade de um ciclo de clock. Por fim, na parte mais baixa da figura, nota‑se uma implementação 
superescalar, capaz de executar duas instâncias dentro de cada estágio em paralelo. É válido destacar 
que tanto a implementação da organização superpipeline como a organização superescalar devem 
possuir o mesmo número de instruções sendo executadas ao mesmo tempo em um determinado estado. 
Assim, o processador de superpipeline ficará atrasado em relação ao processador superescalar no início 
de cada programa ou quando houver algum desvio.
7.4.2 Limitações
Considerando o nível de instrução, o paralelismo pode ter algumas limitações ao executar tarefas em 
paralelo. Assim, é necessária uma combinação ótima entre as técnicas de implementação de paralelismo 
em hardware em conjunto com o compilador, a fim de maximizar o paralelismo das instruções. Observe 
algumas limitações:
• Dependência de dados verdadeira: quando uma segunda instrução só pode ser executada ao 
término de execução da primeira instrução, devido ao compartilhamento dos dados ou mesmo do 
uso do resultado da primeira operação pela segunda operação.
• Dependência procedural: quando há algum desvio na sequência de execução das instruções, 
complicando a operação do pipeline.
• Conflitos de recursos: quando há uma competição de duas ou mais instruções pelos mesmos 
recursos (memória, processador, dado, instrução) simultaneamente.
• Dependência de saída: quando duas ou mais instruções necessitam armazenar seu resultado em 
um mesmo endereço e ao mesmo tempo.
• Antidependência: quando uma instrução, ao utilizar um local ou operando, entra em conflito 
com a instrução seguinte, que também tenta usar o mesmo local ou operando.
A figura a seguir mostra a execução de instruções em paralelo. Utiliza‑se um pipeline de quatro 
estágios que compara situações sem dependência de dados em relação a outros sistemas com 
dependências de dados, procedural e conflito de recursos.
221
ARQUITETURA DE COMPUTADORES MODERNOS
Chave:
Busca Decodificação Escrita
Execução
Tempo em ciclos básicos
0 1 2 3 4 5 6 7 8 9
i0
i2
i3
i4
i5
1/desvio Dependência procedural
i0
i1
Sem dependência
i0
i1
Dependência de dados
(i1 usa dados computados por i0)
i0
i1
Conflito de recurso 
(i0 e i1 usam a mesma 
unidada funcional)
Figura 184 – Efeito de dependências em um sistema de processamento superescalar
Fonte: Stallings (2017, p. 495).
Conforme ilustrado na figura anterior, em um sistema paralelo sem dependências, as instruções 
podem ser executadas simultaneamente sem nenhum atraso. Quando há uma dependência de dados, 
o estágio de execução terá um atraso em um ciclo de clock, aguardando a obtenção do resultado da 
primeira instrução logo acima. Na dependência procedural há um desvio de instruções, que deverão ser 
executadas primeiro deixando o fluxo para execução das instruções atrasadas, aguardando o término 
do estágio “executar”. Quando há algum conflito de recurso, novamente o estágio “executar” na primeira 
operação deve ser finalizado para que o processamento paralelo possa utilizar o dado resultante, ou 
mesmo usar memória/processador para que seu processo seja de fato executado e escrito.
222
Unidade II
7.5 Multithreading
Considerada uma abordagem alternativa, permite um número maior no paralelismo se comparado 
com os esquemas superescalar ou superpipeline. No multithreading, os vários ciclos de instruções são 
divididos em ciclos menores, também conhecidos como threads, e cada thread poderá ser executado 
em paralelo. Ele é subdividido entre implícito e explícito. Na abordagem de multithreading explícito, 
é vital que o processador disponibilize um contador de programa (program conter – PC), para que 
cada thread em operação possa ser executado concorrentemente. O tipo implícito se refere a uma 
execução concorrente de vários threads retirados de um único programa que, originalmente, estava 
sendo executado de forma sequencial. Dessa forma, os threads implícitos também podem ser definidos 
de forma estática pelo próprio compilador do software utilizado ou de forma dinâmica pelo hardware do 
computador. O multithreading pode se basear no uso de várias técnicas já conhecidas, a fim de otimizar 
a execução de um thread singular, por exemplo, previsão de desvio, renomeação de registradores ou 
mesmo técnicas de processamento superescalar. As diversas técnicas de multithreading explícitos 
podem ser divididas entre:
• Multithreading intercalado: também conhecido como multithreading de granularidade fina, 
nesse esquema o processador pode operar dois ou mais contextos de thread simultaneamente, 
alternando entre eles a cada ciclo de clock. Se algum thread for bloqueado devido a alguma 
dependência de dados ou mesmo por falta de recursos como memória disponível, ele será 
alternado para um thread que esteja pronto para ser executado.
• Multithreading bloqueado: também conhecido como multithreading de granularidade grossa, 
nesse esquema as instruções de um thread serão executadas de forma progressiva até que algum 
novo evento ocorra, causando um atraso. Esse evento induzirá a uma troca de thread e em 
operação para outro thread e só será eficiente se o processador executar as tarefas de forma 
ordenada e, se possível, sem nenhuma falha de cache.
• Multithreading simultâneo (SMT): nesse tipo, as instruções a serem efetuadas são 
enviadas de forma simultânea a partir de vários threads para as unidades de execução de um 
processador superescalar. Assim, o multithreading simultâneo combinará a capacidade de 
envio de instruções superescalares através do uso de múltiplos contextos de thread.
• Chip multiprocessado: nesse caso, o processador inteiro será replicado em um único chip, de 
forma que cada processador irá operar threads separados. Uma das grandes vantagens dessa 
abordagem é que sua área lógica disponível no chip será utilizada eficientemente, sem a 
dependência do crescimento da complexidade no projeto do pipeline.
A figura a seguir faz um comparativo entre algumas abordagens de arquiteturas de pipeline 
envolvendo o uso de multithreading e as compara com outras abordagens também de pipeline, mas que 
não usam o multithreading.
223
ARQUITETURA DE COMPUTADORES MODERNOS
A
Ci
cl
os
A
A
A
A) Thread 
escalar único
A B C D
A
A
A
A
A
A
A
B
B
B
B
B
B
B
B
D
D
D
D
D
D
D
D
C
C
C
C
C
C
K) Chip multiprocessador 
(multicore)
A
A
A
A
A
A
A
A
A A
A
D) Superescalar
Tr
oc
as
 d
e 
th
re
ad
s
A B C D
A
A
A
B
B
C) Multithread 
escalar bloqueado
Tr
oc
as
 d
e 
th
re
ad
s
A B C D
A
B
C
A
D
B
B) Multithread 
escalar intercalado
Tr
oc
as
 d
e 
th
re
ad
s
A B C D
A
B
C
A
D
B
A
B
N
A
D
N
N
B
N
N
D
N
N
N
N
N
D
N
H) Multithread 
intercalado VLIW
A B C D
A
B
C
A
D
B
A
B
A
D
BD D
E) Multithread 
superescalar 
intercalado
Tr
oc
as
 d
e 
th
re
ad
s
A B C D
I) Multithread 
bloqueado VLIW
A
A
B
B
C
A
A
N
B
N
N
N
N
B
N
N
N
N
N
N
A
A
A
A
A
A
N
A
A
N
N
A
A
N
N
A
N
G)VLIW
Ciclo de 
latência
Tr
oc
as
 d
e 
th
re
ad
s
A B C D
F) Multithread 
superescalar 
bloqueado
Janela
 de em
issão
A
A
B
B
C
A
A
B B
A B C D
J) Multithread 
simultâneo (SMT)
A
D
D
C
B
A
A
D
D
D
D
B
A
D
D
D
A
B
A
A
A
A
A
D
B
A
A
A
A
D
B
A
A
A
A
D
B
B
B
A
B
D
C
D
C
A
B
DTr
oc
as
 d
e 
th
re
ad
s
Figura 185 – Diferentes tipos de abordagens para execução de múltiplos threads
Fonte: Stallings (2017, p. 537).
As linhas horizontais da figura anterior representam os slots de envio de instruções para o ciclo de 
execução, ou seja, a largura de cada linha irá corresponder ao número máximo de instruções que serão 
emitidas a cada ciclo de clock. Já as linhas levemente curvadas acima de cada item indicam os threads 
únicos ou múltiplos de instruções sendo adicionados no esquema. Na vertical é ilustrada a sequência de 
tempo de cada ciclo de clock. Os slots vazios, sombreados na figura, representam slots de execução que 
não são utilizados no processo de pipeline. Cada um dos processos é definido a seguir:
224
Unidade II
• Thread escalar único: é um tipo de pipeline simplificado, encontrado tanto em máquinas RISC 
quanto CISC tradicionais, sem o uso de multithreading.
• Multithread escalar integrado: é uma abordagem simplificada e fácil de ser implementada. 
Nela, ocorrerá uma troca de thread para outro thread a cada ciclo de clock, e os múltiplos estágios 
de pipeline poderão ser mantidos ocupados ou parcialmente ocupados.
• Multithread escalar bloqueado: nele apenas um único thread será executado até que ocorra um 
evento que cause algum atraso no pipeline, sendo que, nesse momento, o processador realizaria 
a troca de um thread para outro.
• Superescalar: a abordagem superescalar básica não possui multithread, e somente alguns 
ciclos de slots de envio são utilizados, ocasionando uma “perda horizontal”. Em outros ciclos de 
instruções, nenhum slot de envio será usado, e esses ciclos são conhecidos como perda vertical.
• Multithread superescalar intercalado: durante a execução dos ciclos de clock são emitidas 
diversas instruções, o tanto quanto forem possíveis naquele tempo determinado, de forma que 
um único thread seja capaz de processá‑lo. Logicamente, isso ocasiona atrasos potenciais, pois 
haverá trocas de threads que não serão possíveis de serem executadas, ou seja, serão eliminadas. 
Entretanto, o número de instruções que é enviado para qualquer ciclo pode ser limitado de acordo 
com as suas dependências, seja de dados, seja de recursos dentro daquele thread.
• Multithread superescalar bloqueado: nessa operação as instruções de apenas um thread podem 
ser emitidas durante o ciclo e, como consequência, o multithread bloqueado poderá ser utilizado.
• Slot de envio ou VLIW (very long instruction word): o emprego de uma VLIW é elaborado 
em dualidade com o compilador, que coloca operações, que poderão ser executadas em paralelo, 
numa mesma palavra. Em máquinas VLIW simples, não é possível preencher uma palavra de modo 
completo com instruções que ainda serão emitidas em paralelo.
• VLIW multithread intercalado: oferece uma eficácia semelhante àquela do multithread 
intercalado para uma arquitetura superescalar.
• Multithread VLIW bloqueado: oferece uma eficácia semelhante àquela do multithread 
bloqueado para uma arquitetura superescalar.
• Multithreading simultâneo: esquema capaz de emitir oito instruções simultâneas. Nele, se um 
thread possuir um alto grau de paralelismo em nível de instruções, ele pode ser capaz de preencher 
todos os slots horizontais.
• Chip multicore: combina dois ou mais processadores em um único chip.
225
ARQUITETURA DE COMPUTADORES MODERNOS
 Saiba mais
Descubra mais sobre os processadores multithreading e hyperthreading em:
DESCOBERTA vulnerabilidade nos processadores com hyper‑threading. 
Inovação Tecnológica, 2005. Disponível em: https://bit.ly/3XmJPyk. Acesso em: 
18 jan. 2023.
7.6 Multicore
Há mais de uma década o uso de chips utilizando um único processador atingiu o seu limite de 
desempenho e de execução de instruções, mesmo empregando técnicas de processamento paralelo. 
Com o desenvolvimento da arquitetura multicore, foi possível explorar e melhorar o processamento 
multithreading em vários núcleos do processador. Assim, fica claro que o uso de uma arquitetura 
que oferece vários núcleos em vez de um único também aumentará o número de níveis de memória 
cache, aumentando o desempenho geral de processamento. Um processador multicore combinará 
dois ou mais processadores em um único chip de silício. Essas mudanças na organização do projeto 
dos processadores (baseado no aumento do nível de paralelismo no chip) facilitaram a execução de 
instruções simultâneas durante o mesmo ciclo de clock. Como será maior o número de núcleos em um 
processador, consequentemente, o desempenho do pipeline aumentará, assim como do processamento 
superescalar e do multithreading simultâneo, pois para cada núcleo haverá no mínimo uma cache 
L1 e uma cache L2 compartilhada, conforme o modelo do processador, como pode ser observado na 
figura a seguir.
226
Unidade II
Banco de registradores de thread único
Unidade de execução e filas
Contador do programa
Unidade de busca de instruções
Lógica de envio
A) Superescalar
Cache L1 de dadosCache L1 de instruções
Cache L2
Lógica de envio
B) Multithreading simultâneo
• • • • • •
Unidade de busca de instruções
PC
 1
PC
 n
Re
gi
st
ra
do
r 1
Re
gi
st
ra
do
re
s n
Unidade de execução e filas
Cache L1 de dadosCache L1 de instruções
Cache L2
C) Multicore
Co
re
 1
 
(su
pe
re
sc
al
ar
 o
u 
SM
T)
L1
 ‑
 I
L1
 ‑
 D
Co
re
 2
 
(su
pe
re
sc
al
ar
 o
u 
SM
T)
L1
 ‑
 I
L1
 ‑
 D
Co
re
 3
 
(su
pe
re
sc
al
ar
 o
u 
SM
T)
L1
 ‑
 I
L1
 ‑
 D
Co
re
 n
 
(su
pe
re
sc
al
ar
 o
u 
SM
T)
L1
 ‑
 I
L1
 ‑
 D
• • •
Cache L2
Figura 186 – Organização de processamento multicore
Fonte: Stallings (2017, p. 561).
227
ARQUITETURA DE COMPUTADORES MODERNOS
As principais variáveis na organização multicore são:
• o número de núcleos no chip;
• o número de níveis de memória cache;
• a quantidade de memória cache a ser compartilhada.
A figura a seguir mostra algumas alternativas dentro da organização multicore e nelas é possível 
encontrar cache L1 dedicada, cache L2 dedicada, cache L2 compartilhada e cache L3 compartilhada.
A) Cache L1 dedicada
Core de 
CPU 1
L1‑IL1‑D
Core de 
CPU n
L1‑IL1‑D
• • •
Cache L2
Memória principal
E/S
B) Cache L2 dedicada
Core de 
CPU 1
L1‑IL1‑D
Core de 
CPU n
L1‑IL1‑D
• • •
Cache L2
Memória principal E/S
Cache L2
C) Cache L2 compartilhada
Core de 
CPU 1
L1‑IL1‑D
Core de 
CPU n
L1‑IL1‑D
• • •
Cache L2
Memória principal E/S
D) Cache L3 compartilhada
Core de 
CPU 1
L1‑IL1‑D
Core de 
CPU n
L1‑IL1‑D
• • •
L2 Cache
Memória principal E/S
L2 Cache
Cache L3
Figura 187 – Organização multicore
Fonte: Stallings (2017, p. 567).
Uma organização tradicional que contenha cache L1 dedicada geralmente é dividida entre cache 
de dados e cache de instruções. Um exemplo típico dessa organização é o processador ARM Cortex M3, 
como o da figura a seguir.
228
Unidade II
Figura 188 – Processador ARM Cortex M3
Disponível em: https://bit.ly/3Wk7Qou. Acesso em: 18 jan. 2023.
Em situações que contenham cache L2 dedicada há uma área disponível no próprio chip que permite 
o compartilhamento da cache. Um exemplo dessa de organização com cache L2 dedicada é o processador 
AMD Opteron, como o da figura a seguir.
Figura 189 – Processador AMD Opteron
Disponível em: https://bit.ly/3Hfsl1a. Acesso em: 18 jan. 2023.
229
ARQUITETURA DE COMPUTADORES MODERNOS
Arquiteturas contendo cache L2 e L3 compartilhadas podem conter algumas vantagens se comparadas 
às caches dedicadas,como:
• O uso de interferência construtiva pode reduzir as taxas de falhas de cache, ou seja, se um thread 
em um determinado núcleo acessar uma posição da memória principal (RAM), tal operação 
trará um quadro contendo a posição buscada na cache compartilhada. Se algum outro thread 
em um outro núcleo acessar esse mesmo endereço buscando o mesmo bloco logo em seguida, 
as posições de memória já estarão liberadas, ou seja, disponíveis para uso do chip.
• A comunicação entre os processadores será mais fácil de ser implementada por causa das posições 
das memórias caches compartilhadas.
Dessa forma, quando se aumenta o poder de processamento de um processador aumentando‑se o 
número de núcleos, também é relevante considerar questões relacionadas ao software, e não somente 
ao hardware. A arquitetura multicore também traz diversos benefícios de desempenho, e um exemplo 
pode ser destacado ao analisar o uso de vários núcleos. Essa comparação é realizada através da lei de 
Amdahl. Essa equação afirma que o ganho (que representa uma unidade adimensional) na velocidade 
será igual ao tempo para executar um programa utilizando um único processador pelo tempo de 
execução desse mesmo programa usando N processadores (STALLINGS, 2010). Em termos matemáticos, 
essa expressão é dada por:
Ganho = 1
(1 ‑ f restante) + N
futilizada
Onde N é o número de núcleos do processador e f é a fração do tempo de execução de um certo 
código de programa. Dessa forma, a equação mostra que quando f é pequeno, o uso de processadores 
em paralelo tem pouco efeito, mas quando N se aproxima de infinito, o ganho é ilimitado.
Exemplo de aplicação
Exemplo 1
Uma operação de software utiliza 43% do tempo em operações de ponto flutuante em uma máquina 
de seis núcleos. Qual será o ganho resultante?
Resolução
Ganho = 1
(1 ‑ 0,057) + 6
0,43 → Ganho = 1,993
Exemplo 2
Uma operação de software usa 33% do tempo em operações lógicas em uma máquina de oito 
núcleos. Qual será o ganho resultante?
230
Unidade II
Resolução
Ganho = 1
(1 ‑ 0,067) + 8
0,33 → Ganho = 2,693
 Saiba mais
Descubra mais sobre processadores multicore em:
NOVO hardware acelera comunicação em processadores <i>multicore</i>. 
Inovação Tecnológica, 2011. Disponível em: https://bit.ly/3ZM8vBR. Acesso em: 
18 jan. 2023.
8 TÓPICOS EM SISTEMAS EMBARCADOS, IOT, SMART CITIES E TI VERDE
8.1 Sistemas embarcados
Basicamente, o que difere os sistemas embarcados dos computadores tradicionais é o fato de que 
os sistemas embarcados possuem atividades para determinadas atividades direcionadas (STALLINGS, 
2017). Já os computadores, como já discutido anteriormente, são de “uso geral”, ou seja, podem ser 
programados de acordo com a necessidade do usuário, operando em vários tipos de sistemas operacionais 
e executando praticamente qualquer tipo de programa.
 Observação
A expressão sistemas embarcados é utilizada para determinar dispositivos 
baseados no uso de hardware (eletrônica) e software (programas) inseridos 
(ou embarcados) dentro de um equipamento.
Algumas restrições fazem parte do funcionamento dos sistemas embarcados, como limitação 
de velocidades de CPUs, capacidade das memórias, massa do dispositivo, consumo de energia, tipo de 
ambiente de operação, espaço físico ocupado pelo equipamento e a capacidade de resposta em relação 
a uma ação interna ou externa. Isso ocorre justamente devido às limitações de hardware/softwares 
que esses dispositivos apresentam, visto que sua utilização é específica, não deve abranger itens 
desnecessários para as tarefas para as quais não foram projetados. Algumas melhorias ou correções 
realizadas na programação dos sistemas embarcados podem fazer com que o sistema extrapole a previsão 
operacional em relação ao consumo de energia ou área de memória disponível (NULL; LOBUR, 2010). 
Entre essas restrições mencionadas, o consumo limitado de energia é geralmente a mais importante a 
ser verificada em um projeto de um hardware como esse, pois um baixo consumo de energia exigirá 
231
ARQUITETURA DE COMPUTADORES MODERNOS
uma baixa dissipação de calor, o que pode significar menos gastos com equipamentos que realizem essa 
tarefa, resultando mais energia nas baterias para executar outras operações pelo sistema.
A grande maioria dos sistemas embarcados utilizados mundialmente pode ser dividida em apenas 
três categorias, com base em seus requisitos de energia, que são: sistemas operados à bateria, sistemas 
de consumo fixo e sistemas de alta densidade.
• Sistemas operados a bateria: exigem a maximização da vida útil da bateria e a minimização de 
seu tamanho.
• Sistemas de consumo fixo: devem possuir suprimento de energia ilimitado e seu principal 
objetivo é oferecer o máximo de desempenho dentro das restrições da energia disponível.
• Sistemas de alta densidade: também conhecidos como sistemas de alto desempenho ou 
multiprocessados, são desenvolvidos com foco na eficiência energética devido à dissipação de 
calor. Frequentemente, possuem suprimento de energia ilimitado, entretanto, devem limitar o 
consumo de energia para evitar o superaquecimento.
Outra questão importante envolvida nos sistemas embarcados se refere à temporização dos 
sinais de E/S. Desenvolvedores de sistemas embarcados devem possuir aptidão precisa sobre o 
inter‑relacionamento entre os sinais gerados por eventos do mundo externo em relação aos sinais 
que ocorrem de forma rotineira dentro do próprio sistema embarcado. Qualquer conjunto de eventos 
pode ocorrer a qualquer momento e de maneira aleatória e, muitas vezes, a reação a esses estímulos 
deve ocorrer na ordem de milissegundos. Em sistemas que operam em tempo real, por exemplo, uma 
reação tardia pode ocasionar uma falha que, consequentemente, ocasionará um acidente. Dessa forma, 
os sistemas embarcados devem ser funcionais e flexíveis a mutações, devem ser pequenos e de baixo 
custo (logicamente, excluindo sistemas embarcados grandes, haja vista seu foco operacional). Outro 
fator relevante se refere ao consumo energético, que sempre é uma questão a ser pensada em um 
projeto, pois determinará o tempo de vida operacional do sistema como um todo.
Sistemas embarcados são muito usados na telemetria (medição de coisas) de aeronaves que 
empregam aplicações de alta complexidade, o que pode exigir muito desempenho de seus componentes. 
Em casos como esse, sua fabricação deve ser a mais específica possível. Como se trata de uma operação 
crítica, geralmente são usados processadores específicos em seu projeto.
Entre os diversos tipos de sistemas embarcados, destacam‑se:
• Smartphones: esse tipo pode ser literalmente traduzido como um “telefone inteligente”. 
Basicamente, é a evolução de um telefone celular que possuía somente a capacidade de receber 
e realizar chamadas. Esses dispositivos também possuem embarcado um pequeno sistema 
operacional capaz de controlar todo o hardware e aplicativos do aparelho.
232
Unidade II
Figura 190 – Smartphone
Disponível em: https://bityli.com/nw9eP. Acesso em: 18 jan. 2023.
• Robôs assistentes: podem auxiliar na limpeza diária de uma residência ou até mesmo de uma 
empresa. Eles operam de forma autônoma e podem ser programados para realizar suas tarefas de 
forma escalonada, além de serem recarregáveis. Essa é apenas uma das várias possibilidades da 
utilização de robôs, visto que eles podem ser usados em outras tarefas, como na área médica, na 
construção civil, em funções militares, aviação etc.
Figura 191 – Robô assistente de limpeza
Disponível em: https://bit.ly/3XIhH8m. Acesso em: 18 jan. 2023.
233
ARQUITETURA DE COMPUTADORES MODERNOS
• Drones: essencialmente, são robôs voadores, de pequeno porte, operados por controle remoto 
(podendo também ser autônomos). Todos possuem hardware e software dedicados baseados 
em placas microprocessadas ou microcontroladas e podem ser usados tanto para hobby ou até 
mesmo para uso militar.
Figura 192 – Drone
Disponível em: https://bit.ly/3iLSqvk. Acesso em: 18 jan. 2023.
• Impressoras 3D: são capazesde imprimir em formato tridimensional utilizando resinas plásticas 
baseando‑se em modelagens via laser.
Figura 193 – Impressoras 3D
Disponível em: https://bit.ly/3ISBDS2. Acesso em: 18 jan. 2023.
234
Unidade II
• Veículos autônomos: são um meio de transporte que não depende da condução humana para ir 
de um ponto a outro de forma segura. Eles são dotados de um sistema operacional que controla 
todos os seus sensores, radares e sonares para orientar o veículo por ruas ou rodovias.
Figura 194 – Veículo autônomo
Disponível em: https://bit.ly/3XjDmUU. Acesso em: 18 jan. 2023.
Os embarcados citados anteriormente são somente alguns exemplos de uma vasta quantidade de 
dispositivos utilizados para finalidades específicas, como: smartwatchs, tablets, smart TVs, GPS, satélites, 
roteadores de internet etc.
Todos os sistemas embarcados possuem algum tipo de processamento, seja microprocessado, seja 
microcontrolado. Existem, basicamente, três classificações para processadores embarcados: padronizados, 
processadores reconfiguráveis e totalmente customizados. Neste livro‑texto serão abordados apenas os 
sistemas embarcados do tipo padronizado.
8.1.1 Sistemas padronizados de hardware embarcado
Os avanços obtidos na tecnologia VLSI (Very Large Scale Integration) possibilitaram a criação dos 
microcontroladores, que são uma variação dos microprocessadores. Em suma, um microcontrolador 
difere do microprocessador porque possui uma memória ROM e RAM interna ao processador, o que não 
ocorre em um microprocessador, onde ambas as memórias estão fisicamente situadas do lado de fora. 
Os microcontroladores, embora oriundos dos processadores de uso geral, possuem limitação de operação 
e, devido a isso, são vendidos por uma fração do valor de um processador de uso geral. Atualmente, 
ocorre uma enorme popularização dos microcontroladores, como os modelos 8051 da Intel, PIC 18F da 
Microchip. Hoje o mais usado é o Atmel ATMega 328, também da Microchip.
235
ARQUITETURA DE COMPUTADORES MODERNOS
Figura 195 – Microcontrolador Atmel Atmega 328
Disponível em: https://bit.ly/3J6w0zw. Acesso em: 18 jan. 2023.
Como já mencionado, os microcontroladores possuem muito em comum com os processadores 
de propósito geral, pois um microcontrolador é programável e pode acessar uma grande variedade de 
periféricos. Ao contrário de um processador de propósito geral, um microcontrolador possui um clock 
menor, por exemplo, o Atmega 328 tem um clock de 20 MHz, infinitamente menor que um processador i7 
de última geração, que tem normalmente 3 GHz de processamento. Um diagrama simplificado de um 
microcontrolador é observado na figura a seguir.
ROM
Relógio
E/S E/S
Controlador de E/S
Núcleo do microprocessador
SRAM
Controlador do 
barramento
Temporizador vigia
Figura 196 – Diagrama básico de um microcontrolador
Fonte: Null e Lobur (2010, p. 53).
236
Unidade II
Esse microcontrolador básico da figura anterior possui: CPU; memória para programas (SRAM) 
e dados; portas de E/S; controladores de E/S e do barramento do sistema; um clock (relógio) e um 
temporizador vigia (watchdog). Esse temporizador vigia é um mecanismo que tem como função, como 
o próprio nome sugere (cão de guarda), verificar possíveis falhas no sistema. Computadores de propósito 
geral, por exemplo, não necessitam desse tipo de temporizador vigia, pois nessas situações a própria 
interação informando uma falha pode ser interpretada pelo usuário, de modo que o próprio indivíduo 
poderá corrigir o erro informado. Em sistemas embarcados, esse processo de verificação de falhas pelos 
humanos não é tão trivial assim, pois esses sistemas podem estar posicionados em locais de difícil 
acesso ao humano, como usinas nucleares, satélites, antenas etc. Uma placa microcontrolada bastante 
conhecida atualmente é a Arduino Uno.
 Lembrete
O Arduino é uma plataforma de prototipagem open source (código 
aberto) associada a uma linguagem de programação intuitiva e embarcada 
em um ambiente de desenvolvimento integrado (IDE – Integrated Development 
Environment) (BLUM, 2016).
Como a plataforma Arduino é open source, facilita‑se seu acesso por parte dos usuários a todos 
os projetos, bibliotecas, diagramas esquemáticos e códigos‑fontes disponíveis na internet, tudo 
de forma gratuita e abrangente a todos que queiram desenvolver nessa plataforma, popularizando 
e democratizando o uso dos sistemas embarcados. Por ser open source, é possível também que 
desenvolvedores de placas possam fabricar “clones” do Arduino e comercializar suas próprias placas 
(desde que não usem o nome Arduino) e aplicá‑los em projetos de hardware dedicados, atingindo um 
público ainda maior.
Figura 197 – Placa microcontrolada Arduino Uno
Disponível em: https://bit.ly/3iLXwaW. Acesso em: 18 jan. 2023.
237
ARQUITETURA DE COMPUTADORES MODERNOS
As placas Arduino possuem características e funções específicas, de acordo com o modelo de placa. 
Seus componentes‑chave são:
• microcontrolador Atmel (podendo variar conforme o modelo de placa);
• interface de programação (IDE);
• E/S de comunicação USB;
• regulador de tensão e conexões de alimentação;
• pinos de interrupção de E/S;
• LEDs de depuração, energia e RX/TX;
• botão de reset;
• conectores de programação serial no circuito (ICSP – In‑Circuit Serial Programming).
Botão reset
Conector USB
Circuito serial ‑ USB
Entrada 7‑12VDC
Pino de energia e 
pinos auxiliares
Entradas do conversor 
 analógico‑digital
MCU ATMega 328
Conector de programação 
MCU [ICSP]
LED de depuração
E/S geral
Figura 198 – Componentes da placa microcontrolada Arduino Uno
Adaptada de: Blum (2016).
No geral, os programas usados nos microcontroladores ATMega são codificados em linguagem C ou 
até mesmo em linguagem assembly. Para isso, basta utilizar a IDE (sketch) do Arduino e carregar o 
arquivo codificado via bootloader pela porta USB da placa.
238
Unidade II
Figura 199 – IDE Arduino
Disponível em: https://bit.ly/3wcNqTD. Acesso em: 18 jan. 2023.
O bootloader é um pequeno código carregado de fábrica no ATMega utilizando um cabeçalho ICSP 
que permite que uma USART (Universal Synchronous/Asynchronous Receiver/Transmitter) carregue 
o programa no Arduino. No geral, os microcontroladores AVR (Alf and Vegard’s Risc processor) são 
programados com um ICSP que se comunica com o microcontrolador através de uma interface periférica 
serial (SPI – Serial Peripheral Interface). Quando a placa é inicializada pela primeira vez, o Arduino 
inicializa o bootloader, que opera por alguns segundos até receber um comando de programação a 
partir do IDE através da UART (Universal Asynchronous Receiver/Transmitter) e que carrega o programa 
que está lhe sendo enviado, direcionando‑o para a memória do microcontrolador (BLUM, 2016).
Existem alguns modelos de placa microcontrolada Arduino, todas com diferentes configurações 
e para diferentes aplicações. Para os modelos Arduino Uno e Arduino MEGA 250, utiliza‑se um 
microcontrolador secundário (ATMega 8U2 ou 16U2) como interface entre o cabo USB e os pinos USART 
seriais do microcontrolador principal. O Arduino Leonardo, por exemplo, usa um microcontrolador 
principal, o modelo 32U4, e tem uma USB integrada, fazendo com que não seja necessário um 
microcontrolador secundário.
239
ARQUITETURA DE COMPUTADORES MODERNOS
Figura 200 – Placa microcontrolada Arduino Leonardo
Disponível em: https://bit.ly/3CXfE8H. Acesso em: 18 jan. 2023.
Sem dúvida, um dos componentes mais importantes da placa microcontrolada Arduino são os pinos 
de E/S de uso geral e os pinos ADC (Analogic‑Digital Converter). Os pinos ADC servem como entradas e 
saídas digitais e também podem atuar como entradas analógicas, medindo tensões entre 0V e 5V. Muitos 
desses pinos ADC também são multiplexados e servem como funções adicionais, como: interfaces seriais, 
saídas de largura de pulso moduladas e interrupções externas.
Na maioria dos projetos desenvolvidos na plataforma Arduino, utiliza‑se a energia 5V, fornecida à 
placa pelo computadoratravés do cabo USB, obviamente, enquanto o projeto ainda está em fase de 
testes. A partir do momento em que o projeto se torna robusto e funcional, outras entradas de voltagem 
podem ser usadas, como a entrada 6V e 20V, conectadas via corrente contínua (DC) diretamente ou 
através do pino Vin da placa. A placa Arduino possui ainda reguladores de 5V e 3,3V integrados. Observe 
suas características:
• 5V é utilizado em toda a placa, inclusive para situações em que se deseja simular um comportamento 
dos bits 0 e 1 (0V e 5V);
• 3,3V é derivado para um pino onde se deseja acomodar shields (placas acopladas ao Arduino) e 
circuitos externos.
Além do modelo Arduino Leonardo, há um muito utilizado em projetos que requerem um hardware 
reduzido tanto em tamanho quanto em desempenho e funcionalidade, que é a placa Arduino Nano, 
como mostra a figura a seguir.
240
Unidade II
Figura 201 – Placa microcontrolada Arduino Nano
Disponível em: https://bit.ly/3Xn3SMU. Acesso em: 18 jan. 2023.
Essa placa foi projetada para ser montada diretamente em um soquete de prototipagem ou 
protoboard. Ela possui memória flash de 32 KB, memória SRAM de 2 KB, EEPROM de 1 KB e um clock de 
16 MHz. Outras opções aparecem no mercado, por exemplo, a placa microcontrolada Arduino Mega 2560, 
constituída de maior quantidade de canais ADC e quatro interfaces seriais, além de memória flash de 
8 KB, SRAM de 8 KB, EEPROM de 4 KB e um microcontrolador de 16 MHz.
Figura 202 – Placa microcontrolada Arduino Mega
Disponível em: https://bit.ly/3Wk9q9U. Acesso em: 18 jan. 2023.
 Saiba mais
Para conhecer mais sobre o universo das placas Arduino, acesse o site:
Disponível em: https://www.arduino.cc/. Acesso em: 18 jan. 2023.
241
ARQUITETURA DE COMPUTADORES MODERNOS
As CPUs dos microcontroladores possuem pequena faixa operacional no processamento de instruções, 
que vão geralmente de 4 bits até 64 bits, com memórias que podem variar entre poucos kilobytes 
a muitos megabytes. Os microcontroladores também são considerados sistemas computacionais em 
miniatura ou sistemas em um único chip (SOCs – System On a Chip). Os SOCs se distinguem dos 
microcontroladores no sentido de terem maior complexidade e maior quantidade de recursos no chip, 
de modo que os SOCs podem conter mais do que apenas uma CPU (multiprocessado). Por exemplo, um 
roteador de internet contém vários processadores do tipo RISC que tratam o tráfego de comunicação 
e também um processador CISC para configuração e gerenciamento do próprio roteador. Como os 
SOCs têm memórias com maior capacidade, eles podem acomodar sistemas operacionais de tempo real 
(RTOS – Real Time Operation Systems), que são muito utilizados em sistemas embarcados complexos. 
A placa microprocessada Raspberry Pi 2 é um exemplo de SOC multiprocessado e que comporta um 
sistema operacional customizado embarcado.
Figura 203 – Placa microprocessada Raspberry Pi 2
Disponível em: https://bit.ly/3XBlk00. Acesso em: 18 jan. 2023.
O coração do sistema Raspberry Pi consiste em um processador multimídia Broadcom modelo 
BCM2835 de 250 MHz, contendo uma unidade de processamento gráfico, assim como hardware 
auxiliar de áudio e comunicações (UPTON; HALFACREE, 2013). Ele possui também uma arquitetura de 
conjunto de instruções conhecida como ARM (Advanced Risc Machine). O Raspberry Pi opera com 
uma alimentação de energia de 1A e 5V, fornecida pela porta micro‑USB. Esse baixo consumo de 
energia da placa (mesmo em situações de processamento complexas) justifica inclusive o não uso 
de dissipadores em seu sistema. O BCM2835 também se baseia no uso da geração de processadores 
ARM11, projetada em 2002, apoiada em um sistema SIMD (Single Instruction Multiple Data), método de 
operação com várias unidades operacionais proporcionando processamento paralelo, como pipeline.
A partir de placas microprocessadas ou placas microcontroladas, foi possível criar uma quantidade 
de possibilidades infinitas quando o intuito é criar sistemas embarcados para utilidades do cotidiano 
das pessoas, facilitando também a criatividade de “informatizar” as coisas, criando uma nova área, 
chamada IoT.
242
Unidade II
8.2 Internet das coisas (IoT – Internet of Things)
A internet é definida como um ambiente virtual, repleto de informações provenientes de diversos 
dispositivos conectados no mundo todo, mesmo não havendo a necessidade de estarem, é claro, 
conectados fisicamente no mesmo ambiente para que haja comunicação entre eles (STEVAN JR, 2018). 
Assim, a internet comporta uma grande quantidade de dados que estão disponíveis virtualmente a todas 
as pessoas que assim desejarem. Dessa forma, qualquer dispositivo que esteja conectado à internet 
pode ser identificado pelos demais dispositivos através de endereços lógicos universais, conhecidos 
como endereços IP (Internet Protocol). Consequentemente, pode‑se considerar também que é possível 
identificar qualquer “coisa” que possua um IP e esteja conectada na internet. Isso é a base para a IoT, em 
que todo dispositivo que consegue se comunicar pela internet possa ser usado para algum ou vários fins 
específicos, gerais, privados ou públicos.
Figura 204 – IoT conecta o mundo, as pessoas e as máquinas
Disponível em: https://bit.ly/3ISGBOG. Acesso em: 18 jan. 2023.
 Saiba mais
Para aprender mais sobre endereços IP (Internet Protocol) versão 4 ou 
IPv4, acesse o seguinte site:
O QUE é endereço IP – definição e explicação. Kaspersky, [s.d.]. Disponível 
em: https://bit.ly/3CUaN8c. Acesso em: 18 jan. 2023.
Também é possível classificar a IoT como algo que se refira à possibilidade de localização ou rastreio 
de algum item conectado à internet através de alguma busca no ambiente virtual, podendo haver 
alguma troca de informação entre o dispositivo e as pessoas ou mesmo entre dispositivos de forma 
243
ARQUITETURA DE COMPUTADORES MODERNOS
automatizada e inteligente. Assim, a IoT se baseia, atualmente, na interligação facilitada de diferentes 
tecnologias de rede, criadas com diferentes propósitos, como resultado da primeira evolução da internet. 
Ao compartilharem dados entre si, todas essas redes menores interligadas irão proporcionar milhares de 
interações entre dispositivos, gerando uma infinidade de novas aplicações para a sociedade. Paralelamente 
à evolução dos dispositivos microprocessados (já abordados anteriormente neste livro‑texto), diversos 
outros dispositivos microcontrolados e de baixo custo também surgiram no mercado, tanto como produto 
final como para fins de prototipagem. Essas novas plataformas necessitam também de endereçamentos 
de internet, fazendo parte da grande malha de componentes em rede mundialmente.
 Observação
O termo internet se refere à camada de rede de computadores composta 
de dispositivos como roteadores e/ou switches interligados. Sua principal 
função é transportar os dados de um ponto a outro ponto de forma rápida, 
confiável e segura. Já o termo web se refere a uma camada de aplicativos 
que opera sobre a camada de internet. Nesse caso, sua função é oferecer 
uma interface amigável ao usuário e que proporcione o uso e a interação 
com os dados transmitidos.
A internet surgiu em meados de 1969 nos EUA com a finalidade de interligar alguns laboratórios 
onde eram realizadas pesquisas militares. A internet era conhecida inicialmente como ARPAnet devido 
à sua localização nos laboratórios da agência militar ARPA (Advanced Research Projects Agency). 
Mesmo com apenas algumas dezenas de pontos de rede (60 nós), a internet cresceu rapidamente nos 
anos seguintes, principalmente após a criação do protocolo TCP/IP (Transfer Control Protocol/Internet 
Protocol) baseado no endereçamento de 32 bits, o que resultaria em 232 endereços de internet possíveis, 
ou aproximadamente 4,2 bilhões de combinações de endereços possíveis. Isso mostra a versatilidade e 
capacidade real de se conectarem milhares de dispositivos portáteis à internet. Mas somente em 1989 
que a Organização Europeia para Investigação Nuclear (CERN – Conseil Europeenpour la Recherche 
Nucleaire) na Suíça propôs um sistema de gerenciamento de informações da internet utilizando o 
formato hipertexto, que ficou conhecido como World Wide Web ou apenas WWW (STEVAN JR, 2018).
Com o advento das redes mundialmente conectadas, logo se pensou que haveria o esgotamento de 
endereços IPs possíveis no início dos anos 1990, foi daí que se começou a desenvolver a sexta versão 
do protocolo IP, ou somente IPv6, que possuía uma dimensão de 128 bits, resultando em um número 
gigantesco de possibilidades de endereçamento (2128), o que acabou com os problemas de falta de 
endereços possíveis no futuro. Outra tecnologia que surgiu devido à alta demanda de endereçamentos 
e múltiplos computadores conectados foi o conceito de computação em nuvem, que é o fornecimento 
de recursos de TI sob demanda. Além da possibilidade da computação em nuvem, também surgiu 
em 1999 um termo cunhado por Kevin Ashton que ficou conhecido como Internet of Things. As big 
techs (grandes empresas de tecnologia) como Amazon, Microsoft, Google, IBM, Oracle, Cisco, entre 
outras, logo enxergaram o potencial de IoT. Assim, entre 2008 e 2009 a IoT efetivamente surgiu para 
suprir a quantidade exponencial de dispositivos conectados à internet, que ultrapassou o número de 
pessoas conectadas.
244
Unidade II
Tabela 10 – Relação entre usuários e 
dispositivos conectados de 2003 a 2020
2003 2010 2015 2020(previsão)
População 
mundial
6,3 bilhões 6,8 bilhões 7,2 bilhões 7,6 bilhões
Dispositivos 
conectados
0,5 bilhão 12 bilhões 25 bilhões 50 bilhões
Dispositivos 
conectados por pessoas 0,08 1,84 3,47 6,58
Fonte: Stevan Jr. (2018, p. 23).
A partir das medições realizadas pelo grupo de pesquisas estatísticas da Cisco Internet Business 
Solutions Group, foi contabilizada a quantidade de dispositivos conectados à internet, como smartphones, 
tablets, laptops, chegando‑se a um total de 12,5 milhões somente em 2010. Naquela época, a população 
mundial era de 6,8 bilhões de pessoas, o que resultou uma taxa superior a 1 (1,84 dispositivos por 
pessoa), número 23 vezes maior ao obtido no ano de 2003.
É importante também ressaltar quão diversificada são as aplicações de IoT no cenário da matriz 
de produção de um país. Vários setores da indústria e do comércio podem se beneficiar dessa tecnologia de 
integração de dispositivos; cada aplicação poderá sanar um problema econômico e/ou social, de 
forma inteligente e segura, simplesmente por meio da interação via internet. Todos os sinais coletados 
trafegam através de pequenas redes locais, comumente gerenciadas a distância. Esse gerenciamento 
utiliza redes de concentração de informações conectadas a outras redes em nuvem. Assim, para acessar 
toda a informação relativa aos diferentes serviços operando na rede, basta que aplicativos conectados 
usem softwares de gerenciamento de dados e serviços ligados aos dispositivos.
8.2.1 IoT versus M2M
No final da década de 1960, surgiu uma tecnologia que relacionava a comunicação de dispositivos 
de máquina a máquina ou M2M (Machine to Machine). Naquela época, essa tecnologia proporcionou ao 
sistema de telefonia existente a comunicação de dados entre máquinas a partir de sistemas totalmente 
computadorizados (STEVAN JR, 2018). Depois disso, com o surgimento da telefonia celular, já na década 
de 1990 o uso do M2M também foi aplicado em situações que envolviam o sistema wireless, criando o 
termo WM2M (Wireless Machine to Machine). Nessa mesma época (1995), a empresa Siemens lançou 
no mercado o módulo GSM (Global System for Mobile) para comunicação industrial utilizando seu 
telefone Siemens S6, permitindo a comunicação entre máquinas usando redes sem fio. Em 1997, foram 
apresentadas as primeiras aplicações de monitoramento e rastreamento, o que possibilitou a automação 
automotiva, incorporada pela empresa GM. Isso permitiu o desenvolvimento de equipamentos de 
245
ARQUITETURA DE COMPUTADORES MODERNOS
conectividade sem fio e a adoção de satélites para comunicação e geolocalização (GPS). Assim, foi 
possível fazer a troca de informação de forma rápida e eficiente em uma ampla variedade de dispositivos, 
incluindo sensores e/ou atuadores, computadores, robôs, veículos autônomos, telefones etc.
Depois desses exemplos e conceitos, uma questão fica em aberto: qual é a diferença entre M2M e 
IoT? Inicialmente, o conceito é de que o acesso remoto a um dispositivo ou máquina é comum em ambas 
as soluções (IoT e M2M), porém existem diferenças no tipo de acesso de cada tecnologia. Por exemplo, 
em soluções M2M há uma dependência de as comunicações serem ponto a ponto, além de utilizarem 
módulos de hardware incorporados a redes com ou sem fio, dependentes ou não de telefonia celular. Já 
as tecnologias do tipo IoT dependem de redes baseadas em IP para a criação de uma interface dos dados 
do dispositivo para uma plataforma virtual (em nuvem). As aplicações M2M são basicamente compostas 
de módulos de hardware, incorporados em uma máquina no meio ambiente de um cliente, assim se 
comunicando por meio de redes sem fio dedicadas, redes celulares ou redes cabeadas proprietárias em 
um aplicativo de software dedicado, localizado em um servidor de serviços de telecomunicações. Por 
sua vez, as tecnologias IoT industriais acomodam os mesmos dispositivos e máquinas das aplicações 
M2M, assim como sensores e atuadores de baixo custo, o que pode não justificar financeiramente a 
necessidade de incorporar módulos de comunicações M2M dedicados. Dessa forma, os dispositivos IoT 
se comunicam por meio de redes baseadas em IP padrões, permitindo monitoramento de seus dados em 
aplicativos corporativos através da nuvem. A arquitetura baseada em nuvem torna a IoT mais escalável, 
eliminando a necessidade de conexões incrementais de instalações físicas e da utilização de cartões de 
rádio frequência (RFID) com identificações inerentes aos projetos de M2M, ou seja, tornando a IoT um 
facilitador universal.
Figura 205 – Diferentes dispositivos de IoT conectados em nuvem
Disponível em: https://bit.ly/3ZD7w6W. Acesso em: 18 jan. 2023.
246
Unidade II
 Saiba mais
Saiba mais sobre as tecnologias M2M (Machine to Machine) em:
O QUE é M2M? Veja o que significa o conceito da ‘comunicação das 
máquinas’. Techtudo, 2013. Disponível em: http://glo.bo/3WqFicO. Acesso 
em: 18 jan. 2023.
8.3 Smart houses e smart cities
8.3.1 Casas inteligentes (smart houses)
Quando se utiliza o termo casa inteligente, instantaneamente pensamos em dispositivos de automação 
residencial que permitem que o ambiente se torne mais confortável e funcional aos seus residentes. 
Podemos exemplificar alguns desses processos de automatização como: automação de portões, sistemas 
de alarme, sistemas de controle de temperatura e controle de iluminação. Geralmente, o termo para 
essas automatizações é chamado de domótica (STEVAN JR, 2018).
 Observação
O termo domótica adveio da união das palavras latinas domus, que 
significa casa, e do sufixo grego tica, automático. Ou seja, baseia‑se em 
um conjunto de sistemas capazes de automatizar uma residência, levando 
em consideração serviços de bem‑estar, segurança, controle de energia 
e de comunicação, todos integrados através de uma infraestrutura de 
redes internas ou externas, cabeadas ou sem fio, que tornarão o ambiente 
mais inteligente.
247
ARQUITETURA DE COMPUTADORES MODERNOS
Cofres inteligentes Multimídia 
smart TV
Wi‑fi internet
Sensores de gás e 
fumaça (segurança)
Sensores de luz solar
Sensores de luz solar
Sensores de segurança 
presença/abertura de porta
Controle de 
consumo de energia
Computadores/
smartphones
Desodorizador 
inteligente
Controle de temperatura
Iluminação inteligente
Abertura codificada 
ou com biometria
Sistema de vídeo porteiro 
vigilância/alarme
Cozinha: 
‑ Eletrodomésticos inteligentes 
(micro‑ondas, cafeteira etc.)
‑ Refrigerador inteligente
‑ Despensa (armários) inteligente
Área de serviço: 
‑ Máquina de lavar/secar 
inteligente
Figura 206 – Ambiente residencialinteligente
Fonte: Stevan Jr. (2018, p. 33).
Historicamente, somente em 1990, a partir do desenvolvimento da microeletrônica e do barateamento 
dos sistemas microcontrolados, que foi possível aperfeiçoar e popularizar a domótica. Contudo, foi só 
1998, quando a internet se popularizou, que o conceito de smart houses foi de fato estabelecido, por 
meio da interconexão de diversos dispositivos conectados em rede.
Etimologicamente, o termo inteligente se refere a uma habilidade que envolve raciocínio ou mesmo 
à capacidade de compreender ou aprender. Porém, nesse contexto sabemos que a domótica está limitada 
a comandos e rotinas preestabelecidas, o que não pode ser interpretado necessariamente como uma 
“inteligência”. Hoje o termo inteligência pode ser empregado por dispositivos e/ou equipamentos que 
se conectam entre si ou mesmo em rede, tornando os ambientes ubíquos (algo encontrado em todos 
os ambientes). Assim, essa interação entre todos (dispositivos) os torna reativos à variação de condições 
ambientais, e não somente à variação de comandos preestabelecidos. Atualmente, uma casa pode ser 
denominada inteligente se estiver equipada com “produtos inteligentes”, ou seja, que possua a capacidade 
de comunicação e interpretação de comandos predefinidos contidos nesses dispositivos, através do 
uso da internet, possibilitando a tomada de decisão dos dispositivos em função das características ou 
intervenções do ambiente.
248
Unidade II
Uma pesquisa realizada pela Intel no ano de 2016 ouviu aproximadamente 9 mil pessoas em 
nove países a respeito do que elas entendiam sobre o termo “casa inteligente”. O resultado dessa 
pesquisa apontou que 75% dos entrevistados esperavam obter benefícios diretos ao morar em uma 
casa inteligente, e mais de 55% das pessoas esperavam ter redução nas contas de eletricidade e gás. 
Vale a pena ressaltar que os dispositivos de uma casa inteligente mais citados nessa pesquisa foram: 
iluminação inteligente 73%), eletrodomésticos (62%) e sistemas de aquecimento residencial (60%) 
(STEVAN JR, 2018).
Ar‑condicionado (AC)
Ar‑condicionado
Computador 
central
Computador 
local
Dados de 
energia
Dados de 
sensores
Dados de 
sensores
Controle Dados de
sensoresdo AC
Termostato
Interface de 
acesso remoto
Interface de ajustes 
de parâmetro do AC
sMAP Internet
Armazenamento e nuvem
Sinais dos 
sensores
Figura 207 – Controle inteligente de um sistema de climatização de ambiente
Fonte: Stevan Jr. (2018, p. 37).
Outro fator relevante trazido por essa pesquisa foi a preocupação das pessoas com a segurança, 
citado por 92% dos entrevistados. Ela ponderaram o perigo de haver algum tipo de acesso indevido 
aos seus dados. Esses 92% também evidenciaram a preferência pelo uso de dispositivos confiáveis, 
utilizando alguma segurança como reconhecimento biométrico, identificação da impressão digital, 
RFID, reconhecimento de voz ou íris (STEVAN JR, 2018).
Figura 208 – Alguns tipos de controle seguro de acesso aos ambientes e dispositivos
Fonte: Stevan Jr. (2018, p. 34).
249
ARQUITETURA DE COMPUTADORES MODERNOS
O adensamento do uso de novas tecnologias na automação de residências, escritórios e na indústria 
motivou a criação de não somente ambientes inteligentes, mas de cidades inteligentes.
8.3.2 Cidades inteligentes (smart cities)
O termo cidade inteligente é associado a diversos contextos, que não necessariamente são pertinentes 
à aplicação crescente das tecnologias de ponta, ou seja, está relacionada ao aspecto econômico 
ou sustentável que se relaciona a uma mudança mundial de hábitos. Uma cidade inteligente, por 
exemplo, pode receber essa denominação por ter boas soluções de engenharia no transporte público. 
Outra cidade  pode apresentar soluções ambientais reduzindo sua taxa de emissão de poluentes, ou 
mesmo cidades que utilizam estratégias para reciclagem coletiva do lixo.
Apesar de todas essas abordagens poderem ser efetivamente amparadas por redes de sensores de 
monitoramento em diferentes cenários e ao mesmo tempo permitirem que centrais possam atuar em 
alguma situação, elas não ser referem, de forma direta, à conectividade digital de todas as informações 
que as cidades produzem o tempo todo. Dessa forma, tecnicamente falando, o conceito de cidades 
inteligentes também deve agregar a capacidade de conectividade que uma cidade terá, permitindo que 
seus cidadãos possuam a habilidade de monitorar todas (ou quase todas) as variações de ambiente e assim 
promover decisões em diferentes circunstâncias, de forma sustentável, humana e aceitável socialmente.
Meio ambiente
Transporte e mobilidade Segurança
Conectividade 
do cidadão
Figura 209 – Ilustração de uma cidade inteligente e seus possíveis eixos de atuação
Fonte: Stevan Jr. (2018, p. 53).
Em uma pesquisa realizada em 2106 pela Juniper Research elencou as cinco cidades mais inteligentes 
do mundo, utilizando como critério dessa escolha um conjunto de parâmetros que incluíam: adoção 
de tecnologias de Smart Grid (sistemas de distribuição de energia de forma inteligente), iluminação 
inteligente, uso de tecnologia da informação para melhoria do tráfego de veículos, pontos de acesso 
wi‑fi para moradores e transeuntes, sensoriamento para aplicações sustentáveis etc. (JUNIPER..., 2022).
250
Unidade II
 Saiba mais
Aprenda um pouco mais sobre smart grid, suas aplicações e vantagens em:
CAMARGO, C. Smart grid: a rede elétrica inteligente. TecMundo, 2009. 
Disponível em: https://bit.ly/2SGeuF4. Acesso em: 18 jan. 2023.
No transporte público ou privado, os principais esforços se concentram no uso de técnicas para redução 
de taxas de congestionamento, semáforos dinâmicos, uso de sensores rodoviários, estacionamentos 
inteligentes etc. A partir desse parâmetro comparativo, a cidade que obteve a maior pontuação na 
pesquisa foi Singapura, seguida por Barcelona (Espanha), Londres (Inglaterra), São Francisco (EUA) e 
Oslo (Noruega). Todas essas cidades apresentaram um grande nível de sensoriamento, sobretudo no 
trânsito, propondo soluções para a redução e o monitoramento do tráfego (JUNIPER..., 2022).
Figura 210 – Cidade‑estado de Cingapura, considerada uma das mais inteligentes do mundo
Disponível em: https://bit.ly/3XGyysl. Acesso em: 18 jan. 2023.
Em Singapura, um volume grande de sensores e câmeras tem sido instalado, principalmente a partir 
do ano de 2014, com o intuito de rastrear a limpeza das ruas até o tráfego dos automóveis. O nível de 
sensoriamento dessa cidade é tão grande que é possível detectar as pessoas que estão fumando em 
zonas não autorizadas ou mesmo jogando lixo pelas janelas das casas ou prédios.
Uma situação corriqueira nas cidades inteligentes se refere ao acesso aberto a um grande conjunto 
de informações coletadas por milhares de dispositivos instalados nelas. A população em geral pode 
consultar esses dados, o que possibilita o melhor desenvolvimento de aplicativos que proporcionem 
251
ARQUITETURA DE COMPUTADORES MODERNOS
ainda mais a inserção de inteligência nessas cidades, sempre levando em consideração a privacidade 
dos cidadãos. Para que seja possível ter uma grande quantidade de dispositivos conectados em rede, 
algumas empresas de consultoria, como a americana Gartner, têm realizado pesquisas que estimam 
que em 2016 já existiam 1,6 bilhões de dispositivos conectados à internet, o que representava um 
aumento de 39% sobre o que fora previsto anteriormente, em 2015. Destes, 518 milhões de dispositivos 
se referiam à IoT em prédios comerciais. Ainda dentro desse conceito de cidades inteligentes, o termo 
sustentabilidade é vital, pois deverá ser abordado em prédios inteligentes, onde deverá haver coleta 
seletiva e reciclagem de materiais, geração de energia limpa etc. Tudo isso implica um novo termo 
denominado inmótica. Ela é atribuída e aplicada em edifícios e prédios comerciais e industriais assim 
como a domótica é aplicada em edificações residenciais. Ou seja, ambas as tecnologias tratam da adição 
de conforto, monitoramento e automaçãode dispositivos (JUNIPER..., 2022).
Historicamente, pode‑se definir a evolução das construções inteligentes em três momentos: edifícios 
automatizados (1980 a 2000), edifícios inteligentes (2000 a 2015) e construções cognitivas (após 2015), 
conforme observado na figura a seguir.
2000 - 2015 20151980 - 2000
Visualização de indicadores
+ Bom para classificar
+ Permite identificações 
generalistas
‑ Ruim para identificar 
desperdício de energia
1
Análise dos consumidores 
de energia
+ Entendimento do consumo 
de cômodos individuais e 
comuns
‑ Somente analisa dados 
primários
2
Aprendizagem de comportamento
+ Controle preditivo completo
+ Compreensão do fluxo de energia 
e da ocupação do edifício
+ Conforto do usuário como 
parâmetro
+ Análise de parâmetros climáticos 
e coletivos
‑ Grande necessidade de 
ferramentas
‑ Consequente necessidade de 
ferramentas avançadas de análise 
de dados
3
Volume 
de dados
Volume 
de dados
Volume 
de dados
Edifícios 
automatizados
Edifícios 
inteligentes
Edifícios 
cognitivos
Figura 211 – Evolução dos edifícios automatizados
Fonte: Stevan Jr. (2018, p. 58).
252
Unidade II
Percebe‑se que a evolução inicia com a automatização de alguns itens do edifício, principalmente 
processos de identificação de pessoas, até atingir um período de uma grande inserção de sensores com 
o objetivo de controlar parâmetros como temperatura, iluminação, segurança, prevenção de incêndios, 
controle de energia, entre outros. Atualmente, existe uma tendência que engloba construções que 
se adaptam ao perfil de cada usuário do edifício, avaliando e controlando a ocupação, o perfil, as 
preferências de conforto, a gestão de energia otimizada etc. Na atual perspectiva, vale a pena indicar 
que as principais características dos edifícios inteligentes são:
• desenvolvimento de aplicações com interface amigável, promovendo a aceitação do usuário;
• criação de dispositivos flexíveis que permitam futuras adaptações;
• gestão independente ou modular das diferentes áreas do edifício.
Percebe‑se que essa grande quantidade de sistemas de controle e automação inevitavelmente gera 
a coleta de uma quantidade muito grande de dados e informações. Além disso, a conexão entre todos 
os elementos gerados durante o funcionamento dos dispositivos permitirá a criação de um banco com 
todos esses dados. Uma vez que todos os dados desses dispositivos inteligentes podem ser acessados e 
monitorados e gerar relatórios, esses dispositivos tornam‑se uma poderosa ferramenta para a tomada de 
decisões assertivas, denominadas Business Intelligence. Essas informações geradas e coletadas podem 
ser utilizadas em ações preditivas, baseadas em históricos ou experiência adquirida pelos dispositivos 
e sistemas inteligentes.
 Saiba mais
Conheça melhor o que é o Business Intelligence e seus impactos em 
sistemas e dispositivos inteligentes acessando:
COMO o Business Intelligence funciona. Microsoft, [s.d.]. Disponível em: 
https://bit.ly/3CT4dPp. Acesso em: 18 jan. 2023.
8.4 TI verde e sustentabilidade
O crescimento da TI também deve englobar o crescimento econômico sustentável visando garantir 
que a natureza continue a fornecer os recursos ambientais dos quais o ser humano necessita para viver 
bem (AKABANE; POZO, 2020). A inovação verde é basicamente composta pela inovação de produtos 
denominados “verdes”, além da inovação dos processos que contenham alguma tendência sustentável. 
Para que ocorra a inovação de produtos ecológicos, é preciso que haja um estudo dos impactos tanto 
positivos quanto negativos ao meio ambiente e, obviamente, seu impacto no dia a dia das pessoas e 
da sociedade.
253
ARQUITETURA DE COMPUTADORES MODERNOS
Todas as pesquisas que envolvam a sustentabilidade na área de TI devem encontrar um equilíbrio 
entre a crescente demanda por recursos naturais e o meio ambiente. Isso pode trazer benefícios para um 
país que possua grandes recursos naturais como o Brasil. Em consonância com essa nova abordagem, 
observa‑se que existe uma demanda grande para a ecoinovação, seguindo temas propostos pela ONU 
(Organização das Nações Unidas) sobre as mudanças climáticas. Padrões de qualidade também são cruciais 
na melhoria dessa ecoinovação, contendo várias iniciativas e estratégias que estão sendo elaborados a 
fim de abordar os principais desafios na propagação da TI verde e motivar as pessoas a ter um consumo 
sustentável. Os principais programas que abordam esses temas contêm as seguintes métricas:
• Incentivar as pequenas e médias empresas (PMEs), que representam cerca de 98,5 % dos negócios 
registrados no Brasil, fornecendo diferentes instrumentos financeiros no incentivo de adoção 
da TI verde.
• Desenvolver uma infraestrutura que tenha uma análise do ciclo de vida dos softwares de uma 
empresa.
• Capacitação tanto dos colaboradores da empresa quanto dos fornecedores.
• Desenvolvimento tecnológico contínuo, orientado tanto pelo mercado quanto por órgãos (ONGs) 
que proponham o crescimento sustentável a longo prazo.
A implantação de inovações verdes em países emergentes como o Brasil é considerada um forte 
impulsor na expansão dos mercados e no desenvolvimento econômico e sustentável, de modo que vários 
mecanismos para acelerar a difusão desse pensamento “verde” estão sendo explorados cada vez mais.
A sustentabilidade social de um projeto também consiste na capacidade de proporcionar uma boa 
qualidade de vida aos seus usuários, gerando comunidades saudáveis e habitáveis, que proporcionem 
equidade, diversidade, conectividade e qualidade de vida. Essa condição social requer uma contínua 
manutenção por meio de valores compartilhados e direitos iguais aos seus componentes. Dessa forma, 
pode‑se argumentar que a sustentabilidade ambiental está associada aos conceitos de produção 
e consumo sustentáveis. Assim, a sustentabilidade ambiental de um projeto de, por exemplo, uma 
edificação, deve contemplar a capacidade de utilizar recursos naturais sem exceder sua capacidade 
regenerativa, protegendo o capital, evitando danos aos humanos e também ao ambiente. Isso pode 
significar a restrição do sistema econômico e humano dentro dos limites biofísicos do ecossistema 
global do qual uma determinada empresa depende.
Existem vários sistemas internacionais que constituem uma avaliação precisa no que se refere às 
edificações inteligentes, conforme ilustrado na figura a seguir:
254
Unidade II
Figura 212 – Edifício inteligente utilizando energia sustentável através de placas fotovoltaicas
Disponível em: https://bit.ly/3iH0ZaZ. Acesso em: 18 jan. 2023.
Segundo Pinheiro e Crivelaro (2020), deve‑se sempre levar em consideração (quando tratamos de 
edificações inteligentes) as seguintes etapas:
• Planejamento: a implantação do estudo do solo e as alterações da ecologia e biodiversidade do 
local da futura construção.
• Projeto: a eficiência energética e o uso de fontes renováveis.
• Operação: a conservação e o reúso dos meios e recursos naturais.
• Cargas ambientais: a poluição que será produzida.
• Qualidade do ambiente interno: a qualidade do acesso aos usuários.
• Qualidade dos serviços: o desempenho dos serviços, a usabilidade dos serviços, a sustentabilidade 
dos sistemas e os impactos aos edifícios vizinhos.
255
ARQUITETURA DE COMPUTADORES MODERNOS
• Sistema de gestão de qualidade: a melhoria do produto e dos serviços oferecidos, incrementando 
valores fornecidos no ciclo de vida do produto.
• Gestão ambiental: o incentivo à sustentabilidade.
• Responsabilidade social e desenvolvimento econômico: o relacionamento com a comunidade 
local e a sociedade como um todo.
 Saiba mais
Aprenda um pouco mais sobre TI verde e seus impactos na sociedade em:
CIRIACO, D. Tecnologia verde. TecMundo, 2009. Disponível em: 
https://bit.ly/3HfNyrO. Acesso em: 18 jan. 2023.
256
Unidade II
 Resumo
Nesta unidade, estudamos o quão importantes são as instruções 
de máquina para o pleno funcionamento de um computador. Vimos 
que as instruções são, em geral, tabeladas eusadas de acordo com sua 
funcionalidade, utilizando basicamente caracteres em base hexadecimal. 
Além disso, foi possível observar que os computadores podem ter um 
desempenho melhor se, em seu ciclo de funcionamento, houver interrupções 
simples ou múltiplas. Em se tratando da melhora no desempenho do 
processamento dos computadores, destacamos que o processo denominado 
pipeline pode otimizar o tempo total de processamento, executando as 
instruções em paralelo em vez de sequencialmente.
Foram apresentados conceitos sobre os dispositivos de E/S, como 
impressoras, monitores, mouse, teclado, entre outros. Aprendemos como se 
dão as comunicações entre os diferentes dispositivos periféricos com 
o computador.
Em seguida, abordamos conceitos específicos sobre as diferentes 
tecnologias envolvendo monitores de computadores LCD, LED etc.
De forma abrangente, foram discutidos alguns conceitos referentes ao 
processamento paralelo, além do pipeline. Foi possível visualizar melhorias 
implementadas como o superpipeline e o processamento superescalar, que 
ainda é empregado nos computadores contemporâneos.
Acentuaram‑se aspectos como o emprego de múltiplos núcleos nos 
processadores atuais e qual é o ganho em desempenho que esses vários 
núcleos podem oferecer, operando em conjunto com softwares capazes de 
processar paralelamente.
Pudemos entender um pouco mais sobre o que são sistemas embarcados 
e como essa tecnologia está presente em nosso dia a dia mesmo sem 
percebermos. Essa nova tecnologia permite que pessoas e dispositivos 
se comuniquem e possibilitem o envio e o recebimento de informações 
em tempo real através da internet (IoT), realizando o monitoramento dos 
próprios equipamentos assim como dos seres humanos.
Também foi possível entender que o uso desses sistemas embarcados 
está intrinsecamente ligado a casas e edifícios inteligentes que utilizam 
a tecnologia para o benefício dos usuários domésticos ou usuários em 
nível industrial de ambientes cada vez mais inteligentes. Essa tecnologia 
257
ARQUITETURA DE COMPUTADORES MODERNOS
também pode ser expandida não somente em casas e edifícios, cidades 
inteiras podem se beneficiar com seu uso.
Por fim, aprendemos a verdadeira importância da sustentabilidade 
no cotidiano das pessoas e das empresas, sobretudo no que se refere a 
métricas e preocupações que os governos do mundo inteiro estão impondo 
às empresas para que elas tenham uma consciência verde e se preocupem 
cada vez mais com o futuro do planeta.
258
Unidade II
 Exercícios
Questão 1. Leia o texto a seguir a respeito de periféricos de entrada e de saída.
A classe de dispositivos utilizados atualmente para a realização de operações de entrada e saída (isto 
é, que atuam na troca de informações tendo de um lado um computador e do outro usuários humanos 
do sistema) é bastante ampla e diversa, apresentando inúmeras características e operações. Entre elas, 
estão as elencadas a seguir.
• Impressoras: criam cópia em papel, ou similar, de textos e figuras. As impressoras variam em 
atributos, tendo como forma mais primitiva dispositivos que se assemelham a máquinas de 
escrever. Atualmente, as mais modernas usam como tecnologia a impressão a laser e podem 
imprimir até milhares de linhas por minuto.
• Monitores (ou telas): mostram textos e figuras, ambos podendo ser formatados de diversas 
maneiras e usar várias cores. O tipo mais clássico utiliza um tubo não muito diferente de um 
tubo de televisão (tubo de raios catódicos). Atualmente, também são aplicados visores de cristal 
líquido, que consomem menos energia.
• Dispositivos gráficos (ou plotters): criam cópias impressas de gráficos e curvas em papel. Com o 
avanço tecnológico, atualmente têm capacidade de produzir material gráfico de ótima qualidade. 
Os traçadores, dependendo de suas características, podem produzir desenhos com mais de um 
metro de largura e comprimento limitado pela bobina de papel.
• Dispositivos de exploração ótica: podem ler diretamente documentos. Entre os mais primitivos, 
pode‑se citar as leitoras óticas de cartões ou folhas de marcas (como as usadas no vestibular para 
registro das respostas). Atualmente, existem dispositivos bem mais complexos, como os scanners, 
que podem transferir para o computador imagens obtidas em figuras, textos e fotografias.
• Dispositivos de apontamento: podem indicar informações ao computador por meio do 
posicionamento de um cursor sobre a tela, como é o caso do mouse e da caneta luminosa 
(ou lightpen).
WEBER, R. F. Fundamentos de arquitetura de computadores. 
Porto Alegre: Bookman, 2012. p. 332 (com adaptações).
259
ARQUITETURA DE COMPUTADORES MODERNOS
Considerando esse contexto, avalie as asserções a seguir e a relação proposta entre elas.
I – Uma impressora multifuncional é considerada como um dispositivo tanto de entrada quanto 
de saída.
porque
II – Por meio dela, é possível tanto enviar informações ao sistema computacional como recebê‑las.
A respeito dessas asserções, assinale a alternativa correta.
A) As asserções I e II são proposições verdadeiras, e a asserção II é uma justificativa correta da I.
B) As asserções I e II são proposições verdadeiras, e a asserção II não é uma justificativa correta da I.
C) A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
D) A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
E) As asserções I e II são proposições falsas.
Resposta correta: alternativa A.
Análise das asserções
I – Asserção verdadeira.
Justificativa: um dispositivo de entrada é capaz de enviar informações do mundo exterior ao 
sistema computacional. Como exemplo, podemos citar o scanner. Um dispositivo de saída, por 
sua vez, é capaz de externalizar informações oriundas do sistema computacional. Como exemplo, 
temos uma impressora comum. Nesse contexto, uma impressora multifuncional é um dispositivo 
híbrido, dotado tanto de recursos de entrada (como o scanner) quanto de recursos de saída 
(a impressora em si).
II – Asserção verdadeira.
Justificativa: por meio de uma impressora multifuncional, é possível enviar informações ao 
computador, assim como receber informações do computador. Conclui‑se que a impressora 
multifuncional é um dispositivo híbrido justamente porque, por meio dela, é possível tanto enviar 
informações ao sistema computacional quanto receber informações dele. Logo, a asserção II é uma 
justificativa da asserção I.
260
Unidade II
Questão 2. (Idecan 2020, adaptada) No contexto de arquitetura e organização de computadores, 
existe o processador, que, de modo geral, é responsável por executar uma série de instruções 
dadas pela máquina. Considerando essas instruções, entre outros aspectos, um processador pode 
ser construído sob a linha de arquitetura CISC ou RISC. Considerando essas arquiteturas, assinale a 
alternativa correta.
A) Na arquitetura RISC, o processador possui um conjunto de instruções simples e limitado, sendo 
que cada instrução é executada em um ciclo de relógio (clock).
B) Na arquitetura CISC, o processador possui um conjunto de instruções complexas, sendo que cada 
instrução é executada em um ciclo de clock.
C) Na arquitetura RISC, o processador possui um conjunto de instruções complexas, e há a necessidade 
de vários ciclos de clock para executar cada instrução.
D) Na arquitetura CISC, o processador possui um conjunto de instruções simples, e há a necessidade 
de vários ciclos de clock para executar cada instrução.
E) Nas arquiteturas RISC e CISC, o processador não possui um conjunto de instruções, sendo que 
essas instruções devem ser fornecidas pela memória.
Resposta correta: alternativa A.
Análise das alternativas
A) Alternativa correta.
Justificativa: a linha de arquiteturas de computadores RISC (Reduced Instruction Set Computer, ou 
computador contendo um conjunto reduzido de instruções) abrange as arquiteturas de conjuntos de 
instruções que têm menor quantidade de instruções quando comparada à linha de arquiteturas CISC 
(ComplexInstruction Set Computer, ou computador contendo um conjunto complexo de instruções). 
Além disso, a linha RISC abrange arquiteturas que exibem as seguintes características: instruções de 
largura fixa, quantidade limitada de modos de endereçamento, modos de execução baseados em uso 
de pipeline e execução de cada instrução em apenas um ciclo do clock. Em resumo, em um processador 
cuja arquitetura segue a linha RISC, o processador possui um conjunto de instruções simples e limitado, 
sendo que cada instrução é executada em um ciclo de clock.
B) Alternativa incorreta.
Justificativa: o processador cuja arquitetura do conjunto de instruções segue a linha CISC apresenta 
diversas instruções de comprimentos variados. Nesse caso, espera‑se que cada instrução seja executada 
em múltiplos ciclos de clock.
261
ARQUITETURA DE COMPUTADORES MODERNOS
C) Alternativa incorreta.
Justificativa: em uma arquitetura de linha RISC, o processador não possui um conjunto de instruções 
complexas.
D) Alternativa incorreta.
Justificativa: em uma arquitetura de linha CISC, o processador não possui um conjunto de instruções 
simples.
E) Alternativa incorreta.
Justificativa: cada processador, necessariamente, possui um conjunto de instruções, que corresponde 
ao conjunto de operações primitivas que ele consegue realizar.
262
REFERÊNCIAS
Textuais
AKABANE, G. K.; POZO, H. Inovação, tecnologia e sustentabilidade: histórico, conceitos e aplicações. 
São Paulo: Érica, 2020.
ALECRIM, E. Processadores: fabricação, miniaturalização e encapsulamento. Infowester, 2009. 
Disponível em: https://bit.ly/3GU25YC. Acesso em: 18 jan. 2023.
ANIDO, R. Linguagens de montagem. 9. ed. Rio de Janeiro: Elsevier, 2016.
BLUM, J. Explorando o Arduino: técnicas e ferramentas para mágicas de engenharia. Rio de Janeiro: 
Altabooks, 2016.
CAMARGO, C. Smart Grid: a rede elétrica inteligente. TecMundo, 2009. Disponível em: https://bit.ly/2SGeuF4. 
Acesso em: 18 jan. 2023.
CARTER, N. Arquitetura de computadores. Porto Alegre: Bookman, 2002.
CIRIACO, D. Como funcionam os monitores LCD. Canaltech, 6 maio 2009. Disponível em: https://bit.ly/3ZGaszL. 
Acesso em: 17 jan. 2023.
CIRIACO, D. Tecnologia verde. TecMundo, 2009. Disponível em: https://bit.ly/3HfNyrO. Acesso em: 18 jan. 2023.
CLEMENTS, A. Computer organization and architecture: therms and variations. Stamford: Cengage, 2014.
COMO o Business Intelligence funciona. Microsoft, [s.d.]. Disponível em: https://bit.ly/3CT4dPp. Acesso 
em: 18 jan. 2023.
CRIADO disco óptico que armazena dados em cinco dimensões. Inovação Tecnológica, 2009. Disponível 
em: https://bit.ly/3GS7QGh. Acesso em: 18 jan. 2023.
DELGADO, J.; RIBEIRO, C. Arquitetura de computadores. Rio de Janeiro: LTC, 2014.
DESCOBERTA vulnerabilidade nos processadores com hyper‑threading. Inovação Tecnológica, 2005. 
Disponível em: https://bit.ly/3XmJPyk. Acesso em: 18 jan. 2023.
EDWARDS, E.; LEUNG, K. Memory. [s.d.]. Disponível em: https://bit.ly/3IWNPkz. Acesso em: 19 jan. 2023.
EVOLUÇÃO dos computadores. Brasil Escola, 2022. Disponível em: https://bit.ly/3HbWtuc. Acesso 
em: 17 jan. 2023.
263
FOROUZAN, B.; MOSHARRAF, F. Fundamentos da ciência da computação. São Paulo: 
Cengage Learning, 2012.
FREIBERGER, P. A. Von Neumann machine. Encyclopedia Britannica, 2022. Disponível em: https://
bit.ly/3XnAoyH. Acesso em: 18 jan. 2023.
HELERBROCK, R. Grafeno. Mundo Educação, [s.d.]. Disponível em: https://bit.ly/3wfkYQU. Acesso 
em: 18 jan. 2023.
IDOETA, I. V.; CAPUANO, F. G. Elementos de eletrônica digital. 40. ed. São Paulo: Érica, 2011.
JORDÃO, F. Tabela de processadores Intel. TecMundo, 2013. Disponível em: https://bit.ly/3GPuTBG. 
Acesso em: 18 jan. 2023.
JUNIPER Research aponta Xangai como a cidade mais inteligente. Infor Chanel, 2022. Disponível em: 
https://bit.ly/3krWOQD. Acesso em: 19 jan. 2023.
MCROBERTS, M. Arduino básico. São Paulo: Novatec, 2013.
MONTEIRO, M. A. Introdução à organização de computadores. 5. ed. Rio de Janeiro: LTC, 2019.
MOORE, G. Cramming more components onto integrated circuits. Electronics, v. 38, n. 8, abr. 1965. 
Disponível em: https://intel.ly/2OZhsWY. Acesso em: 18 jan. 2023.
NICOLOSI, D. E. C. Microcontrolador 8051 detalhado. 9. ed. São Paulo: Érica, 2013.
NOVO hardware acelera comunicação em processadores <i>multicore</i>. Inovação Tecnológica, 
2011. Disponível em: https://bit.ly/3ZM8vBR. Acesso em: 18 jan. 2023.
NULL, L.; LOBUR, J. Princípios básicos de arquitetura e organização de computadores. Porto 
Alegre: Bookman, 2010.
OLIVEIRA, J. Intel anuncia CPUs de 11ª geração de alto desempenho para notebooks gamer. Canaltech, 
11 maio 2021. Disponível em: https://bit.ly/3XhIl8q. Acesso em: 18 jan. 2023.
PANNAIN, R.; BEHRENS, F. H.; PIVA JR., D. Organização básica de computadores e linguagem de 
montagem. São Paulo: Elsevier, 2012.
PINHEIRO, A. C. F. B.; CRIVELARO, M. Edificações inteligentes: smart buildings para smart cities. 
São Paulo: Érica, 2020.
PROCESSAMENTO paralelo chega aos computadores de mesa. Inovação Tecnológica, 2007. Disponível 
em: https://bit.ly/3GJqtfu. Acesso em: 18 jan. 2023.
264
O QUE é endereço IP – definição e explicação. Kaspersky, [s.d.]. Disponível em: https://bit.ly/3CUaN8c. 
Acesso em: 18 jan. 2023.
O QUE é HD (disco rígido): características e como funciona. Infowester, [s.d.]. Disponível em: 
https://bit.ly/3kmldXH. Acesso em: 19 jan. 2023.
O QUE é M2M? Veja o que significa o conceito da ‘comunicação das máquinas’. Techtudo, 2013. 
Disponível em: http://glo.bo/3WqFicO. Acesso em: 18 jan. 2023.
O QUE é memória cache? Entenda sua importância para o PC. Techtudo, 2022. Disponível em: http://
glo.bo/3QTlwpo. Acesso em: 18 jan. 2023.
O QUE é memória ROM? Techtudo, 2012. Disponível em: http://glo.bo/3HczPSG. Acesso em: 18 jan. 2023.
ROTMAN, D. We’re not prepared for the end of Moore’s Law. Technology Review, 2020. Disponível em: 
https://bit.ly/3Wu0yi4. Acesso em: 18 jan. 2023.
SAIBA quais são as diferenças entre compilador e interpretador. S.O.S. Digital, 2021. Disponível em: 
https://bit.ly/3kgqpfK. Acesso em: 18 jan. 2023.
SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Fundamentos de sistemas operacionais. 9. ed. Rio de 
Janeiro: LTC, 2015.
SODERSTROM, T. How to choose the right memory: a 2020 guide to DRAM. Tom’s Hardware, 2020. 
Disponível em: https://bit.ly/2MacOBV. Acesso em: 18 jan. 2023.
STALLINGS, W. Arquitetura e organização de computadores. São Paulo: Pearson, 2010.
STEVAN JR, S. L. Internet das coisas: fundamentos e aplicações em Arduino e NodeMCU. São 
Paulo: Érica, 2018.
TANENBAUM, A. S. Sistemas operacionais modernos. São Paulo: Pearson, 2010.
TANENBAUM, A. S.; AUSTIN, T. Organização estruturada de computadores. São Paulo: Pearson, 2013.
TOCCI, R. J.; WIDMER, N. S.; MOSS, G. L. Sistemas digitais: princípios e aplicações. São Paulo: Pearson, 2011.
ULTRAMAGNETRON: gravação magnética à velocidade da luz. Inovação Tecnológica, 2014. Disponível 
em: https://bit.ly/3WmtKat. Acesso em: 19 jan. 2023.
UPTON, E.; HALFACREE, G. Rapsberry Pi: manual do usuário. São Paulo: Novatec, 2013.
VIANA, A. L. S. Um pouco sobre RAID – configuração via software e via hardware. DevMedia, 2012. 
Disponível em: https://bit.ly/3HglwfM. Acesso em: 18 jan. 2023.
265
266
267
268
Informações:
www.sepi.unip.br ou 0800 010 9000

Mais conteúdos dessa disciplina