Upload
daniel-marins
View
80
Download
6
Embed Size (px)
Citation preview
Arquitetura de Computadores
Osmar Ventura
Disciplina: Arquitetura de Computadores
1
Sumário
UNIDADE 1 3
Introdução ao estudo da arquitetura de computadores 3Introdução 3Surgimento e evolução dos computadores 6Arquitetura de computadores 11Conceitos complementares 13Referências 17
UNIDADE 2 19
Sistemas de numeração 19Introdução 19Sistemas de numeração posicionais 20Base de um sistema de numeração 20Representação binária 22Representação em octal e em hexadecimal 24Conversões entre bases numéricas 25Referências 32
UNIDADE 3 33
Representações numéricas 33Representação de números inteiros (ponto fixo) 33Representação de números no formato complementar 39Representação de números negativos em complemento a base 46Representação de números reais 52Representação IEEE 754 para números em ponto flutuante 54Referências 58
UNIDADE 4 59
Sistemas digitais 59Circuitos lógicos 59Porta lógica 60Nível lógico 61Expressões boolianas 61Tipos de circuitos lógicos 66Referências 70
Professor: Osmar Ventura
2
UNIDADE 5 71
Organização básica de um computador 71Modelo de máquinas 71Bloco dos dispositivos de I/O 73Bloco de memória principal 73Estrutura interna da UCP e funções 76Principais blocos lógicos que compõem uma UCP 80Funcionamento da UCP 82Referências 84
UNIDADE 6 85
Classificação do conjunto de instruções 85Processamento monociclo e multiciclo85RISC versus CISC 90Referências 94
UNIDADE 7 95
Desempenho de computadores 95Medidas de desempenho 95Avaliando um sistema computacional 96Uso de pipeline 102Uso de memória cache 107Periféricos 110Referências 112
Disciplina: Arquitetura de Computadores
3
UNIDADE 1 Introdução ao estudo da arquitetura de computadores
Objetivos:
Apresentar e discutir os conceitos iniciais da computação; conhecer e entender o processo evolutivo dos computadores; compreender a necessidade e a importância de domínio da matemática no âmbito computacional; conhecer modelos abstratos que podem representar um computador moderno; permitir análise funcional dos modelos abstratos de computadores.
IntroduçãoNo estudo de Arquitetura de Computadores, será necessária a apresentação e o refinamento de
alguns conceitos e definições acerca da computação. Inicialmente serão trabalhados os conceitos
e definições do nosso objeto de estudo: o computador. Posteriormente, o termo arquitetura
será discutido e então associado ao objeto computador.
Provavelmente o computador é um dos inventos mais maravilhosos do homem. Atualmente existem
diversos tipos de computadores nas mais variadas aplicações. Contudo, sua função inicial era
bastante primitiva, ou seja, era usado somente para efetuar cálculos matemáticos básicos, como
adição e subtração.
Pode-se considerar que a história da criação e evolução dos computadores começa na
Antiguidade, juntamente com a necessidade dos homens efetuarem contas. Registros históricos
dão conta de que, quando os pastores buscavam uma forma de contar e armazenar o
número de ovelhas do seu rebanho, usavam pequenas pedras, denominadas “calculus”,
para representar cada uma de suas ovelhas. Tais “calculus” eram então armazenados
em uma bolsa de couro e, em um determinado momento, as pedras armazenadas nas
bolsas eram comparadas com cada uma das ovelhas do rebanho. Sobrando “calculus”,
significava que havia perda de ovelhas; faltando, indicava que o rebanho, de uma forma
ou outra, crescera.
Nesse contexto, podemos entender a origem da palavra “calcular”, que nada mais é do que
o simples fato de juntar pedras e compará-las com algum outro objeto. É claro que hoje, ao
pensarmos em calcular algo, contamos com a formalidade da matemática para regulamentar
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
4
a relação de quantidade e, mais especificamente, numérica entre elementos. Na verdade,
hoje temos uma matemática que define algo além do que simplesmente contar e comparar.
À medida que a humanidade foi evoluindo, a necessidade de efetuar cálculos foi aumentando
em importância e dificuldade. Gradativamente foram surgindo operações matemáticas mais
complexas para suprir determinadas necessidades que somente as operações elementares
como somar, subtrair, multiplicar ou dividir não eram suficientemente capazes de atender.
Nesse processo de evolução, o homem sempre desejou usar alguma ferramenta para ajudar
na execução dos cálculos. A primeira ferramenta conhecida e usada para calcular denomina-
se ábaco (Figura 1) e foi criada há aproximadamente 5.500 anos, na Mesopotâmia. Sua forma
principal era baseada em uma tábua com marcações especiais indicando as classes numéricas
(dezena, centena, milhar etc.) e um sistema de representação numérica que considerava a
quantidade de “calculus” em cada marcação. A movimentação das pedras ou outro elemento,
como botões de ossos, esferas, contas, entre cada uma das classes representa efetivamente a
execução das operações matemáticas.
Figura 1: Ábaco Fonte: Disponível em: <http://goo.gl/ZFQ9G>.
Acesso em: 12 mai. 2012.
Então, seguindo a tendência de desenvolver
dispositivos que auxiliassem no processo
de cálculos matemáticos, foram projetadas
e construídas diversas máquinas com
esse propósito. Tais máquinas inicialmente
eram chamadas de computadores,
apesar de algumas realizarem somente as
quatro operações matemáticas básicas
ou somente funções muito específicas.
Podem-se classificar tais máquinas como
Computadores de Propósitos Específicos. Ao longo do processo de evolução tecnológica
e científica, e até mesmo seguindo uma tendência mais revolucionária, os projetistas de
computadores desenvolveram máquinas que podem ser adaptadas às mais variadas
funções, o que, de certa forma, cria uma segunda classe de computadores denominada de
Computadores de Propósito Geral.
Atualmente, o termo Computador de Propósito Específico foi substituído por outros substantivos
que designam uma função primária para o dispositivo ou máquina, por exemplo, calculadora,
celular, videogame, tablet. Ao longo do tempo, o termo Computador de Propósito Geral vem
sendo substituído simplesmente por computador. Assim, deve-se entender que todos os
Disciplina: Arquitetura de Computadores
5
sistemas que se baseiam em operações matemáticas são, na sua essência, computadores,
podendo diferir somente quanto a sua aplicação (genérica ou específica).
Figura 2: Computador Fonte: Disponível em:
<http://goo.gl/ABequ> Acesso em: 12 mai. 2012.
Figura 3: Vídeo-Game AtariFonte: Disponível em:
<http://goo.gl/ABequ> Acesso em: 12 mai. 2012.
Uma segunda abordagem quanto à classificação dos computadores aponta para a modalidade
de processamento numérico, podendo um computador ser classificado em analógico e/ou
digital. Computadores analógicos operam por comparações; normalmente utilizam aparatos
mecânicos para efetuar o posicionamento de engrenagens ou ponteiros. A fim de efetuar a
leitura ou o processamento dos dados em um computador analógico, o sistema deverá possuir
uma marca de referência para todas as suas variáveis e, na computação, considerar a sua
relação com a posição do marcador/ponteiro. Pode-se tomar como exemplo de computador
analógico um termômetro a mercúrio, ou um relógio com ponteiros, bem como uma régua
plástica usada para efetuar medidas.
Figura 4: Termômetros digital e analógico
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
6
Por outro lado, encontram-se os computadores digitais, que se caracterizam por efetuarem
os processamentos sem a necessidade de referências ou marcações entre os elementos
que envolvem uma determinada operação matemática. Os computadores digitais necessitam
somente das regras que estabelecem as relações entre os elementos (operandos) de cada
operação matemática. Ainda, nos computadores digitais, para mostrar ou representar o valor de
um determinado dado, por exemplo, o número 2, basta apresentar um símbolo que previamente
foi associado ao algarismo em questão. Pense em um termômetro digital, pelo qual o usuário, ao
efetuar a leitura da temperatura, simplesmente identifica o valor através do símbolo apresentado
em uma unidade de saída apropriada. Nos computadores digitais, assim como nos analógicos,
para indicar um determinado algarismo, será necessário simplesmente representar o número
através da tecnologia adotada para implementação do sistema.
Ao contrário do que muitos pensam, os computadores digitais não são 100% implementados
com tecnologia puramente digital, existe sempre pelo menos uma pequena unidade que opera
no modelo analógico e cuja interação com o restante dos blocos que compõem o computador
digital depende de um processo de conversão, seja de analógico para digital (A/D), seja de
digital para analógico (D/A). Ainda sob essa ótica, deve-se considerar que o mundo real é
essencialmente de natureza analógica e que, se os computadores foram desenvolvidos para
facilitar ou auxiliar os homens em alguma tarefa, ao empregar um computador digital em uma
tarefa específica, deve-se adequar os sinais entre o computador e o mundo externo, o que deve
passar pelo processo de conversão A/D ou D/A.
Como tecnologicamente os computadores digitais evoluíram de forma mais significativa do
que os computadores analógicos, pela facilidade de implementação e custos mais baixos, a
história da computação se fez, em sua maior parte, através de modelos de computadores digitais.
Dessa forma, o escopo da disciplina “Arquitetura de Computadores” engloba somente
os computadores digitais, apesar de, recentemente, modernas tecnologias, como a
nanotecnologia, possibilitarem o projeto de computadores analógicos mais funcionais, de
desempenho e aplicações superiores aos digitais.
Surgimento e evolução dos computadoresBlaise Pascal constrói, em 1642, uma máquina de calcular denominada Pascaline, com
engrenagens mecânicas que permitiam efetuar operações de soma e subtração. Era um
Disciplina: Arquitetura de Computadores
7
dispositivo que operava no sistema decimal e que foi construído para auxiliar no processo
de cálculo de impostos para o governo francês. A máquina encontra-se exposta no Museu
de Artes e Ofícios de Paris.
Figura 5: PascalineFonte: Disponível em:
<http://goo.gl/ABequ>. Acesso em: 12 mai. 2012.
Em 1801, Joseph Marie Jacquard inventa
e constrói um sistema mecânico que
usa cartões perfurados (metálicos)
para codificar operações repetitivas de
comando de teares, transformando parte
do processo de controle das máquinas
em automático. Daí surgiu a ideia de
programar as máquinas de tecer para
produzir padrões de cores diferentes.
A ideia de Jacquard influencia o francês Charles Babbage a projetar uma máquina de calcular
cujo processo de cálculo pudesse ser controlado por cartões. Então, em 1822, Babbage
publica um trabalho intitulado “Differential Engine”, no qual apresenta os princípios para a
construção de uma máquina que pudesse efetuar operações algébricas: o programa deveria
residir na própria máquina, os resultados intermediários de cálculo deveriam ser armazenados
na própria máquina. Deveriam existir, ainda, dispositivos que permitissem a introdução dos
dados e visualização dos resultados.
Tal máquina não pôde ser totalmente construída por Babbage por limitações tecnológicas da
época. Trabalhou junto com ele Ada Byron King, também chamada de Ada Lovelace, historicamente
conhecida como a primeira programadora, pois desenvolvia programas para a máquina que estava
sendo projetada por Babbage. Ada contribuiu para a computação apresentando os conceitos
de subrotina, uma sequência de instruções que pode ser usada várias vezes; loop, estrutura
que permite a repetição de uma série de cartões; salto condicional, que permite saltar um
ou mais cartões caso uma condição seja satisfeita. Todos esses conceitos são base da
computação moderna.
Em 1854, George Boole propõe e apresenta uma nova Álgebra (Álgebra Booleana), tendo
por base a aplicação de operadores lógicos (E, OU, NÃO) a elementos algébricos. Herman
Hollerit, em 1886, inventa um sistema para codificação de letras, algarismos e símbolos, sob a
forma de perfurações realizadas em um cartão de papel, e constrói máquinas eletromecânicas
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
8
(tabuladoras) que, mediante um programa armazenado externamente, realizam a leitura dos
dados dos cartões e efetuam cálculos com os dados lidos, de modo a obter resultados sob formas
previamente programadas.
A utilização deste tipo de máquina sofre grande expansão ao longo dos anos, quando
acopladas a calculadoras eletromecânicas (mais tarde foram usadas válvulas eletrônicas),
interpretadoras, separadoras/intercaladoras e impressoras. Existiam equipamentos
especializados para operações específicas, por exemplo, a separadora/intercaladora de
cartões perfurados, as quais funcionavam com programas fixos. Para agrupar em ordem
crescente um conjunto de cartões com um código de 5 algarismos, era necessário repetir
a operação 5 vezes: uma vez para cada coluna perfurada. A construção e comercialização
de tabuladoras deu origem à criação de grandes Empresas nos Estados Unidos, como, por
exemplo, a IBM - International Business Machines.
Em 1936 o alemão Konrad Zuse apresenta o primeiro computador eletromecânico, denominado
Z1. O computador executava cálculos lidos em fitas perfuradas (Figura 6).
Figura 6: Z1Fonte: Disponível em:
<http://goo.gl/ABequ>. Acesso em: 12 mai. 2012
Howard Aiken produz, em 1944, um
computador baseado nos conceitos da
máquina de Babbage. De codinome
Harvard Mark I, era um computador
totalmente eletromecânico, construído
através de uma parceria entre a Universidade
de Harvard e a IBM para a Marinha
Americana, que desejava uma calculadora
de tabelas para uso na navegação.
Paralelamente ao desenvolvimento do Mark I, sob a liderança dos engenheiros J. Presper
Eckert e John Mauchly e com o patrocínio do Exército Americano, em 1946 é construído
o primeiro computador a válvulas da história, o ENIAC – Eletronic Numeric Integrator and
Calculator. Ele foi projetado para auxiliar no cálculo de trajetórias balísticas. A programação do
ENIAC era realizada através de reconexão dos fios de um painel principal, e os ajustes dos
dados eram efetuados por botões rotativos localizados em diversos outros painéis.
Disciplina: Arquitetura de Computadores
9
Figura 7: ENIACFonte: Disponível em:
<http://goo.gl/SGXZl>. Acesso em: 12 mai. 2012.
O Professor John Von Neumann publica,
em 1946, um trabalho intitulado “Electronic
Discrete Variable Automatic Computer”,
em que apresenta uma organização lógica
otimizada para o projeto e desenvolvimento
de computadores, a qual é usada até hoje
nos projetos de computadores sendo
conhecida como Arquitetura de Von Neumann.
A estrutura apresentada é formada pela Unidade
Central de Processamento (CPU ou UCP),
que contém a Unidade Lógica e Aritmética. Externamente a essa UCP, existe o conjunto de dispositivos
denominados genericamente de periféricos e uma unidade de memória de programas e dados. Von
Neumann ainda apresentou outras ideias, o que para a época foi um salto significativo.
Uma segunda ideia foi a proposta de implementar um computador que funcionava com o conceito de
programa armazenado, em contraste ao modelo usado na época, em que o programa era lido diretamente
do dispositivo de entrada e saída, painéis de cabos e conectores. Uma terceira proposta estava relacionada
com a redução do volume de cabos e fios usados nos computadores; a ideia era empregar o sistema
numérico binário em detrimento do decimal. A redução está relacionada na escala de 10:1 pares de fios,
ou seja, para representar números de dois dígitos decimais, eram necessários 10 pares de fios usando o
sistema decimal; para o sistema binário, é necessário usar no máximo 4 pares para representar os mesmos
números. E, ainda com a utilização do sistema binário, a implementação das propostas de Boole era
tecnologicamente mais adequada. Considerando todas as propostas de Von Neumann, em 1946 iniciou a
construção do computador EDVAC, que entrou em operação em 1951.
Figura 8: Arquitetura de Von Neumann
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
10
Uma abordagem alternativa a proposta por Von Neumann, é a chamada Arquitetura Harward, diferindo apenas na configuração e acesso a Unidade de Memória, que passa a ser tratada de forma segmentada, ou seja, uma unidade para armazenamento de dados e outra para armazenamento de programas. Esta alternativa apresenta uma melhoria no desempenho, mas
incrementando o custo de produção do computador.
Memória de dados
Memória de Instruções
Dispositivos de eENTRADA SAÍDA
UCP / CPU
Figura 9: Arquitetura Harward
Em 1948, nos Laboratórios BELL, nos Estados Unidos, é descoberto o transistor, que contribuirá, a
partir de 1960, para a miniaturização dos circuitos eletrônicos, para a redução do volume físico dos
computadores, para o aumento do desempenho computacional e a popularização dos computadores.
No final da década de 1970 e início dos anos 1980, Clive Sinclair, no Reino Unido, concebe
um computador minúsculo denominado ZX81, que integra na sua máquina um interpretador
para uma linguagem de programação (BASIC - Beginers All-purpose Symbolic Instruction
Code), utilizando como periféricos, além de um teclado de membrana, um receptor de TV
e um gravador de “cassetes” musical para gravar os dados. A capacidade da memória desse
computador era cerca de 8 vezes maior que a do ENIAC. Paralelamente, Steven Jobs e Steven
Wozinak, nos E.U.A., concebem, segundo os mesmos princípios de miniaturização, facilidade
de utilização e baixo preço, um computador que denominam Apple I.
Vários fabricantes iniciam, nessa época, a produção em larga escala de computadores de uso
pessoal, de fácil utilização e baixo preço. O computador transforma-se num bem para consumo.
Não se pode desconsiderar que, ao longo do processo de evolução e disseminação dos
computadores, não foi somente o hardware que recebeu uma atenção especial da indústria; o
desenvolvimento de softwares cresceu em número, grau e tecnologia. É interessante observar
que, no início do século XIX, não existia tecnologia para a implementação da máquina de
Disciplina: Arquitetura de Computadores
11
Babbage e que vários conceitos de desenvolvimento de software já estavam sendo cunhados,
e os mesmos conceitos são utilizados até hoje. Fica um pergunta: relacionando a evolução
do software e do hardware, qual deles está mais avançado? Com o processo de evolução do
software, é possível estudar, entender e implementar um computador em camadas ou níveis.
Arquitetura de computadoresO termo Arquitetura de computadores é usado para descrever todos os atributos de um
computador que são visíveis ao programador, por exemplo, o conjunto de instruções válidas
para uma determinada máquina, o número de bits usados para a representação de dados, os
mecanismos de acesso aos dispositivos de entrada e saída, as técnicas de endereçamento de
memória, o número de unidades aritméticas de um computador, entre outros atributos. Pode-se
considerar que a arquitetura descreve como será a interseção entre o hardware e o software,
para ilustrar melhor este conceito, considere que um computador pode ser subdividido em
partes dispostas hierarquicamente em diversos níveis, onde a complexidade em termos de
implementação do nível mais baixo não é visível para o nível superior.
Nível 4 Nível da linguagem do montador
Nível 5Nível das linguagens
orientadas para solução de problemas
Nível 3 Nível do sistema operacional
Nível 2Nível da arquitetura do
conjunto de instruções (ISA)
Nível 0 Nível lógico digital
Nível 1 Nível da microarquitetura
Computador de seis níveis
Figura 10: Computador de seis níveis
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
12
Pela figura acima, é apresentado um computador que estrategicamente foi subdividido
em 6 níveis. O nível mais baixo, Nível 0, representa o verdadeiro hardware da máquina,
são os circuitos eletrônicos que executam efetivamente cada instrução da máquina,
neste nível os elementos estudados/avaliados são chamados de portas lógicas e quando
tratados individualmente, realizam funções elementares padrão (AND, OR, NOT). O Nível 0
é comumente chamado de Nível Lógico Digital.
No Nível de micro arquitetura, os elementos são uma combinação de portas lógica, os quais
conceitualmente efetuam funções lógicas mais elaboradas. Coisa do tipo, somadores aritméticos,
comparadores, registradores são exemplos dos elementos que estão presentes no Nível 1.
Como no Nível 1 é possível encontrar blocos lógicos capazes de efetuar diversas operações,
como por exemplo, uma adição, é interessante abstrair toda a complexidade que envolve a
execução desta operação, esquecendo efetivamente do circuito eletrônico, da existência
de portas lógicas e simplesmente, definir um código representa toda a operação de
adição. Assim é formado o Nível 2, ou seja, de códigos que representam efetivamente
cada operação que pode ser realizada pelo hardware. Neste nível é definido a linguagem
de máquina de um determinado computador, sendo denominado Nível de Arquitetura do
Conjunto de Instruções (ISA – Instruction Set Architecture). Deve-se observar que o projeto
de qualquer computador começa pela definição do conjunto de instruções do mesmo. É
neste nível que se concentra o estudo da disciplina Arquitetura de Computadores.
O Nível de Sistema Operacional da Máquina esconde a complexidade de entendimento de
hardware e de funcionalidades especificas do computador, como por exemplo, como deve
ser efetivamente o processo de leitura e escrita em uma unidade de armazenamento em
massa. Neste nível, Nível 3, são tratados funcionalidades operacionais que permitem o uso
dos recursos de hardware por grande parte dos usuários.
Finalizando, os níveis 4 e 5, Nível de linguagem de montagem e Nível de linguagem
orientado a problemas, respectivamente, possibilita que usuários mais avançados possam
desenvolver ferramentas/aplicações que fazem do computador uma poderosa ferramenta
para a solução de problemas. A visão do computador através deste nível é mais sofisticada
e não apresenta toda a complexidade dos circuitos eletrônicos.
Disciplina: Arquitetura de Computadores
13
SOFTWARE
ARQUITETURA
HARDWARE
Figura 11: Visão geral de arquitetura
A Organização de computadores é
um termo usado para descrever
como as características arquiteturais
de um determinado computador são
implementadas fisicamente, em termos de
sinais elétricos, interfaces entre unidades
operacionais, tecnologias de memórias,
entre outras. Para entender melhor esse
conceito, a definição de implementação
do subsistema eletrônico que efetua
a multiplicação passa pela escolha do uso de uma unidade especializada, dedicada à
multiplicação, ou o processo de multiplicação é efetuado através de somas sucessivas;
a escolha da forma de implementação é um problema típico tratado em organização de
computadores. E, ainda, a escolha da tecnologia base de implementação do banco de
memória principal do computador, entre memórias estáticas e dinâmicas, é uma característica
organizacional e não arquitetural de um computador.
Conceitos complementaresAbaixo são apresentados alguns conceitos necessários ao entendimento da disciplina Arquitetura
de Computadores.
Hardware: palavra usada para relacionar toda estrutura física empregada na construção de um
computador. As características visuais, mecânicas e elétricas são definições encontradas no
hardware de uma determinada máquina. Até os anos 1980, o hardware desenvolvido para um
computador não era compatível com o hardware de outro computador, mesmo entre computadores
de um mesmo fabricante. Atualmente, existem padrões de desenvolvimento e compatibilidade de
hardwares, sendo possível usar um teclado fornecido pelo “Fabricante X” tanto no “computador
A” quanto no “computador B”.
Software: termo empregado para relacionar todos os elementos abstratos que envolvem
o comportamento e o uso dos computadores. O software não possui características
visuais definidas, ou melhor, não existe uma única forma de ser representado fisicamente.
O formato visual do software depende da experiência e envolvimento com o uso de
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
14
computadores. Ao falar sobre o software “Windows” a uma pessoa que não trabalha
diretamente com computadores, ela pode imaginar a tela padrão desse software que
é freqüentemente mostrada pelos agentes de marketing, como sendo o “Windows”.
Por outro lado, se a pessoa envolvida trabalha com vendas de produtos de informática,
pode imaginar, por exemplo, a caixa que contém o produto e que é entregue aos
compradores. Não obstante tudo isso, uma pessoa que trabalha com o desenvolvimento
do software “Windows”, ao falar sobre ele, pode imaginar uma tela de computador
com uma seqüência grande de frases apresentadas em um editor de textos. O que
se quer dizer com tudo isso é que o software não possui uma identidade visual padrão,
não é possível visualizar a sua estrutura física, nem mesmo tocá-lo, contudo é possível
desenvolver um software e simplesmente usá-lo. Assim, o software pode ser classificado
conforme o seu relacionamento direto com o hardware ou com o usuário do computador.
Os softwares são classificados como básico, quando foram desenvolvidos para controlar
diretamente um determinado hardware. Por outro lado, o software que foi concebido para
relacionar ou facilitar a operação do computador pelo usuário é classificado como software
utilitário. São exemplos de softwares básicos os sistemas operacionais Windows, Linux, Mac
OS, Android; os drivers de dispositivos como impressoras, scanners, câmeras fotográficas,
pendrive; tradutores e compiladores de linguagens para desenvolvimento de softwares;
firmwares, softwares que vêm gravados em alguns dispositivos eletrônicos (Ipod, televisão,
micro-ondas etc.) e que são comumente denominados de BIOS. Os softwares usado para
navegar pela Internet (Firefox, Chrome, Internet Explorer), copiar um arquivo em um pendrive,
ouvir músicas no computador são exemplos de softwares utilitários.
Programa: denominação técnica mais específica de software, que representa os elementos usados
para descrever o comportamento esperado de um computador, ou seja, o que efetivamente o
computador deverá executar em função do tempo e das variáveis de controle do próprio programa.
Num nível mais baixo, entende-se como a descrição da sequência de operações matemáticas,
instruções, que um determinado computador deverá executar para desempenhar uma
tarefa. Essa descrição deverá seguir uma ordem lógica e uma formalidade em suas
sentenças, o que por sua vez caracteriza uma linguagem de programação de computadores.
A linguagem nativa de um computador é chamada de “Linguagem de Máquina”, a qual
pode ser representada por um sequência de zeros e uns (0’s e 1’s) ou mesmo um gráfico
de sinais elétricos. Essa linguagem é considerada a linguagem de mais baixo nível, por estar
relacionada diretamente com o hardware do computador. Visando facilitar o desenvolvimento
Disciplina: Arquitetura de Computadores
15
de softwares, diversos outros níveis e tipos de linguagens foram desenvolvidos, cada um com
características específicas e voltado para uma determinada classe de problema (financeiro,
científico, manipulação de textos etc.), bem como uma maior facilidade de manipulação por
parte do programador, já que programar pensando somente em uma seqüência de zeros e
uns é bastante tedioso e demorado. Como na verdade o computador só entende/executa
instruções na linguagem de máquina, é necessário transformar um programa descrito em
uma linguagem diferente da linguagem nativa de um computador na linguagem de máquina
própria do computador que irá executar o programa (linguagem de máquina). Para efetuar
essa transformação, são utilizados programas tradutores e/ou interpretadores de linguagens
de programação de computadores, o que, de certa forma, permite mudar o nível ou tipo de
linguagem de um programa, bem como adequar um software à linguagem nativa de um
determinado computador.
Tradutor: transforma ou converte o programa descrito na “Linguagem X” para a “Linguagem Y”.
A tradução não é executada parcialmente, o programa descrito na nova linguagem só é gerado
após a tradução de todo o programa na linguagem origem. Assim, para executar o programa
na nova linguagem, o processo de tradução deverá ter sido encerrado com sucesso, sendo
que, de outra forma, o novo programa não é criado. Somente após a criação do programa na
nova linguagem é que ele poderá ser executado pelo computador. Como exemplo de tradutor,
podem-se destacar os compiladores da “Linguagem C” (Dev-C++). Deve-se observar que
o processo de compilação é mais complexo do que parece, e não é assunto abordado no
contexto de arquitetura de computadores.
Interpretador: processo que pode ser implementado por software ou diretamente por
hardware. O interpretador não gera um novo programa, ele simplesmente transforma e
imediatamente executa cada instrução do programa na linguagem origem diretamente na
linguagem destino. Erros no processo de interpretação podem ocorrer, ocasionando ou não
a parada do processo; isso depende exclusivamente da implementação do interpretador.
Diferentemente do tradutor, o interpretador não gera um novo programa para que futuramente
possa ser executado. Como exemplo de interpretador, podem-se citar os navegadores da
Internet, os quais recebem programas na linguagem HTML, interpretando-a e executando cada
um dos seus comandos. Havendo erros de interpretação, o processo não é interrompido e,
por opção dos desenvolvedores dos interpretadores, os erros, às vezes, não são mostrados,
e os resultados referentes à execução do programa são exibidos na tela do computador. Um
segundo exemplo são os interpretadores da Linguagem Basic, que, por sua vez, ao encontrarem
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
16
um erro, param a execução do programa no ponto específico do erro, reportando a classe do
erro ao usuário. Atualmente é usado um tipo de interpretador muito interessante e que vem
mudando significativamente o uso de recursos computacionais: são chamados de máquinas
virtuais, implementadas por softwares como Virtual PC e VMware. Esse tipo de interpretador
permite que um computador/hardware possa simular a existência de outros computadores;
é algo como se um único computador pudesse virar vários outros, executando aplicações
variadas e se comunicando como se fossem computadores físicos distintos.
Memória: dispositivo usado para armazenar conteúdos no formato digital. Pode ser
classificado de acordo com a sua proximidade à Unidade Central de Processamento - CPU.
Normalmente seu volume de armazenamento é medido em bytes, o que define a unidade
mínima de armazenamento. Tipicamente são denominados de Memória Principal os dispositivos
externos que estão ligados diretamente à CPU e que armazenam o programa e os dados
que estão em execução/processamento. Os dados e programas que não estão em execução
normalmente são armazenados na memória secundária ou memória de armazenamento em
massa, a qual está ligada à CPU indiretamente através dos dispositivos de entrada/saída
(I/O - Input/Output). É importante observar que é necessário sempre copiar os programas e dados
da memória secundária para a principal a fim de executá-los. As memórias são agrupamentos
de células de tamanho padrão, normalmente bytes, sendo que cada das células possui uma
identificação/endereço exclusivo.
Registrador: tipo especial de memória formada por uma única célula, localizado
na parte interna da CPU. O acesso ao registrador é exclusivo da CPU, e ele possui
um tempo de resposta muito superior ao desempenho da Memória Principal.
O termo “Palavra” está associado ao tamanho ou a largura da célula que forma cada um dos
registradores de uma CPU; expressa o número de bits da célula de cada registrador. Quando
se fala de uma CPU ou Processador de 32 bits, por exemplo, entre outras características, está
sendo informado que normalmente os registradores da CPU possuem 32 bits de largura.
Nesta unidade foram apresentados os conceitos básicos de computação, bem como a
motivação para o surgimento dos computadores. Um modelo clássico de implementação de
computador chamado Arquitetura de Von Neumann, foi mostrado de forma sucinta, sendo
que na Unidade 5, este modelo será discutido de forma mais detalhada. A necessidade de
entendimentos sobre operações e representações numéricas são importantes a medida em
que entendemos que os computadores atuais nada mais são do que complexas máquinas de
calcular. Esta unidade servirá de base de consulta para o andamento da disciplina.
Disciplina: Arquitetura de Computadores
17
ReferênciasLORIN, Harold. Introdução à arquitetura e organização de computadores. ISBN 8570011911
Rio de Janeiro: Campus, 1985. 362p.
MURDOCCA, Miles; HEURING, Vicent. Introdução a Arquitetura de Computadores. Rio de
Janeiro: Ed. Campus, 2000.
PATTERSON, David A.; HENESSY, Jonh L. Organização e Projeto de Computadores. 2. ed.
Rio de Janeiro : LTC Editora S/A, 1998.
STALLINGS, W. Arquitetura e Organização de Computadores. 5. ed. São Paulo:
Pearson Education do Brasil, 2002.
STALLINGS, William. Arquitetura e organização de computadores: projeto para o desempenho.
5. ed. ISBN 85-87918-53-2. São Paulo: Prentice-Hall, 2002. 786 p.
TANENBAUM, A. Organização Estruturada de Computadores. 4. ed. São Paulo:
Prentice-Hall, 2006.
TORRES, Gabriel. Hardware: curso completo. 4. ed. ISBN 85-7323-165-3. Rio de Janeiro:
Axcel Books, 2001. 1398 p.
WEBER, Raul Fernando. Fundamentos de Arquitetura de Computadores. Série Livros Didáticos.
2.ed. ISBN 8524106352. Porto Alegre: Sagra Luzzatto, 2001. 299p.
Links:
COMPUTER HISTORY. The First Mainframes. Disponível em: <http://www.computerhistory.org/
revolution/mainframe-computers/7/166>. Acesso em: 12 mai. 2012.
COMPUTER HISTORY. Timeline - CHM Revolution. Disponível em: <http://www.computerhistory.
org/revolution/timeline>. Acesso em: 12 mai. 2012.
MUSEU DO COMPUTADOR. Disponível em: <http://www.museudocomputador.com.br/>.
Acesso em: 12 mai. 2012.
OLHAR DIGITAL. Museu do Computador. Disponível em: <http://olhardigital.uol.com.br/
produtos/central_de_videos/museu-do-computador>. Acesso em: 12 mai. 2012.
UNIDADE 1 - INTRODUÇÃO AO ESTUDO DO DA ARQUITETURA DE COMPUTADORES
18
WIKIPÉDIA. Ábaco. Disponível em: <http://pt.wikipedia.org/wiki/%C3%81baco#.C3.81baco_
mesopot.C3.A2mico>. Acesso em: 12 mai. 2012.
YOUTUBE. Historia de la computadora para niños. Disponível em: <http://www.youtube.com/
watch?v=OTwqEnrZSQY&feature=related>. Acesso em: 12 mai. 2012.
YOUTUBE. Intro to Computer Architecture. Disponível em: <http://www.youtube.com/
watch?NR=1&v=HEjPop-aK_w&feature=endscreen>. Acesso em: 12 mai. 2012.
YOUTUBE. John Von Neumann (biografia). Disponível em: <http://www.youtube.com/watch?fea
ture=endscreen&NR=1&v=RF_CZpmVGzw>. Acesso em: 12 mai. 2012.
YOUTUBE. Von Neumann architecture and modern PCs. Disponível em: <http://www.youtube.
com/watch?v=eWhnMNjxYDQ&feature=fvwrel>. Acesso em: 12 mai. 2012.
Disciplina: Arquitetura de Computadores
19
UNIDADE 2 Sistemas de numeração
Objetivos:
Rever e discutir os conceitos dos sistemas numéricos usados na computação. Desenvolver habilidades para conversão numérica entre os sistemas numéricos decimal, binário, octal e hexadecimal.
IntroduçãoOs sistemas de numeração são mecanismos que definem os símbolos numéricos e as regras
para a manipulação e representação dos valores a serem registrados. Na Antiguidade, duas
formas de representar quantidades foram inventadas. Inicialmente, os egípcios criaram um
sistema em que cada conjunto de 10 unidades era representado por um símbolo diferente.
Por exemplo, se escolhêssemos símbolos ao acaso e usássemos # para representar uma
centena, & para representar uma dezena e @ para representar uma unidade, teríamos que
###&&@ representaria 321.
O segundo sistema desenvolvido foi o sistema de numeração romano, no qual são usados
símbolos (letras) que representam as quantidades, por exemplo: I (valendo 1), V (valendo
5), X (valendo 10), C (valendo 100) etc. A regra de posicionamento determina que as letras
que representam quantidades menores e precedem as que representam quantidades
maiores sejam somadas; se o inverso ocorre, o menor valor deve ser subtraído do maior
(e não somado). Assim, o número 128 é representado em algarismos romanos por
CXXVIII (= 100 + 10 + 10 + 5 + 1 + 1 + 1 = 128). Por outro lado, o valor 94 é representado
por XCIV (= (-10 + 100) + (-1 + 5) = 94).
Nesses sistemas, os símbolos tinham um valor intrínseco, independente da posição que
ocupavam na representação (sistema numérico não-posicional). Um grande problema desse
sistema é a dificuldade de realizar operações com essa representação. Experimente multiplicar
CXXVIII por XCIV! Assim, posteriormente foram criados sistemas em que a posição dos algarismos
no número passou a alterar seu valor.
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
20
Sistemas de numeração posicionaisNos sistemas de numeração posicionais, o valor representado pelo algarismo no número depende da posição em que ele aparece na representação. O primeiro sistema desse tipo foi inventado pelos chineses. Eram usados palitos: 1 a 5 palitos dispostos na vertical representavam os números 1 a 5; 6 a 9 eram representados por 1 a 4 palitos na vertical, mais um palito na horizontal (valendo 5) sobre os demais. Cada número era então representado por uma pilha de palitos, sendo uma pilha para as unidades, outra para as dezenas, outra para as centenas etc.
Esse sistema, com as pilhas de palitos dispostas em um tabuleiro, permitia a realização das quatro operações aritméticas básicas. Não existia representação para o zero (o espaço relativo ficava vazio). O tabuleiro aritmético (chamado swan-pan), além das quatro operações, era usado na álgebra e na solução de equações. Essa técnica era chamada de Método do Elemento Celestial.
Atualmente usamos o sistema de numeração posicional para representar todos os valores numéricos em nosso cotidiano, por exemplo, a quantidade de carros que passam por uma via, o valor em reais de uma televisão, a idade de uma pessoa etc. O uso do sistema posicional significa que a posição ocupada por um algarismo em um número altera seu valor em uma potência de 10 (em sistema decimal) para cada casa à esquerda. Por exemplo, no sistema decimal (base 10), no número 125, o algarismo 1 representa 100 (uma centena ou 102), o 2 representa 20 (duas dezenas ou 1 x 101) e o 5 representa 5 mesmo (5 unidades ou 5 x 100).
Assim, em nossa notação, 125 = 1 x 102 + 2 x 101 + 5 x 100.
Base de um sistema de numeraçãoA base de um sistema de numeração indica a quantidade de algarismos disponíveis para a
representação/formação numérica. A base 10 é hoje a mais comum, embora não seja a única
utilizada. No comércio pedimos uma dúzia de rosas ou uma grosa de parafusos (base 12) e
também marcamos o tempo em minutos e segundos (base 60). Os computadores, por sua
vez, utilizam a base 2 (sistema binário), e os programadores em linguagem de baixo nível, por
facilidade, usam em geral uma base que seja uma potência de 2, tal como 2 4 (base 16 ou
sistema hexadecimal), ou eventualmente ainda 2 3 (base 8 ou sistema octal).
Na base 10, dispomos de 10 algarismos para a representação do número: 0, 1, 2, 3, 4, 5,
6, 7, 8 e 9. Na base 2, são apenas 2 algarismos: 0 e 1. Na base 16, utilizamos 16: os 10
algarismos aos quais estamos acostumados, mais os símbolos A, B, C, D, E e F, representando
respectivamente 10, 11, 12, 13, 14 e 15 unidades.
Disciplina: Arquitetura de Computadores
21
Generalizando, temos que uma base b qualquer disporá de b algarismos, variando
entre 0 e (b-1) algarismos. A representação do número 125,3810 (base 10) significa
1x102 + 2x101 + 5x100 + 3x10-1 + 8x10-2. Assim, para representar uma quantidade N
qualquer, numa dada base b, com um número tal como segue, temos:
Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 + a-1.b-1 + a-2.b-2 + .... + a-n.b-n
(Expressão 1)
Sendo que:
an.bn + .... + a2.b2 + a1.b1 + a0.b0 é a parte inteira (Expressão 2)
e
a-1.b-1 + a-2.b-2 + .... + a-n.b-n é a parte fracionária. (Expressão 3)
Intuitivamente, sabemos que o maior número que podemos representar com n algarismos, na
base b, será o número composto n vezes pelo maior algarismo disponível naquela base (ou
seja, b-1). Por exemplo, o maior número que pode ser representado na base 10 usando 3
algarismos será 999 (ou seja, 103 - 1 = 999).
Genericamente falando, podemos ver que o maior número inteiro N que pode ser representado,
em uma dada base b, com n algarismos (n “casas”), será N = bn – 1, assim como o
menor número inteiro com n algarismos será formado por n vezes o primeiro algarismo da
base em questão, ou seja, o algarismo 0 (zero). Ainda, a quantidade de números distintos
a serem representados em uma base numérica b está relacionada com a quantidade
de algarismos/dígitos ou casas numéricas usadas para a representação numérica.
Então, a quantidade de números distintos a serem representados na base b com n algarismos
é determinada pela equação bn.
Nos sistemas de numeração, usamos o termo algarismo/dígito mais significativo para
referenciarmos o algarismo ou dígito mais à esquerda de uma dada representação numérica.
Por outro lado, o termo algarismo/dígito menos significativo está associado ao dígito mais à direita
de um número. Tomando como exemplo o número 8672, temos como dígito mais significativo
o algarismo 8, e o 2 como o menos significativo. Podemos dizer que o algarismo 7 é o segundo
dígito menos significativo, bem como o terceiro mais significativo e assim por diante.
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
22
Representação bináriaOs computadores modernos utilizam o sistema binário, isto é, todas as informações armazenadas
ou processadas no computador são representadas usando apenas DUAS grandezas físicas,
que matematicamente são representadas pelos algarismos 0 e 1. Essa decisão de projeto
deve-se à maior facilidade de representação interna no computador, que é obtida através de
dois diferentes níveis de tensão ou mesmo corrente. Havendo apenas dois algarismos, portanto
dígitos binários, o elemento mínimo de informação nos computadores foi denominado bit, que
é o acrônimo de binary digit.
Na base 2 o número representado pela sequência “10” é correspondente ao número dois na
base 10, ou seja, 102 = 210. Então podemos afirmar que dez é igual a dois?
– Não, dez não é e nunca será igual a dois!
Na verdade, a sequência dos algarismos 1 e 0, ou seja, “10”, não significa necessariamente o
número “dez”. Como estamos acostumados a associar “10” a “dez”, pois sempre pensamos
no sistema de numeração decimal, achamos estranho falar que “10” é igual a 2. Considere as
observações abaixo:
- O número 102 deve ser lido como “um-zero” na base 2 e equivale ao número
2 na base 10 (210).
- O número 105 deve ser lido com “um-zero” na base 5 e equivale ao número 5 na base
10 (510).
- O número 1010 pode ser lido como “um-zero” na base 10 ou então como “dez”
na base dez.
- 1016, lido como “um-zero” na base 16, equivale ao número 1610.
Portanto, 10 só será igual a dez se, e somente se, o número estiver representado na base dez.
Uma curiosidade: O número “10b” é sempre igual à base, porque, em uma dada base b, os algarismos possíveis vão ser sempre de 0 a (b - 1). Como o maior algarismo possível em uma
dada base b é igual a (b-1), o próximo número será (b - 1 + 1 = b) e, portanto, será sempre 10. Assim, numa dada base qualquer, o valor da base será sempre
representado por “10”.
Disciplina: Arquitetura de Computadores
23
Obs.: Toda vez que um número for apresentado sem que seja indicado em qual sistema de numeração ele está representado, entenderemos que a base é dez. Sempre que outra base for
utilizada, a base será obrigatoriamente indicada por um índice na sequência do número.
TABELA 1 – Relação dos pesos de uma sequência binária
Representação Binária Potência Representação decimal1 20 110 21 2100 22 41000 23 810000 24 16100000 25 321000000 26 6410000000 27 128100000000 28 2561000000000 29 512... 2... ...
Pela TABELA 1, pode-se identificar a equivalência de cada sequência binária com o seu
correspondente decimal. Considerando que a representação numérica binária é um sistema de
numeração posicional, o algarismo 1 representa valores (pesos) diferentes e compatíveis com a
sua posição relativa no número. Como o algarismo 0 indica um valor nulo, o valor representado
por ele sempre será zero, independentemente de sua posição no número. Assim, é possível
representar todos os demais números decimais no sistema binário, através da soma dos
pesos dos algarismos 1 na representação numérica binária. Observe pela TABELA 2 como são
formados os números em binário e seus correspondentes em decimal.
TABELA 2 – Exemplos de representação em binário
Representação Binária Potência Representação decimal11 20+21 31010 23+0+21+0 1010011 24+0+0+21+20 19111111 25+24+23+22+21+20 631000110 26+0+0+0+22+21+0 70
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
24
Representação em octal e em hexadecimalEm ambientes computacionais, é comum representar números usando sistemas numéricos em
potências de dois, como o sistema octal e o sistema hexadecimal. Essa técnica visa reduzir o
número de algarismos da representação numérica e, consequentemente, facilitar a compreensão
da grandeza e evitar erros. No sistema octal (base 8), cada três algarismos do sistema binário
são representados por apenas um algarismo octal (de 0 a 7). No sistema hexadecimal (base 16),
cada quatro bits são representados por apenas um algarismo hexadecimal (de 0 a F).
A seguir, a TABELA 3 apresenta os números em decimal e sua representação correspondente
em binário, octal e hexadecimal:
TABELA 3 Equivalência entre as bases numéricas
BASE 10 BASE 2 BASE 8 BASE 160 0 0 01 1 1 12 10 2 23 11 3 34 100 4 45 101 5 56 110 6 67 111 7 78 1000 10 89 1001 11 910 1010 12 A11 1011 13 B12 1100 14 C13 1101 15 D14 1110 16 E15 1111 17 F
Obs.: Convencionalmente, em algumas linguagens de programação, os números na base 16 ou sistema hexadecimal são grafados com a letra “H” ou “h” após o número. Por exemplo: FFH
significa que o número FF está em hexadecimal. Não confundir o “H” ou “h” com mais um dígito, mesmo porque em hexadecimal só temos algarismos até “F” e, portanto, não existe um algarismo “H”. Os números na base 8 ou octal são grafados com o algarismo zero na parte mais significativa
do número; por exemplo: 0326.
Disciplina: Arquitetura de Computadores
25
Conversões entre bases numéricas262.1 Conversão de números de uma base b qualquer para a base 10
De um modo geral, o processo de conversão de números reais em qualquer base numérica
para a base 10 deve considerar a Expressão 1:
Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 + a-1.b-1 + a-2.b-2 + .... + a-n.b-n
A forma mais conveniente de efetuar a conversão é reescrevendo o número a ser convertido na
sua forma de potência usando o formato dado pela Expressão 1 e resolvendo a expressão final.
Exemplos:
a. Converter para a base 10 o número binário 10001110
Usando a Expressão 1, temos:
10001110,012 = 1x27 + 0x26 + 0x25 + 0x24 + 1x23 + 1x22 + 1x21 + 0x20 + 0x2-1 + 1x2-2
= 1x128 + 0x64 + 0x32 + 0x16 + 1x8 + 1x4 + 1x2 + 0x1 + 0x0,5 + 1x0,25
= 128 + 0 + 0 + 0 + 8 + 4 + 2 + 0 + 0 + 0,25
= 142,25
b. Converter para decimal o número 361,458
Pela Expressão 1, temos:
3618 = 3x82 + 6x81 + 1x 80 + 4x8-1 + 5x8-2
= 3x64 + 6x8 + 1x1 + 4x0,125 + 5x0,015625
= 192 + 48 + 1 + 0,5 + 0,078125
= 241,578125
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
26
c. Converter para decimal o número 1BC16
Com a Expressão 1, temos:
1BC,416 = 1x162 + B16x161 + C16x160 + 4x16-1
Para o processo de conversão, deve-se considerar que os algarismos da base 16 de A a F
correspondem aos números decimais de 10 a 15, respectivamente. Então, reescrevendo a
expressão, temos:
1x162 + B16x161 + C16x160 + 4x16-1
= 1x162 + 11x161 + 12x160 + 4x16-1
= 1x256 + 11x16 + 12x1+ 4x0,0625
= 256 + 176 + 12 + 0,25
= 444,25
Conversão de números da base 10 para uma base b qualquer
A conversão de números da base dez para uma base qualquer segue um processo inverso
ao descrito acima. O processo é dividido em duas etapas, sendo uma para a parte inteira e
outra para a parte fracionária. No final, os números encontrados em cada etapa deverão ser
concatenados com o separador vírgula.
Processo para a parte inteira do número:
O número decimal deverá ser dividido sucessivas vezes pela base, sendo que o resto de cada
divisão deverá ocupar sucessivamente as posições de ordem menos significativas do número,
até que o resto da última divisão, que resulta em quociente zero, ocupe a posição de ordem mais
significativa. Tome como exemplo a conversão do número 326 para a base 2, base 8 e base 16:
Disciplina: Arquitetura de Computadores
27
2163-162
1
281
- 401
326- 163
0 240
- 200
220
- 200
210
- 100
25
- 21
2220
2101
20
1 0 1 0 0 0 1 1 032610 =
Dígito menos significativo
Dígito mais significativo
Figura 12: Processo de conversão de decimal para binário
840
- 400
85
- 0 5
80
326- 320
6
5 0 632610 =
Dígito menos significativo
Dígito mais significativo
Figura 13: Processo de conversão de decimal para octal
820
- 164
161
- 0 1
160
326- 320
6
1 4 632610 =
Dígito menos significativo
Dígito mais significativo
Figura 14: Processo de conversão de decimal para hexadecimal
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
28
Pelas figuras 12, 13 e 14, é possível verificar o procedimento de conversão de um número inteiro
na base 10 para os sistemas binário, octal e hexadecimal. Deve-se observar que os restos das
divisões são escritos na forma inversa, ou seja, do algarismo menos significativo para o mais
significativo. Ainda, considerando o processo de conversão para a base 16, quando o resto
for maior que 9, deve-se utilizar os respectivos algarismos hexadecimais – A, B, C, D, E ou F –
conforme o caso.
Processo para a parte fracionária do número:
O procedimento para encontrar a parte fracionária de um número na nova base consiste em
um processo de multiplicação sucessiva da parte fracionária do número em decimal pela base
destino. A parte inteira do resultado da primeira multiplicação será o valor da primeira casa
fracionária, e a parte fracionária desse número será de novo multiplicada pela base e assim por
diante, até o resultado ser zero ou até encontrarmos o número de casas fracionárias desejado.
Por exemplo, vamos converter 326,651 para a base 2, 8 e 16, com 5 algarismos fracionários:
1. A parte inteira será convertida pelo procedimento descrito no item anterior.
2. A parte fracionária será determinada pelo processo de multiplicações sucessivas,
conforme verificamos nas figuras 15, 16 e 17.
Passo
0,651 = 1 0 1 0 0 1
Algarismo da parte fracionária
1º2º3º4º5º6º
0,651 x 2 = 1.302 10,302 x 2 = 0,604 00,64 x 2 = 1,208 10,208 x 2 = 0,416 00,416 x 2 = 0,832 00,832 x 2 = 1,662 1
Figura 15: Conversão de decimal fracionário para binário fracionário
Passo
0,651 = 5 1 5 2 3 7
Algarismo da parte fracionária
1º2º3º4º5º6º
0,651 x 8 = 5,208 50,208 x 8 = 1,664 10,664 x 8 = 5,312 50,312 x 8 = 2,496 20,496 x 8 = 3,968 30,968 x 8 = 7,744 7
Figura 16: Conversão de decimal fracionário para octal fracionário
Disciplina: Arquitetura de Computadores
29
Passo
0,651 = A 6 A 7 E F
Algarismo da parte fracionária
1º2º3º4º5º6º
A
A
EF
0,651 x 16 = 10,416 100,416 x 16 = 6,656 60,656 x 16 = 10,496 100,496 x 16 = 7,936 70,936 x 16 = 14,976 140,976 x 16 = 15,616 15
Figura 17: Conversão de decimal fracionário para hexadecimal fracionário
3. Cada número será montado através da concatenação da parte inteira com a parte
fracionária, separadas por vírgula:
Binário 326,651 = 101000110, 10100
Octal 326,651 = 506, 51523
Octal 326,651 = 146, A6A7E
Figura 18: Formatação final dos números
Em todos os casos, a conversão foi interrompida quando encontramos o número de algarismos
fracionários solicitado no enunciado. No entanto, como não encontramos resultado 0 em
nenhuma das multiplicações, poderíamos continuar efetuando multiplicações indefinidamente
até encontrar (se encontrarmos) resultado zero. No caso de interrupção por chegarmos ao
número de dígitos especificado sem encontramos resultado zero, o resultado encontrado é
aproximado, e essa aproximação será função do número de algarismos que calcularmos. Assim,
se convertermos os números da Figura 18 em decimal, chegaremos a um valor aproximado.
Conversões entre as bases 2, 8 e 16
As conversões mais simples são as que envolvem bases que são potências entre si. Para
converter da base 2 para a base 8, considere que 8 = 23. Então, deve-se separar os bits de um
número binário em grupos de três bits, começando sempre do menos significativo para o mais
significativo, e depois converter cada grupo de três bits para seu equivalente em octal. Ao final,
tem-se a representação do número binário em octal. Por exemplo:
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
30
101010012 = 10.101.0012 (separando em grupos de 3, sempre começando da direita para a esquerda)
Considerando que: 0102 = 28
1012 = 58
0012 = 18
Portanto: 101010012 = 2518
Nas conversões entre as bases 2 e 16, deve ser considerado que 24 = 16. Assim, basta separar
o número binário em grupos de 4 bits e converter parcialmente cada um dos grupos de 4 bits
para hexadecimal. Observe no exemplo abaixo o processo:
110101011012 = 110.1010.11012 (separando em grupos de 4 bits, sempre começando
do algarismo menos significativo para o mais significativo)
Considerando que: 1102 = 616
10102 = A16
11012 = D16
Portanto: 110101011012 = 6AD16
Para convertermos números escritos em hexadecimal ou octal para binário, devemos efetuar a
operação inversa ao processo de binário para as bases 8 e 16. Perceba pelos exemplos abaixo
como operar nesse processo de conversão:
a. Converter o número CAFE16 para binário:
1. Como cada dígito hexadecimal corresponde a 4 dígitos binários, então deve-se
converter parcialmente cada um dos dígitos em hexadecimal:
C16 = 1210 = 11002
A16 = 1010 = 10102
Disciplina: Arquitetura de Computadores
31
F16 = 1510 = 11112
E16 = 1410 = 11102
2. Agora é só concatenar cada um dos números em binário, obedecendo àposição
relativa de cada um deles. O número final será:
CAFE16 = 1100.1010.1111.11102
b. Converter o número 36218 para binário:
1. Como cada dígito octal corresponde a 3 dígitos binários, então deve-se converter
parcialmente cada um dos dígitos em hexadecimal:
38 = 310 = 0112
68 = 610 = 1102
28 = 210 = 0102
18 = 110 = 0012
2. Para finalizar, é só concatenar cada um dos números em binário, obedecendo à
posição relativa de cada um deles. O número final será:
36218 = 011.110.010.0012
Conversão de números entre duas bases quaisquer
Para converter números de uma base b qualquer para outra base qualquer, o processo prático
utilizado é o de converter da base origem para a base 10 e depois da base 10 para a base
destino. Por exemplo: converter o número 567 (base 7) para a base 9.
567 = (5x71 + 6x70)10 = 35 + 6 = 4110
41/9 = 4 e resto 5. Logo: 567 = 459
Observe que o processo de conversão entre as bases 7 e 9 foi efetuado utilizando as teorias
abordadas nas sessões anteriores, podendo ser aplicado para qualquer processo de conversão,
desde de que envolva a base 10 como a base de referência. Para melhorar as habilidades de
manipulação numérica, procure fazer vários exercícios.
UNIDADE 2: SISTEMAS DE NUMERAÇÃO
32
ReferênciasGONICK, Larry. Introdução Ilustrada à Computação. Rio de Janeiro: Ed. Harper & Row do
Brasil, 1984.
MONTEIRO, Mário. Introdução à Organização de Computadores. 2 ed. São Paulo: Editora LTC.
STALLINGS, W. Arquitetura e Organização de Computadores. 5. ed. São Paulo:
Pearson Education do Brasil, 2002.
TANENBAUM, A. Organização Estruturada de Computadores. 4. ed. São Paulo: Prentice-Hall, 2006.
Links:
AREASEG (Site de Segurança do Trabalho). Disponível em:
<http://www.areaseg.com/sinais/numeros.html>. Acesso em: 20 mai. 2012.
CALCULADORA ONLINE. Disponível em:
<http://www.calculadoraonline.com.br/conversao-bases>. Acesso em: 15 mai. 2012.
LINHARES, Robson Ribeiro. Bases numéricas. UTPR (Universidade Tecnológica Federal do
Paraná). Disponível em: <http://www.dainf.ct.utfpr.edu.br/~robson/prof/aulas/common/bases.
htm#exerc>. Acesso em: 18 mai. 2012.
CONVERSÃO DE BASES. 2008. Disponível em:
<http://bitsebites-sistemasnumericos.blogspot.com.br/2008/05/converso-de-bases.html>.
Acesso em: 18 mai. 2012.
Disciplina: Arquitetura de Computadores
33
UNIDADE 3 Representações numéricas
OBJETIVOS
Desenvolver habilidades para a manipulação e interpretação de números binários inteiros e reais, tanto positivos quanto negativos. Apresentar o processo aritmético binário visando o entendimento de desempenho computacional. Entender o processo de representação e armazenamento de dados numéricos nos computadores modernos. Facilitar o entendimento para diferenciação dos tipos de dados de uma linguagem de programação de computadores.
Representação de números inteiros (ponto fixo) Nos computadores digitais modernos, a forma mais natural de representação numérica
é o sistema binário, pois o hardware foi projetado para trabalhar com a interpretação
de somente dois sinais elétricos distintos. Assim, para a formação dos algarismos que
compõem os números nos computadores, devem-se considerar somente esses dois
sinais. Essa é a forma mais adequada e eficiente para representar e manipular números
em um computador.
Sabemos, contudo, que os números inteiros podem ser positivos ou negativos. Então, um
aspecto primordial a ser definido é como representar o sinal de um número, pois existem
somente dois símbolos disponíveis, e eles já são usados nas representações numéricas.
A solução adotada utiliza um bit para representar o sinal do número. Convencionalmente, é
usado o dígito mais significativo para indicar o sinal, comumente chamado de bit de sinal.
Como um bit pode assumir somente os valores 0 e 1, ficou convencionado ainda que, se o
bit de sinal tiver valor 0, o número é positivo; caso contrário (1), o número é negativo.
Na Tabela 4 são apresentados dois exemplos da representação de números negativos em
binário, bem como em hexadecimal e octal. É importante observar que, nas representações
na base 16 e 8, o bit de sinal é sempre considerado no processo de conversão, e os
símbolos que indicam se o número é positivo ou negativo (+ e -) só devem aparecer nas
representações em decimal.
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
34
TABELA 4Visualização da representação de números inteiros
DECIMAL BINÁRIO HEXADECIMAL OCTAL
+9-9
127-127
0000100110001001
0111111111111111
0 Bit com valor 0 indica número positivo1 Bit com valor 1 indica número negativo
0989
7FFF
011211
177377
Observando-se a Tabela 4, verifica-se que, em uma representação binária com n bits, é possível
representar números com (n - 1) bits, pois o bit mais significativo representa o sinal, e somente
os demais bits representam o valor numérico. Essa forma de representar tem o nome de
representação em Sinal e Magnitude (S/M).
Representações em Sinal e Magnitude – S/M
Nessa representação, o número deve ser avaliado por dois campos, sendo que um deles
indica o sinal do número, e o outro, a sua magnitude. Veja pela Figura 19 uma representação
gráfica desse formato.
Sinal Magnitude
NÚMERO
FIGURA 19: Visão geral do formato Sinal e Magnitude
Disciplina: Arquitetura de Computadores
35
A palavra “magnitude”, nesse contexto, significa o valor absoluto de um número. Em outras
palavras, refere-se ao módulo de um número, que pode estar representado tanto em decimal
quanto em binário, octal, ou mesmo no formato hexadecimal.
Os valores dos dígitos usados para representarem a magnitude de um número independem do
sinal desse número, isto é, sendo o número positivo ou negativo, a representação da magnitude
será a mesma; o que varia na representação é apenas o dígito de sinal.
Além da magnitude do número, deve ser avaliado o seu sinal, que é sempre determinado pelo
seu dígito mais significativo. O valor zero (0) para esse dígito indica que o número é positivo.
Para os números negativos, o valor desse dígito depende da base numérica utilizada na
representação do número. Como no sistema binário existem somente dois símbolos disponíveis
para a formação dos números, quando o valor do bit de sinal for 0 (zero), significa que o número
é positivo e, quando o seu valor for 1, indica um número negativo. Tecnicamente falando, o
algarismo usado para indicar o sinal de negativo é sempre o último símbolo disponível no sistema
numérico. Assim como no sistema binário o algarismo 1 indica o sinal de negativo, o algarismo
9 é usado no sistema decimal para indicar o sinal de negativo.
É importante ressaltar que, nos sistemas numéricos octal e hexadecimal, os algarismos 7 e F são usados para indicar o sinal de negativo somente quando o número em questão não está relacionado com algum número em binário. Por outro lado, havendo uma relação, o sinal é obrigatoriamente associado ao dígito mais significativo do número em binário.
Observe, na Figura 20, que a sequência binária 0112 equivale ao valor absoluto 3, ou seja, módulo
de 3. Verifique, ainda, as representações desse mesmo número nos sistemas octal e hexadecimal.
Representação em Sinal e Magnitude Representação ConvencionalBinário Decimal Octal Decimal Hexadecimal
0011 03 03 03 3 +31011 93 13 93 B -3
Figura 20: Equivalência das representações positivas e negativas de um número
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
36
Faixa de representação
A representação na base b em Sinal e Magnitude com n bits (incluindo o bit de sinal) possui
bn representações, o que permite representar (bn-1) números distintos, uma vez que há duas
representações para o zero: uma para o + 0 e outra para o - 0. Deve-se observar que, no
contexto da matemática, o número 0 não tem sinal, contudo, na computação, dada a natureza
dos formatos de representações numéricas, devem ser consideradas as duas representações,
ou seja, a positiva e a negativa.
A faixa de representação de números na base 2 em Sinal e Magnitude com n bits (incluindo o
bit de sinal) possui 2n representações, sendo possível apresentar os números de - (2n-1-1) a +
(2n-1-1). Dessa forma, o maior valor inteiro possível é então + (2n-1-1), e o menor valor inteiro é -
(2n-1-1). Veja a aplicação das fórmulas pelos exemplos abaixo:
1. Considerando que uma determinada máquina trabalha com a representação de números
inteiros no formato S/M de 8 bits, indique, em decimal, o maior e o menor valor que pode
ser representado diretamente nessa máquina.
Desenvolvimento:
Como o menor valor é determinado pela equação - (2n-1-1), então:
Menor valor = - (2n-1-1), onde n é igual a 8
Menor valor = - (28-1-1) = - (128 -1) = - (127) = - 127
O maior valor é determinado pela equação + (2n-1-1), então:
Maior valor = + (2n-1-1), onde n é igual a 8
Maior valor = + (28-1-1) = + (128 -1) = + (127) = + 127
Resposta: menor valor = - 127; maior valor = + 127
2. É possível que em uma máquina que trabalha com a representação de números inteiros
no formato S/M em 13 bits represente o resultado da multiplicação dos números 1024 e
-4 diretamente?
Desenvolvimento:
Primeiro deve-se considerar que a palavra “diretamente” está se referindo à possibilidade
de representação numérica sem o uso de artifícios matemáticos e computacionais
que permitem a concatenação de números. Em linhas gerais, um computador pode
Disciplina: Arquitetura de Computadores
37
manipular números que vão além da sua capacidade máxima de representação. É claro
que diversos artifícios matemáticos e computacionais devem ser empregados, mas eles
estão fora do escopo inicial desta disciplina.
Num segundo momento, deve-se calcular o limite mínimo de representação numérica na
máquina estudada pela equação - (2n-1-1). Então:
Menor valor = - (2n-1-1), onde n é igual a 13
Menor valor = - (213-1-1) = - (4096 - 1) = - (4095) = - 4095
Para finalizar, deve-se efetuar a multiplicação dos números envolvidos:
1024 x -4 = - 4096.
Resposta: Não é possível representar o resultado da multiplicação do número 1024 pelo
número -4 em uma máquina que manipula números de 13 bits no formato S/M.
Sobre o processo de manipulação numérica, observe as seguintes considerações:
a. O número de bits para a representação é determinado no projeto do computador.
b. Em situações nas quais o número a ser representado excede a capacidade máxima
que uma determinada máquina pode representar, é caracterizada um situação
denominada overflow.
c. A situação denominada underflow é tipicamente caracterizada pela impossibilidade
de representação de números menores que o menor número manipulado diretamente
pela máquina.
d. Em Sinal e Magnitude, existem duas representações para o zero.
Aritmética em Sinal e Magnitude
Algoritmo da soma
1. Verificar o sinal das parcelas.
2. Se os sinais forem iguais:
- repetir o sinal;
- somar as magnitudes.
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
38
3. Se os sinais forem diferentes:
- verificar qual parcela tem maior magnitude;
- repetir o sinal da maior magnitude;
- subtrair a menor magnitude da maior magnitude.
4. Verificar se o resultado final está dentro dos limites possíveis (situações de underflow e overflow).
5. Apresentar o resultado da operação.
Algoritmo da subtração
1. Processar a subtração:
- verificar qual parcela tem maior magnitude;
- repetir o sinal da maior magnitude;
- subtrair a menor magnitude da maior magnitude.
2. Verificar se o resultado final está dentro dos limites possíveis (situações de underflow e
overflow).
3. Apresentar o resultado da operação.
O algoritmo da subtração é o mesmo da soma nos casos em que as parcelas possuem
sinais diferentes. Nesses casos, a subtração é feita como se fosse uma soma de dois números
que têm sinais diferentes.
Observa-se que, no processo aritmético na representação S/M, existe custo adicional, pois ele
exige um grande número de comparações para realizar uma simples soma ou subtração de
dois números inteiros. Os algoritmos acima descritos são mais onerosos de serem realizados
no computador, pois resultam em uma baixa eficiência computacional (execução lenta), tendo
em vista a necessidade de comparações entre os operandos. Outro ponto negativo dessa
representação está associado ao fato de que existem duas representações para o número
zero, o que torna mais trabalhoso o desenvolvimento de programas numa linguagem de alto
nível, pois, ao comparar o conteúdo de uma variável com o zero, devem-se considerar os dois
formatos do zero. Assim, uma simples comparação com o número zero leva o programador à
seguinte estrutura: if ( (Cont == –0) or (Cont == +0) ).
Disciplina: Arquitetura de Computadores
39
Diante das dificuldades apresentadas pela representação S/M, os engenheiros passaram a usar
a representação complementar de números negativos no projeto de sistemas digitais. É claro
que ainda existem máquinas que manipulam números no formato S/M, como os processadores
de sinais da Motorola (XC5630P) ou da Texas (TMS320C62x).
Representação de números no formato complementarUma segunda alternativa de representação numérica que utiliza os mesmos algarismos tanto para
indicar a magnitude quanto para indicar o sinal do número é a representação complementar. Nela,
deve-se considerar que o complemento de qualquer número é a diferença entre o valor de cada
algarismo desse número e o valor do maior número possível com um mesmo algarismo, da base.
Tomando como exemplo o sistema decimal, no qual o maior número possível é formado pela
repetição do algarismo 9, pode-se considerar que o complemento do número 385 é 614, pois:
999385614
Note que o maior algarismo da base deve ser repetido o número de vezes igual à quantidade de
algarismos do número cujo complemento se deseja calcular. Para o sistema binário, é simples
calcular o complemento de um número, pois, como só existem dois símbolos, o complemento
de 0 é 1 e o complemento de 1 é 0. O complemento do número 1001102 é 0110012.
Uma vantagem da utilização da representação em complemento é que as operações aritméticas
são efetuadas diretamente, sem a necessidade de avaliação inicial dos operandos, e a subtração
entre dois números pode ser substituída pela sua soma em complemento.
Representação de números positivos em complemento
A representação de números positivos em complemento não tem qualquer alteração, isto é,
é idêntica à representação em Sinal e Magnitude, observando-se que o dígito de sinal é o
algarismo zero (0 indica positivo).
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
40
Representação de números negativos em complemento a (base -1)
Nesse formato de representação, os números inteiros negativos são obtidos a partir da
representação positiva de cada um dos números, com o cálculo do seu complemento. Dessa
forma, ao calcular o complemento a (base -1) de um número positivo, encontramos a sua
representação em negativo e vice-versa. Deve-se lembrar que o dígito de sinal sempre será o
dígito mais significativo do número. Por convenção, o algarismo/símbolo usado para indicar o sinal
de negativo é o ultimo algarismo do sistema numérico, ou seja, o algarismo/símbolo (base -1).
Para entender melhor, observe os exemplos abaixo:
1. Calcule o complemento a (base - 1) do número +26110 com 4 algarismos decimais.
Desenvolvimento:
- Determinar (base-1). Como a base é 10, então (base - 1) = (10 – 1) = 9 e o
complemento a (base -1) será igual a complemento a 9, ou simplesmente C9.
- Normalizar o número para 4 algarismos. Como o número +26110 é positivo, então o
dígito de sinal será 0. Portanto +26110 normalizado para 4 dígitos é 026110
- Calcular o C9 do número 0261:
999902619738
Resultado:
- Complemento a 9 do número +26110 = 973810
2. Calcule o complemento a (base - 1) do número 951C16, usando 4 algarismos em
hexadecimal.
Desenvolvimento:
- Convencionalmente, para a computação, não existe sinal de positivo ou negativo
nas representações em binário, octal e hexadecimal. Para essa indicação, deve
ser considerado o número no formato em binário e avaliar o valor do bit mais
significativo (um valor zero indica um número positivo e 1 indica um número negativo).
De toda forma, é só processar o cálculo do complemento a (base-1) diretamente.
Disciplina: Arquitetura de Computadores
41
- Considerando que a base é 1610 e o número 1610 é igual ao número 1016, então (base -
1) = (1016 – 1) = F16 e o complemento a (base -1) será igual a complemento a F.
- Assim, o CF do número 951C:
FFFF951C6AE3
Resultado:
- Complemento a F do número 951C16 = 6AE316
Considerando os exemplos apresentados, é possível inferir que, para obter o
complemento a 1 de um número binário, deve-se subtrair cada algarismo do número de 1.
Uma particularidade dos números binários é que, para efetuar essa operação, basta
inverter todos os bits. Observe, na Tabela 5, a relação dos números binários de 4 dígitos
na representação em C1.
TABELA 5
Representação binário em C1 com 4 bits
Binário C1
0000000100100011010001010110011111111110110111001011101010011000
1111111011011100101110101001100000000001001000110100010101100111
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
42
Tal como na representação em Sinal e Magnitude, sempre que em uma representação em
complemento o primeiro dígito binário for 1, o número representado é negativo, sendo que
o dígito mais significativo igual a zero indica que o número é positivo. Assim, o zero pode ser
representado tanto por 00002 quanto por 11112.
Faixa de representação
A representação na base b em complemento a (base -1), com n bits, possui bn representações,
o que permite representar (bn–1) valores. O problema de haver duas representações para o zero
não está solucionado com essa representação. A faixa numérica da representação na base 2
no formato complemento a (base-1), com n bits, é a mesma que no formato Sinal e Magnitude,
podendo ser calculada como 2n valores, variando de -(2n-1-1) a +(2n-1-1), de forma que o maior
valor inteiro positivo será então +( 2n-1-1), e o menor valor inteiro negativo será -(2n-1-1). Abaixo,
são apresentados exemplos de aplicação das fórmulas:
1. Considerando que uma determinada máquina trabalha com a representação de números
inteiros no formato C1 com 8 bits, indique em decimal o maior e o menor valor que pode
ser representado diretamente nessa máquina.
Desenvolvimento:
Como o menor valor é determinado pela equação - (2n-1-1), então:
Menor valor = - (2n-1-1), onde n é igual a 8
Menor valor = - (28-1-1) = - (128 -1) = - (127) = - 127
O maior valor é determinado pela equação + (2n-1-1), então:
Maior valor = + (2n-1-1), onde n é igual a 8
Maior valor = + (28-1-1) = + (128 -1) = + (127) = + 127
Resposta: menor valor = - 127; maior valor = +127
2. É possível que uma máquina que trabalha com a representação de números inteiros no formato
C1 em 13 bits represente o resultado da multiplicação dos números 1024 e -4 diretamente?
Desenvolvimento:
Novamente, deve-se considerar primeiro que a palavra “diretamente” está se referindo
à possibilidade de representação numérica sem o uso de artifícios matemáticos e
Disciplina: Arquitetura de Computadores
43
computacionais que permitem a concatenação de números, já que eles estão fora do
escopo inicial desta disciplina.
Num segundo momento, deve-se calcular o limite mínimo de representação numérica
na máquina estudada pela equação - (2n-1-1). Então:
Menor valor = - (2n-1-1), onde n é igual a 13
Menor valor = - (213-1-1) = - (4096 - 1) = - (4095) = - 4095
Para finalizar, deve-se efetuar a multiplicação dos números envolvidos:
1024 x -4 = - 4096.
Resposta: Não é possível representar o resultado da multiplicação do número 1024
pelo número -4 em uma máquina que manipula números de 13 bits no formato C1.
Assim como no formato S/M, o número de bits dos números manipulados em um
computador que trabalha com o formato de representação C1 depende exclusivamente
do projeto do computador. Situações de overflow e underflow podem ocorrer em função
dos números manipulados. Apesar de continuar com duas representações para o
número zero, a aritmética desse sistema é otimizada, se comparada com a aritmética
praticada no formato S/M, o que torna a representação em C (base-1) mais interessante
do que a representação em S/M.
Aritmética em complemento a (base -1)
Na aritmética em complemento a (base-1), as operações de adição e subtração são efetuadas
diretamente, sem a necessidade de comparações iniciais, como na aritmética em S/M, pois
deve-se levar em conta que os números negativos são representados pelo complemento do
mesmo número em positivo. Dessa forma, não existe um procedimento para adição e outro
distinto para a subtração; essas operações são realizadas diretamente pelo processo de adição
complementar de um número. A única regra diferente daquelas a que estamos habituados é
que, quando existe o chamado “vai um” do dígito mais significativo, esse transbordo deve ser
adicionado ao número final.
Com relação à análise do resultado final, deve-se observar o dígito de sinal, pois, se estamos
somando números positivos, o resultado só pode ser positivo; da mesma forma, quando estamos
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
44
somando números negativos, temos como resultado esperado somente um número negativo.
Caso ocorra um resultado diferente do esperado, o número final está sendo considerado um
erro de overflow ou underflow, conforme o caso. Analise os exemplos abaixo.
1. Efetue a adição do número +32610 com o número -13610. A operação deverá ser
realizada em complemento a (base -1) com 4 algarismos.
Desenvolvimento:
- Primeiro passo: determinar (base-1). Considerando que a base é 10, então
(base - 1) = (10 – 1) = 9.
- Segundo passo: normalizar os números para 4 dígitos em C9 e representar no formato
complementar, conforme o caso.
• O número positivo é representado com um zero na casa mais significativa. Assim,
+32610 = 032610 em C9 4 dígitos.
• Para representar o complemento a (base-1) de um número em decimal negativo,
calcula-se o complemento a (base-1) do módulo normalizado do referido número.
Então, para -136, temos o módulo normalizado em 4 dígitos igual a 0136.
• Na sequência determina-se o complemento do módulo obtido no passo anterior.
Assim:
999901369863
• Agora, basta somar os números obtidos após a normalização, ou seja, 0326 + 9863.
032698630189 10190
1 1
O “vai 1” final deve ser adicionado ao resultado final
Disciplina: Arquitetura de Computadores
45
Resultado:
2. O resultado final da operação aritmética de adição realizada entre os números +32610
e -13610 é 0190, ou seja, +190 na interpretação decimal pura. Analisando o resultado
final, como estamos subtraindo um número negativo de um positivo, pode-se esperar
um resultado tanto positivo quanto negativo, dependendo somente da magnitude dos
números envolvidos.
3. Efetue a subtração entre o número +32610 e o número -13610. A operação deve ser
realizada em complemento a (base -1) com 4 algarismos.
Desenvolvimento:
- Primeiro passo: avaliar o que deve ser feito. 326 – (– 136 ), o que de certa forma
é igual à soma 326 + 136. Em outras palavras, ao calcular o complemento do
complemento de um número, estamos voltando ao número original. Verifique os dois
sinais negativos na expressão inicial.
- Segundo passo: normalizar os números para 4 dígitos em C9 e representar no formato
complementar, conforme o caso.
4. O número positivo é representado com um zero na casa mais significativa. Assim, +32610
= 032610 em C9 4 dígitos e o número 13610 = 013610 em C9 4 dígitos.
• Agora, basta somar os números obtidos após a normalização, ou seja, 0326 + 0136.
032601360462 00462
0 1
Resultado:
O resultado final da operação aritmética de subtração entre os números +32610 e -13610 é 0462, ou seja +462 na interpretação decimal pura.
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
46
Deve-se observar que, com a representação em complemento a (base-1), os problemas
computacionais da representação em S/M foram parcialmente resolvidos. Na verdade, a
complexidade inicial da aritmética foi diminuída consideravelmente, mantendo-se somente
o problema das duas representações para o número zero. A maioria dos processadores
do mercado possui instruções de compatibilidade com os formatos em complemento
a (base -1), ou melhor, em complemento a 1, pois os sistemas computacionais operam
com o sistema binário (base 2).
Representação de números negativos em complemento a baseA representação dos números inteiros negativos em complemento a base é uma alternativa
melhorada dos formatos anteriormente estudados, pois resolve o problema da dupla
representação para o número zero, bem como apresenta uma melhoria no algoritmo da
aritmética. Quanto ao número positivo, deve-se considerar que sua representação é igual ao
formato Sinal e Magnitude e complemento a (base-1). Para calcular o complemento a base de
um determinado número, basta obter o complemento a (base -1) desse número e somar uma
unidade. Veja pelos exemplos abaixo o procedimento de cálculo:
1. Calcule o complemento a base do número +26110 com 4 algarismos decimais.
Desenvolvimento:
- Como a base é 10, então o complemento a base será igual ao complemento a 9 mais
uma unidade, ou seja, C10 = (C9 +1).
- Normalizar o número para 4 algarismos. Como o número +26110 é positivo, então o
dígito de sinal será 0. Portanto, +26110, normalizado para 4 dígitos, é 026110.
- Calcular o C9 do número 0261:
999902619738
- Somar uma unidade ao resultado do passo anterior, ou seja, como C10 = C9 + 1, então:
9738 19739
Disciplina: Arquitetura de Computadores
47
Resultado:
- Complemento a 10 do número +26110 = 973910
2. Calcule o complemento a base do número 951C16, usando 4 algarismos em hexadecimal.
Desenvolvimento:
- Convém lembrar mais uma vez que convencionalmente, para a computação, não
existe sinal de positivo ou negativo nas representações em binário, octal e hexadecimal.
Para essa indicação, deve ser considerado o número no formato em binário e avaliar
o valor do bit mais significativo (um valor zero indica um número positivo e 1 indica
um número negativo). De toda forma, é só processar o cálculo do complemento a
base diretamente.
- Considerando que a base é 1610, então base -1 = F.
- Para calcular o CF do número 951C, não é necessário normalizar, pois o número
usado já está com 4 dígitos. Assim:
- Incrementar uma unidade ao resultado do item anterior:
Resultado:
- Complemento 16 do número 951C16 = 6AE416
Na adição realizada para calcular o complemento a base, quando houver o “vai 1” do
dígito mais significativo, devemos descartá-lo, ao contrário da operação em complemento
a (base – 1), na qual o excesso é incremento ao número restante. Essa regra faz parte
do procedimento usado para efetuar as operações aritméticas. Na Figura 21, é possível
visualizar o significado da regra.
072693360062
1 1 1O “vai 1” final deve ser desconsiderado
FIGURA 21: Operação aritmética em complemento a base (descartar o “vai 1”)
Adotando o procedimento para cálculo dos números negativos em complemento a base, pode-
se verificar que o número zero possui somente uma representação, ou seja, a representação
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
48
positiva; deixa-se a representação negativa para ser usada na representação de mais um número
negativo. Observe na Tabela 6 a relação de números em complemento 2 (C2) de 4 dígitos e o
seu correspondente em decimal.
TABELA 6 Relação de números em C2 4 bits
Decimal Binário C2 Hexadecimal Octal0
+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1
0000000100100011010001010110011110001001101010111100110111101111
0123456789ABCDEF
012345671011121314151617
Faixa de representação
A representação na base b em complemento a base com n bits possui bn representações, o
que permite representar bn valores. Como existe somente uma representação para o zero, há
mais um número negativo representado. Assim, a faixa numérica da representação na base 2
no formato complemento a base, com n bits, é calculada como 2n valores, variando de -(2n-1) a
+(2n-1-1), de forma que o maior valor inteiro positivo será então +( 2n-1-1), e o menor valor inteiro
negativo será -(2n-1). Abaixo são apresentados exemplos de aplicação das fórmulas:
1. Considerando que uma determinada máquina trabalha com a representação de números
inteiros no formato C2 com 8 bits, indique em decimal o maior e o menor valor que pode
ser representado diretamente nessa máquina.
Disciplina: Arquitetura de Computadores
49
Desenvolvimento:
Como o menor valor é determinado pela equação - (2n-1), então:
Menor valor = - (2n-1), onde n é igual a 8
Menor valor = - (28-1) = - (128 ) = - (128) = - 128
O maior valor é determinado pela equação + (2n-1-1), então:
Maior valor = + (2n-1-1), onde n é igual a 8
Maior valor = + (28-1-1) = + (128 -1) = + (127) = + 127
Resposta: menor valor = - 128; maior valor = +127
2. É possível que em uma máquina que trabalha com a representação de números inteiros
no formato C2 em 13 bits represente o resultado da multiplicação dos números 1024 e
-4 diretamente?
Desenvolvimento:
Novamente, considera-se, em primeiro lugar, que a palavra “diretamente” está se
referindo à possibilidade de representação numérica sem o uso de artifícios matemáticos
e computacionais que permitem a concatenação de números.
Num segundo momento, deve-se calcular o limite mínimo de representação numérica na
máquina estudada pela equação - (2n-1). Então:
Menor valor = - (2n-1), onde n é igual a 13
Menor valor = - (213-1) = - (4096) = - 4096
Para finalizar, deve-se efetuar a multiplicação dos números envolvidos:
1024 x -4 = - 4096.
Resposta: Sim, é possível representar o resultado da multiplicação do número 1024
pelo número -4, em uma máquina que manipula números de 13 bits no formato C2.
O número de bits dos números manipulados em um computador que trabalha com
o formato de representação C2 depende exclusivamente do projeto do computador.
Situações de overflow e underflow podem ocorrer em função dos números manipulados.
O procedimento de execução das operações aritméticas é otimizado em relação aos
demais formatos de representação, sendo o mais utilizado nos processadores atualmente.
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
50
Aritmética em complemento a base
Na aritmética em complemento a base, as operações de adição e subtração são efetuadas
diretamente, sem a necessidade de comparações iniciais, como na aritmética em S/M, pois
deve-se levar em conta que os números negativos são representados pelo complemento do
mesmo número em positivo. Dessa forma, não existe um procedimento para adição e outro
distinto para a subtração. Essas operações são realizadas diretamente pelo processo de adição
complementar de um número. A única regra diferente daquelas a que estamos habituados é
que, quando existe o chamado “vai um” do dígito mais significativo, esse transbordo deve ser
ignorado, não sendo adicionado ao número final.
Com relação à análise do resultado final, deve-se observar o dígito de sinal, pois, se estamos
somando números positivos, o resultado só pode ser positivo; da mesma forma, quando
somamos números negativos, temos como resultado esperado somente um número negativo.
Caso ocorra um resultado diferente do esperado, o número final está sendo considerado um
erro de overflow ou underflow, conforme o caso. Analise os exemplos abaixo:
1. Efetue a adição do número +32610 com o número -13610. A operação deverá ser realizada
em complemento a base com 4 algarismos.
Desenvolvimento:
- Primeiro passo: determinar base. Considerando que a representação dos números
está no sistema decimal, então base = 10.
- Segundo passo: normalizar os números para 4 dígitos em C10 e representar no
formato complementar, conforme o caso.
• O número positivo é representado com um zero na casa mais significativa. Assim,
+32610 = 032610 em C10 4 dígitos.
• Para representar o complemento a base de um número em decimal negativo, calcula-
se o complemento (base-1) do módulo normalizado do referido número e soma-se
uma unidade. Então, para -136, temos o módulo normalizado em 4 dígitos igual a 0136.
• Na sequência, determina-se o complemento do módulo obtido no passo anterior. Assim:
999901369863
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
51
• Soma-se uma unidade ao resultado obtido: 9863 + 1 = 9864
• Agora, basta somar os números obtidos após a normalização, ou seja, 0326 + 9864.
Resultado:
O resultado final da operação aritmética de adição realizada entre os números +32610
e -13610 é 0190, ou seja, +190 na interpretação decimal pura. Analisando o resultado
final, como estamos subtraindo um número negativo de um positivo, pode-se esperar
um resultado tanto positivo quanto negativo, dependendo somente da magnitude dos
números envolvidos.
2. Efetue a subtração entre o número +32610 e o número -13610. A operação deve ser
realizada em complemento a base com 4 algarismos.
Desenvolvimento:
- Primeiro passo: avaliar o que deve ser feito. 326 – (– 136 ), o que de certa forma
é igual à soma 326 + 136. Em outras palavras, ao calcular o complemento do
complemento de um número, estamos voltando ao número original. Verifique os dois
sinais negativos na expressão inicial.
- Segundo passo: normalizar os números para 4 dígitos em C10 e representar no
formato complementar, conforme o caso.
• O número positivo é representado com um zero na casa mais significativa. Assim,
+32610 = 032610 em C10 4 dígitos e o número 13610 = 013610 em C10 4 dígitos.
• Agora, basta somar os números obtidos após a normalização, ou seja, 0326 + 0136.
0326 1
01360462
Resultado:
O resultado final da operação aritmética de subtração entre os números +32610 e -13610
é 0462, ou seja, +462 na interpretação decimal pura.
Deve-se observar que, com a representação em complemento a base, os problemas
computacionais com relação à aritmética e à representação ambígua para o zero
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
52
foram resolvidos, mantendo-se somente o inconveniente do desbalanceamento na
representação numérica, ou seja, no formato de representação em complemento a base,
a quantidade de números positivos representados é menor que a de números negativos.
Representação de números reaisPor natureza, os números reais são difíceis de serem representados computacionalmente,
pois exigem técnicas mais refinadas para armazenamento e processamento. Considerando
a classe de problema, os números podem ser muito extensos ou mesmo infinitos, como
dízimas periódicas e números irracionais. Dessa forma, truncá-los é inevitável, o que, no final,
pode influenciar negativamente no processo de cálculo, diminuindo a sua precisão.
Desde os primórdios da computação, duas abordagens prevalecem para representá-los. Uma
é a técnica denominada representação em ponto fixo e outra é a representação em ponto
flutuante. Explicando melhor, a palavra “ponto” pode ser substituída pela palavra “vírgula”, ou
seja, representação em vírgula fixa e em vírgula flutuante. Os problemas apresentados por
essas representações estão relacionados com a maneira de registrar a faixa de variação do
número e a sua precisão numérica.
A representação em ponto fixo é a mais indicada para máquinas projetadas para aplicações
específicas, ou seja, computadores projetados para uma determinada classe de aplicações.
Nesses computadores, os limites máximos e mínimos a serem representados são definidos
diretamente pelo hardware ao longo do projeto. Por exemplo, se uma máquina foi projetada
para manipular somente números de 34 dígitos à esquerda do ponto decimal e 28 dígitos à
direita desse ponto, não será adequado trabalhar com sistemas que necessitam manipular
números que exigem uma precisão de 40 dígitos à esquerda e 22 dígitos à direita. Observe
que a quantidade de dígitos usados nas representações é a mesma, mas existe uma restrição
específica de hardware que não permite a variação da posição do ponto.
As representações em ponto flutuante são mais flexíveis, se considerarmos que é possível
atender a diversas classes de problemas com uma mesma máquina, pois podemos, de forma
dinâmica, ajustar tanto o número de dígitos que precedem o ponto quanto os dígitos que
estão à direita do ponto. Nessa alternativa, a faixa de variação do número está separada
da sua precisão numérica, usando-se o método de notação científica: n = i.f x 10e, onde
n é um número real e i representa a parte inteira, sendo separado por um ponto de f. O f é
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
53
conhecido como fração ou mantissa e e é um número inteiro positivo ou negativo conhecido
como expoente. A Figura 22 apresenta alguns exemplos de números expressos nesse formato.
0,000001 3,14
19410,1 x 10-5
0,314 x 101
0,1941 x 104
=
=
=
1,0 x 10-6
3,14 x 100
1,941 x 103
=
=
=
FIGURA 22: Representação em ponto flutuante
Esse método é conhecido como representação em ponto flutuante. Nele, a faixa de variação
dos números é determinada pela quantidade de dígitos do expoente e a precisão é determinada
pela quantidade de dígitos da mantissa. Como há mais de uma maneira de representar números
nessa notação, deve-se escolher uma delas como padrão. Para investigar as propriedades desse
método de representação de números, considere uma representação R, com uma mantissa de
três dígitos com sinal, na faixa de 0.1≤ | f | < 1 ou zero e um expoente de dois dígitos com sinal.
Tais números têm uma faixa de variação que vai de +0.100 x 10-99 a + 0,999 x 10+99, que se
expande por mais ou menos 199 ordens de magnitude, apesar de ser necessário usar só cinco
dígitos e dois sinais para armazenar números expressos nessa notação.
Os números em ponto flutuante podem ser usados para representar o sistema de números
reais da matemática, apesar de haver algumas diferenças importantes. A Figura 23 mostra um
esquema da reta dos números reais visando apresentar essas diferenças.
Overownegativo
Overowpositivo
Underowpositivo
Números negativos expressíveis
Números positivos expressíveis
Overow
3
1 2 6 74
Zero
5
-100100
-100100
-100100
-100100
0
Underownegativo
FIGURA 23: A reta real dividida em regiões
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
54
A reta foi dividida em sete regiões:
• Números negativos grandes, menores que – 0.999 x 1099
• Números negativos entre – 0.999 x 1099 e – 0.100 x 10-99
• Números negativos pequenos, com magnitudes menores que 0.100 x 10-99
• Zero
• Números positivos pequenos, com magnitudes menores que 0.100 x 10-99
• Números positivos entre 0.100 x 10-99 e 0.999 x 1099
• Números positivos grandes, maiores que 0.999 x 1099
A principal diferença entre os números representados com mantissas de três dígitos e expoentes
de dois e os números reais é que a primeira representação não pode ser usada para expressar
números nas regiões 1, 3, 5, ou 7. Se o resultado de uma operação gerar um número na região 1
ou 7, vai ocorrer um erro de overflow. A razão dessa incorreção é a natureza finita da representação
desses números. Da mesma maneira, um resultado nas regiões 3 e 5 vai gerar um erro de underflow.
Outra diferença importante entre os números em ponto flutuante e os números reais é a sua
densidade. Entre dois números reais quaisquer, existe outro número real, não importa quanto um
está próximo do outro, pois os números reais variam de forma contínua. Já os números em ponto
flutuante variam de forma discreta, ou seja, existe uma determinada quantidade de números em
ponto flutuante que podem ser representados. Se o resultado de uma operação não puder ser
expresso na representação usada, será efetuado um arredondamento. Essa operação consiste
em escolher o número mais próximo do resultado esperado. Em outras palavras, usando-se a
representação em ponto flutuante, existe um erro relativo introduzido pelo arredondamento, tanto
para números grandes quanto para números pequenos.
Representação IEEE 754 para números em ponto flutuanteNos computadores, é utilizada uma variante da representação em ponto flutuante denominada
IEEE 754, podendo ser de precisão simples ou dupla, com 32 ou 64 bits respectivamente. Por
questões de eficiência, a exponenciação e a representação da mantissa são feitas na base
2, em detrimento da base 10. Deve-se considerar, ainda, que a parte inteira da representação
possui somente um bit, e que o valor desse bit deve ser sempre um. Para satisfazer tal
condição, é necessário que o bit mais à esquerda da mantissa seja deslocado uma posição à
esquerda, sendo o expoente decrementado de uma unidade, sem que o valor do número sofra
modificações, até que a condição seja satisfeita. Essa representação normalizada é melhor que
Disciplina: Arquitetura de Computadores
55
a não normalizada, pois garante somente uma forma de representar o número. Além disso, a
combinação do 1 implícito (parte inteira em binário), do ponto binário implícito e do 23 ou 52 bits
é chamada de significante, em vez de mantissa.
Usando o conceito de significante e visando garantir maior eficiência computacional, a parte
inteira do número, bem como o ponto binário, não são armazenados de acordo com o formato
IEEE 754. Na Figura 24, são apresentados os formatos em precisão simples e dupla. Perceba que
é o somatório da quantidade de bits de cada campo que define a precisão da representação.
Bits
Sinal
Bits
1
1
8
11
23
Bits
(a)
(b)
52
Expoente Significante
Expoente Significante
Sinal
FIGURA 24: Formatos IEEE 754. (a) Precisão simples. (b) Precisão dupla
As características numéricas dos números em ponto flutuante expressos no formato IEEE 754
são apresentadas na Tabela 7. Perceba que o expoente é representado em excesso, de 127 ou
1023, conforme o caso. Esse tipo de representação é usado para não haver necessidade de
armazenamento de números negativos no expoente, pois, se desejamos armazenar o valor -127
como expoente de um número em ponto flutuante, devemos adicionar 127, o que resultará no
valor zero. Expoente menor que -127 ou maior que +127 não é possível armazenar usando o
padrão IEEE 754. Outra consideração sobre a Tabela 7 é sobre o valor do bit de sinal do número.
Quando o valor desse bit for zero, o número é positivo; se o valor for 1, o número é negativo.
TABELA 7Características do formato IEEE 754
Ítem Precisão simples Precisão duplaBits do campo de sinal 1 1Bits do campo de expoente 8 11Bits do campo da mantissa / significante 23 52Número total de bits 32 64Sistema de representação do expoente Excesso 127 Excesso 1023Faixa de variação do expoente -126 a +127 -1022 a +1023
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
56
O padrão IEEE 754 define alguns outros tipos numéricos para atender situações nas quais os
números não estão normalizados ou mesmo indicar situações críticas de operações aritméticas.
O formato especial chamado NaN (Not a Number) indica, por exemplo, o resultado de infinito
dividido por infinito, que é indefinido. Veja a relação dos formatos IEEE 754 na Tabela 8.
TABELA 8Tipos numéricos IEEE 754
Normalizado 0<Exp< Max Qualquer configuração de bits+-
+-Não-Normalizado 0 Qualquer configuração de bits
+-Zero 0 0
+-Infinito 111.... 1 0
+-Not a number 111.... 1 Qualquer configuração de bits
Exemplo de representação do número 0,5 nos formatos de precisão simples e dupla.
Desenvolvimento:
1. Converter o número 0,5 para binário. Usando o processo descrito na Unidade 2, temos
que 0,5 = 0,12.
2. Normalizar o número deixando a parte inteira valendo 1, encontrando o significante.
Então, 0,5 normalizado na base 2 é igual a 1,0 x 2-1 (significante = 0).
3. Calcular o valor do expoente com excesso e converter para binário 8 ou 11 bits:
a. Para precisão simples (8 bits) + 127: -1 + 127 = 126
Expoente = 011111102
b. Para precisão dupla (11 bits) + 1023: -1 + 1023 = 1022
Expoente = 011111111102
4. Definir o sinal. Como o número 0,5 é positivo, sinal = 0
5. Montar o número no padrão IEEE, concatenar as seguintes partes:
sinal+expoente+significante:
Disciplina: Arquitetura de Computadores
57
a. Precisão simples:
0+01111110+00000000000000000000000
b. Precisão dupla:
0+01111111110+00000000000000000000000000000000000000000000000
6. Como é trabalhoso manipular números em binário, apresentar a solução em hexadecimal.
Então:
a. Precisão simples:
0011.1111.0000.0000.0000.0000.0000.00002 = 3F00000016
b. Precisão dupla:
0011.1111.1110.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.
00002 = 3FE000000000000016
Deve-se registrar que, adotando o procedimento inverso, é possível converter do formato
IEEE para decimal.
Nesta unidade foram apresentados formatos de representações para números positivos
e negativos, tanto inteiros quanto reais. A escolha do formato usado em um determinado
processador é prerrogativa dos engenheiros projetistas, quando estão definindo a arquitetura da
máquina. Deve-se observar que os formatos apresentados estão intimamente associados aos
tipos de dados das linguagens de programação.
Tomando a linguagem C como exemplo, o tipo de int está associado ao formato de representação
complemento a base. Como o computador trabalha com o sistema binário, o tipo int representa
números no formato C2 em 16 bits. Então, é possível explicar por que o maior número
armazenado em uma variável desse tipo é +32767 e o menor é -32768. Com base nos conteúdos
apresentados, também é possível entender mensagens de erros do tipo “NaN error”, geralmente
apresentadas em aplicações Windows. Quando isso acontece, certamente o resultado de uma
operação resultou em um número não identificado pela linguagem, ocasionando a mensagem
e, muito provavelmente, a parada do sistema.
UNIDADE 3: REPRESENTAÇÕES NUMÉRICAS
58
ReferênciasSTALLINGS, W. Arquitetura e Organização de Computadores. 5. ed. São Paulo:
Pearson Education do Brasil, 2002.
TANENBAUM, A. Organização Estruturada de Computadores. 4. ed. São Paulo:
Prentice-Hall, 2006.
Disciplina: Arquitetura de Computadores
59
UNIDADE 4Sistemas digitais
OBJETIVOS
Conhecer e aplicar as propriedades da álgebra booliana no modelamento matemático de problemas computacionais; desenvolver habilidades para solucionar problemas matemáticos usando circuitos lógicos; interpretar o funcionamento de circuitos digitais; reconhecer e construir blocos lógicos usados na Organização de Computadores.
Circuitos lógicos Todos os dispositivos digitais são implementados por circuitos eletrônicos denominados
circuitos digitais. Como os circuitos eletrônicos são mais complexos e, portanto, mais difíceis
de serem analisados e entendidos por pessoas que não possuem uma formação específica
em eletrônica, é comum encontrar representações gráficas de circuitos digitais organizadas em
diagramas de blocos lógicos, estruturados de forma que cada um dos blocos apresenta uma
funcionalidade, sendo, na maioria das vezes, diferente dos demais blocos. Deve-se considerar,
ainda, que cada bloco está projetado para receber sinais de entrada, processá-los e apresentar
os resultados nos seus terminais de saída.
A maneira como um circuito digital responde a um estímulo de entrada é denominada de
“lógica do circuito”; daí surge o nome “circuito lógico”. Matematicamente, a lógica do circuito
é totalmente baseada na álgebra booliana, pela qual é possível expressar a relação entre as
entradas e saídas de um circuito lógico. De acordo com as bases da álgebra booliana, os
resultados de uma expressão lógica, bem como o valor de cada uma das variáveis que formam
uma expressão lógica, podem assumir apenas um de dois valores distintos, por exemplo, falso
ou verdadeiro, ligado ou desligado, sendo o mais comum 0 ou 1. Na prática, esses valores
lógicos estarão associados a grandezas físicas como a tensão ou a corrente elétrica.
Por meio da Figura 25, é possível visualizar as diferenças entre o circuito digital e a representação
do bloco lógico de um circuito somador de 2 bits. Note que toda a complexidade da organização
do circuito eletrônico foi abstraída a partir do uso de símbolos gráficos para descrever a
UNIDADE 4: SISTEMAS DIGITAIS
60
funcionalidade do bloco. Veja pelo sinal de adição e pelos nomes das linhas de entrada e saída,
bem como pela equação matemática que define o comportamento lógico do bloco.
S0
C0
A0
B0+
+ 5v + 5v + 5v
Q2
Q3
Q4
4 kΩ
1130 kΩ
1,6 kΩ1 kΩ
AB
S0
Diagrama Circuito em Bloco
Diagrama Circuito Eletrônico
Figura 25: Representações de um circuito digital
Porta lógicaO termo “porta” surge da necessidade de controlar a passagem de sinais lógicos ao longo do
circuito. O controle é efetuado pelas operações de habilitar/desabilitar, na medida em que cada
porta lógica pode ser utilizada para controlar a passagem de sinal lógico da entrada para a
saída. O valor/nível lógico da entrada de controle determina se o sinal de entrada está habilitado
a alcançar a saída ou impedido (desabilitado) de alcançá-la. Admite-se que as portas lógicas
também são dispositivos, ou circuitos lógicos, que operam um ou mais sinais lógicos de entrada
para produzir uma saída, que depende da função implantada no circuito. Tais dispositivos
implementam fisicamente as funções da álgebra booliana (soma, produto e complementação).
Disciplina: Arquitetura de Computadores
61
Nível lógicoO nível lógico, também denominado valor lógico, que cada uma das entradas e saídas de
um bloco ou porta lógica pode assumir, bem como os valores das variáveis das expressões
boolianas, é o 0 ou o 1, que não representam necessariamente os números, mas os estados
possíveis na lógica booliana. Nos circuitos digitais, esses níveis são representados, na maioria
das vezes, pelo nível de tensão elétrica. A Figura 26 apresenta um gráfico associando a
tensão do circuito elétrico com o nível lógico adotado para os circuitos digitais implementados
usando a tecnologia TTL (Transistor-Transistor Logic) padrão. De acordo com a tecnologia de
implementação, a relação nível lógico e tensão tende a mudar. As diferentes tecnologias de
implementação não são excludentes e nem mesmo concorrentes. Deve-se considerar que são
complementares para circuitos lógicos que necessitam de alta velocidade de comutação dos
sinais lógicos. Ou seja, para portas lógicas mais rápidas, deve ser usada uma tecnologia. Por
outro lado, se o consumo de energia elétrica é mais importante no projeto de hardware do
dispositivo digital, emprega-se outra tecnologia.
5v
2v
0,8v
0v
Nível lógico 1
Faixa de tensão inválida
Nível lógico 0
Figura 26: Níveis lógicos x níveis de tensão para dispositivos TTL
Expressões boolianasComo mencionado anteriormente, o comportamento dos circuitos lógicos é descrito aplicando-
se as regras da álgebra booliana, que, por sua vez, é fundamentada por expressões lógicas ou
UNIDADE 4: SISTEMAS DIGITAIS
62
expressões boolianas. Cada expressão é formada por um conjunto de variáveis lógicas e de
operadores lógicos. Como regra básica, o valor que cada variável pode armazenar é somente
um, de um grupo de dois valores possíveis. Por convenção, serão utilizados somente os valores
0 e 1, mas podem ser quaisquer outros dois valores distintos.
Por outro lado, os operadores boolianos definem as regras de relacionamento entre as
variáveis, e são divididos em classes, conforme sua complexidade. A classe denominada
de operadores básicos é caracterizada pela implementação em uma única porta lógica. Já
a classe chamada de operadores compostos é formada por operadores implementados
por duas ou mais portas lógicas. Ainda sobre operadores, eles também se caracterizam pelo
número de variáveis que estão associadas na operação, podendo ser chamados de unários,
quando admitem somente uma variável na operação, e binários, na medida em que admitem
duas variáveis para a operação.
Operador básico unário
Existe somente um operador unário definido na álgebra booliana: é o operador NOT ou operador inversor,
que efetua a operação de complementação dos valores boolianos, ou seja, o valor 0, ao ser processado
pelo operador NOT, resulta no valor lógico 1, assim como o valor 1, ao ser processado pelo operador
NOT, resulta no valor lógico 0. Na Tabela 9 são apresentados o símbolo lógico definido para a operação
NOT, a regra matemática que define a operação através da tabela verdade e um exemplo de expressão
lógica usando o operador NOT. Nesse exemplo, a variável X armazena o resultado da operação e a
variável A, o valor inicial usado para processamento da operação.
Tabela 9: Apresentação do operador NOT
Tabela verdade Representação gráfica Expressão Booliana
Operadores básicos binários
A classe de operadores binários é caracterizada pelo envolvimento de duas variáveis na operação,
podendo-se considerar um número maior de variáveis com a utilização de mais operadores,
diferentemente do que acontece com o operador unário.
Disciplina: Arquitetura de Computadores
63
Na Tabela 10 são apresentadas as características do operador OR. Como pode ser observado
pela tabela verdade da operação, o resultado é 1 quando o valor de pelo menos uma variável
de entrada for também 1. Deve-se considerar que as variáveis A e B determinam as condições
iniciais de execução da operação, e a variável X armazena o resultado final da operação.
Tabela 10: Apresentação do operador OR
Tabela verdade Representação gráfica Expressão Booliana
A B X = A + B0 0 00 1 11 0 11 1 1
O operador AND define uma operação na qual o resultado 1 só será possível quando o valor de
todas as variáveis de entrada for igual a 1. Observe na Tabela 11 as características do operador
AND. Assim como usado nos demais operadores, a variável X está associada ao resultado da
operação, e as demais variáveis estão associadas às variáveis que determinam a condição
inicial da operação.
Tabela 11: Apresentação do operador AND
Tabela verdade Representação gráfica Expressão Booliana
A B0 0 00 1 01 0 01 1 1
O circuito lógico de qualquer dispositivo digital pode ser descrito usando-se as três operações
boolianas básicas apresentadas. Com a utilização das expressões boolianas de cada porta
lógica, é possível determinar a expressão lógica geral da saída de um circuito lógico f o r m a d o
por mais operadores lógicos. Contudo, deve-se considerar a precedência da operação
AND sobre a operação OR nas expressões algébricas, a menos que existam parênteses na
UNIDADE 4: SISTEMAS DIGITAIS
64
expressão definindo a ordem contrária. Nos exemplos a seguir, são apresentadas as combinações
dos operadores lógicos AND e OR e como tratar os casos de prioridades entre eles.
Exemplos:
a. Considere a expressão lógica X = A + B . C. Nessa expressão, a operação AND tem
precedência sobre a operação OR, representada pela soma lógica. Assim, o circuito/
diagrama lógico formado pela expressão é igual ao apresentado pela Figura 27.
A
B
B . C
Ax = A + B . C
Figura 27: Diagrama lógico da expressão X = A + B . C
b. Neste exemplo, a expressão considerada é X = (A + B) . C. Como existem os parênteses,
na operação OR deve-se realizar primeiro essa operação e depois a operação AND. Pela
figura 28 é possível avaliar o diagrama lógico correspondente à expressão dada.
A
B
A + B
C
x = (A + B) . C
Figura 28: Diagrama lógico da expressão X = (A + B) . C
Ainda sobre a combinação dos operadores básicos, veja, na Figura 29, mais exemplos da
combinação usando-se o operador NOT.
Disciplina: Arquitetura de Computadores
65
A A
B
x = A + B
A
B
A + B x = A + B
Figura 29: Combinações lógicas usando-se o operador NOT
Operadores compostos binários
Todas as expressões boolianas consistem em várias operações AND, OR e NOT combinadas
de diversas formas. Porém, existem outros dois operadores lógicos capazes de implementar
qualquer operação booliana. São os operadores lógicos NAND e NOR, classificados como
compostos, pois são constituídos por dois ou mais operadores básicos. Questionar sobre a
utilização de tais operadores no lugar das já conhecidas operações AND, OR e NOT é bastante
comum, porém pode-se citar um importante motivo para se fazer tal troca: a máxima utilização
das portas de um CI (circuito integrado). Os CIs TTL normalmente possuem 4 (quatro) portas
lógicas idênticas em um mesmo chip, conforme se pode verificar pela Figura 30. Suponha um
circuito lógico com uma porta lógica AND, duas OR e uma NOT. Precisaríamos de 3 CIs diferentes
e todos eles ficariam subutilizados, aumentando, assim, o custo e a área da implementação.
Figura 30: Visões internas de um circuito integradoFonte: WIDMER; TOCCI, 2011.
UNIDADE 4: SISTEMAS DIGITAIS
66
O operador NOR funciona de forma complementar ao operador OR, ou seja, para que a saída
dessa porta seja 1, é necessário que todas as variáveis de entrada sejam 0. Na Tabela 12 são
apresentadas as características do operador NOR.
Tabela 12: Apresentação do operador NOR
Tabela verdade Representação gráfica Expressão Booliana
A B
0 0 10 1 01 0 01 1 0
O operador NAND é complementar ao operador AND, apresentando em sua saída o valor lógico
1, sempre que pelo menos uma variável de entrada possua o valor lógico 0. Conheça mais
características dessa operação pela Tabela 13.
Tabela 13: Apresentação do operador NAND
Tabela verdade Representação gráfica Expressão Booliana
A B
0 0 10 1 11 0 11 1 0
Tipos de circuitos lógicosComo foi apresentado nas seções anteriores, os circuitos lógicos digitais são arranjos de
operadores lógicos capazes de realizar uma determinada tarefa. Esses arranjos trabalham de
acordo com as regras da álgebra booliana, podendo-se construir dois tipos de circuitos lógicos
distintos: os combinacionais e os sequenciais.
Disciplina: Arquitetura de Computadores
67
Circuitos combinacionais
São circuitos que apresentam os resultados de saída tão logo os valores de entrada sejam
alterados; não possuem referência de tempo, sendo denominados circuitos assíncronos. Assim,
à medida que os valores de entrada mudam, automaticamente os valores de saída dos circuitos
lógicos mudam, refletindo imediatamente as condições de entrada. Existem diversos exemplos
de circuitos combinacionais, como os circuitos lógicos apresentados pelas Figuras 27, 28 e
29. Outro exemplo importante, dada sua constante utilização em projetos e diagramas lógicos,
são os circuitos multiplexadores, ou simplesmente MUX. Os multiplexadores possuem diversas
aplicações em sistemas digitais de todos os tipos, tais como:
• Seleção de Dados
• Roteamento de Dados
• Sequenciamento de Operações
• Conversões Paralelo-Série
O MUX é um circuito lógico capaz de trabalhar com “n” fontes de dados, sendo que, através
de outro conjunto de variáveis de entrada, é possível selecionar uma das “n” fontes de dados
de entrada e transmitir o dado selecionado para um único canal de saída. Ou seja, ele funciona
como um seletor de dados, transferindo um dado de uma entrada “E” para a saída “S” de
acordo com as entradas de controle “C”. Veja pela Figura 31 o diagrama esquemático do MUX.
ENTRA
DA
CONTROLE
SAÍD
A
ENTRA
DA
CONTROLE
SAÍD
A
CONTROLE
SAÍD
A
ENTRA
DA
Figura 31: Representação geral de um multiplexador
Os circuitos lógicos que efetuam a operação inversa à multiplexação são os demultiplexadores.
Assim, os demultiplexadores são capazes de selecionar uma saída para o sinal de entrada
através das entradas de controle. Observe pela Figura 32.
UNIDADE 4: SISTEMAS DIGITAIS
68
ENTRADA
CONTROLE
SAÍDA
Figura 32: Visão geral de um demultiplexador
Circuitos sequenciais
São circuitos lógicos que apresentam ou atualizam os valores de saída de um determinado
bloco, assim que uma entrada especial, denominada entrada de clock, estiver mudando o
seu valor, seja de 1 para 0 ou de 0 para 1, tudo conforme o projeto de hardware. São circuitos
classificados como síncronos, ou seja, possuem uma forte relação/referência de tempo e
sincronismo entre os diversos blocos. Caracterizam-se por necessitarem de um circuito
analógico especial, chamado de circuito de clock.
Esse circuito especial está presente em todos os computadores digitais e é responsável por
gerar um sinal periódico regular, denominado sinal de clock, distribuído por toda a parte eletrônica
e usado como referência de tempo para os circuitos sequenciais, promovendo, de certa forma,
o sincronismo dos diversos blocos lógicos. Atualmente o valor do sinal de clock é usado como
referência para o a divulgação dos produtos no comércio de computadores.
O sinal de clock é um sinal elétrico que varia em intervalos de tempo regulares e periódicos.
Possui as seguintes características:
• Amplitude: Propriedade que define/indica o valor máximo da tensão ou corrente
elétrica de um sinal periódico regular, normalmente expressa em volt.
• Frequência (F): Grandeza elétrica que indica a velocidade na qual o sinal
periódico se repete por unidade de tempo, sendo expressa em Hertz (Hz), ou
seja, vezes por segundo.
Disciplina: Arquitetura de Computadores
69
• Período (T): Intervalo de tempo de duração de um ciclo, expresso em segundos.
Relação matemática entre frequência (F) e período (T): F = 1 / T.
• Ciclo: É a característica de um sinal periódico, a qual determina o início da repetição
desse sinal. Os termos “tamanho do ciclo” e “período” possuem o mesmo significado,
ou seja, o tempo que dura um ciclo.
Pela equação matemática, pode-se concluir que a frequência é inversamente proporcional ao
período. Veja pelo exemplo abaixo:
Considerando que a frequência de clock de um determinado computador é de 800MHz,
determine o seu período de clock.
Solução:
Como F = 1/T e F=800MHz, então T = 1/F, assim:
Como M = 106
Os conteúdos apresentados nesta unidade não esgotam o tema “sistemas digitais”, mais
especificamente “circuitos lógicos”. O que foi trabalhado, entretanto, servirá de base para o
entendimento das demais unidades e seus respectivos conteúdos. Se você se interessar pelo
tema, busque mais detalhes nas obras indicadas nas referências.
UNIDADE 4: SISTEMAS DIGITAIS
70
ReferênciasSTALLINGS, W. Arquitetura e organização de computadores. 5. ed. São Paulo: Pearson Education
do Brasil, 2002.
TANENBAUM, A. Organização estruturada de computadores. 4. ed. São Paulo:
Prentice Hall, 2006.
WIDMER, Neal S.; TOCCI, Ronald J. Sistemas Digitais: princípios e aplicações. 11. ed.
São Paulo: Prentice Hall, 2011.
Disciplina: Arquitetura de Computadores
71
UNIDADE 5 Organização básica de um computador
OBJETIVOS
Compreender detalhes técnicos das diferentes implementações de computadores digitais; identificar os elementos que compõem uma Unidade Central de Processamento (UCP); compreender as relações entre os blocos internos da UCP e o seu funcionamento; conhecer o ciclo de busca de instruções; interpretar o processo de execução de uma instrução.
Modelo de máquinasNo projeto e na construção de computadores digitais, são considerados basicamente dois
modelos ou arquiteturas de referência: o modelo de Von Neumann e o modelo Harward. No
primeiro, observa-se o uso de um único canal de comunicação entre os blocos lógicos que
compõem a máquina. O acesso a esse canal é compartilhado entre os blocos. No segundo, a
unidade de memória é subdividida em função do tipo de dado que é armazenado, forçando um
acesso diferenciado por parte da UCP (Unidade Central de Processamento). Essas organizações
podem ser visualizadas pela Figura 33.
Memória de dados
Memória de Instruções
Dispositivos de eENTRADA SAÍDA
UCP / CPU
CPUMemória Principal
Dispositivos de eENTRADA SAÍDA
Von Neumann Harvard
FIGURA 33: Visão geral das arquiteturas de Von Neumman e Harward
A diferença funcional entre os modelos apresentados está associada à forma como a UCP troca
dados com os demais blocos lógicos que compõem o sistema, o que impacta diretamente
o custo e o desempenho geral do sistema, conforme já mencionado na Unidade 1. Contudo,
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
72
independentemente do modelo implementado, todos os computadores funcionam de forma similar,
exigindo os mesmos recursos, que são distribuídos por três grandes blocos lógicos: Unidade
Central de Processamento (UCP), memória principal e dispositivos de entrada e saída (I/O).
Tomando como referência a classe de computadores pessoais, genericamente chamados
de PC, os blocos lógicos possuem uma denominação particular: o bloco que representa a
memória principal é chamado de Ponte Norte; o bloco responsável pelo acesso e controle dos
dispositivos de entrada e saída é chamando de Ponte Sul; por último, mas não menos importante,
a UCP, que é representada fisicamente pelo Processador. A título de curiosidade, no mercado,
quando buscamos identificar as características da placa mãe de um PC, na verdade estamos
nos referindo às características dos blocos memória principal e Dispositivos de Entrada e Saída,
comumente chamados de chipset. O processador, ou tecnicamente falando, a UCP, pode ser
adquirida conforme a nossa necessidade e disponibilidade financeira. Deve-se observar que o
desempenho de um sistema computacional não está associado somente ao modelo e tipo de
UCP, mas às características técnicas dos três grande blocos de um computador.
No mercado existem dois grandes fornecedores de UCP para computadores pessoais: a
Intel e a AMD (Advanced Micro Devices). Em termos arquiteturais, os processadores para PC
desses fabricantes são compatíveis, diferindo somente quanto à implementação da arquitetura.
Historicamente, a Intel sempre esteve na vanguarda tecnológica para processadores de PCs, o
que se justificou por muitos anos devido à parceria firmada com a IBM, no final dos anos 1970,
para a produção exclusiva de processadores para os seus computadores.
Atualmente, o status de vanguarda tecnológica alterna com a AMD, tendo em vista que a
empresa mudou sua estratégia comercial e tecnológica, deixando de efetuar clonagens dos
processadores Intel, e passou a investir pesadamente em pesquisas para a implementação
de sua versão da Arquitetura x86. Como característica da implementação de processadores
da AMD, a parte de controle da memória principal está integrada na mesma pastilha (chip)
do processador (UCP), o que, de certa forma, proporciona melhoria no desempenho geral
do sistema e diminuição do custo da placa mãe, fato que chamou a atenção da Intel, que
passou a produzir processadores com a mesma característica, como é o caso dos modernos
processadores das séries i5 e i7.
Em linhas gerais, todos os computadores são compostos pelos três blocos lógicos já
mencionados. A seguir serão apresentadas as funcionalidades básicas de cada um dos
blocos, com destaque especial para a UCP, tendo em vista que os blocos referentes ao
controle dos dispositivos de entrada e saída, bem como a unidade de memória, têm sua
implementação padronizada.
Disciplina: Arquitetura de Computadores
73
Bloco dos dispositivos de I/OO princípio de funcionamento do bloco de controle e acesso aos dispositivos de entrada e
saída é igual para todos os computadores. A ideia básica é possibilitar a entrada de dados
para processamento pela UCP, e a saída de dados, seja para armazenamento externo, seja para
apresentação de resultados de operações de processamento pela UCP.
Atualmente é forte a padronização no processo de comunicação entre o dispositivo de
entrada e/ou saída e o sistema computacional. Existem padrões e protocolos de comunicação
que estabelecem as regras de comunicação, por exemplo, a interface de comunicação
USB (Universal Serial Bus), Fireware, o padrão de conexão de placas denominado
PCI, PCI Express, entre outros.
Como existe um padrão para a comunicação com os mais diversos dispositivos de entrada e
saída, ao implementar o bloco denominado Dispositivos de I/O, o fabricante de um determinado
computador utiliza circuitos integrados específicos para essa função, não necessitando de
investimentos em pesquisa e desenvolvimento de novas tecnologias para a implementação
de um dado padrão de comunicação. Existem diversos fabricantes de circuitos integrados que
se dedicam exclusivamente ao desenvolvimento de circuitos especializados em protocolos de
comunicação, disponibilizando-os em forma de pacotes ou conjunto de circuitos integrados,
denominados chipset. Cabe ao engenheiro de computação escolher o chipset mais indicado
para implementação.
Bloco de memória principalA unidade de armazenamento mais próxima à UCP é denominada memória principal. Conforme
proposto por Von Neumann, os dados e instruções que estão sendo processados pela UCP
devem obrigatoriamente estar armazenados no bloco memória principal.
Essa unidade de memória armazena dados e programas em formato digital, ou seja, somente
números, que são copiados e enviados à UCP ou para os dispositivos de entrada e saída, com
o propósito de armazenamento secundário (em massa) ou uso pelos diversos dispositivos de
saída. O bloco de memória principal, conforme sua implementação física, pode ser subdividido
em memória ROM e memória RAM.
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
74
A palavra RAM é o acrônimo de Random Access Memory, ou seja, “memória de acesso
aleatório”. São memórias que permitem o acesso a qualquer dado armazenado, na ordem
desejada, diferentemente dos primeiros modelos de memória, nos quais o acesso era
sequencial, ou seja, para acessar o último dado armazenado, era necessário efetuar a leitura
de todos os outros dados armazenados até chegar à posição do dado requerido. Na verdade,
as memórias do tipo ROM (Read Only Memory ou “memória somente para leitura”) também
possuem acesso aleatório. Atualmente a distinção entre RAM e ROM diz respeito ao tempo de
retenção do dado armazenado.
As memórias do tipo RAM são caracterizadas pela volatilidade do conteúdo armazenado, ou
seja, os dados armazenados nesse tipo de memória não são perenes, estão vulneráveis ao
fornecimento de energia elétrica ao módulo de memória. Todas as vezes que a energia do bloco
é desligada, os dados por ela armazenados são perdidos, necessitando ser reescritos todas
as vezes que a energia for restabelecida. Por outro lado, as memórias do tipo ROM não perdem
facilmente os dados armazenados, mas necessitam de um processo técnico especial para a
gravação de seus dados. Nesse tipo de memória, mesmo com a falta de energia elétrica por um
período muito longo – por exemplo, 30 anos –, os dados são mantidos.
Como se pode constatar pelo uso de um computador convencional, quando o usuário
edita um texto e não o salva, o conteúdo trabalhado é perdido sempre que houver falta de
energia elétrica. Por outro lado, todas as vezes que ligamos um computador, ele executa a
contagem e testes de memória, a inicialização de alguns periféricos e, por fim, a carga do
sistema operacional. Na verdade estamos, no primeiro exemplo, usando a memória RAM
e, no segundo, a memória ROM.
Organização básica das memórias
A memória principal é organizada como um conjunto de n células, ou posições de memória,
capazes de armazenar, em cada uma das posições, m bits. Por sua vez, cada célula é
identificada por um único número, chamado de endereço de memória, que nada mais é do
que um código binário de k bits, através do qual cada célula é referenciada. Os endereços
de memória são numerados de zero a n-1 e, como existem 2k possíveis endereços, então a
quantidade máxima de células de memória é 2k. Observe pela Figura 34 a estruturação visual
de um bloco de memória.
Disciplina: Arquitetura de Computadores
75
Conjunto de M bits = célula
Conjunto de N células = MEMÓRIA
Endereço de cada célula
0
1
2
n - 1
FIGURA 34: Representação visual da organização de memória
A célula é a menor unidade de memória endereçável, sendo que uma célula pode armazenar
qualquer uma das 2m possíveis combinações diferentes dos seus m bits. Então, os m bits de
uma célula são acessados simultaneamente. A variável m pode ser qualquer número inteiro,
mas, nos últimos anos, os fabricantes padronizaram um tamanho de 8 bits (1 byte).
A maioria das instruções e dados manipulados em um computador são maiores que 1 byte,
o que, de certa forma, sugere a necessidade de usar mais de uma célula de memória para
armazenar a mesma instrução ou dado. Então, para adequar o modelo de armazenamento
ao modelo de execução, os bytes de memória são agrupados em unidades múltiplas de
bytes, que são chamadas de Palavras. Os computadores, por sua vez, são conhecidos
pela forma como ordenam as palavras na memória principal. Quando a ordenação dos
bytes de uma palavra é feita da parte mais significativa para a menos significativa, temos
a chamada ordenação big endian. De outra forma, quando primeiro é efetuado o
armazenamento da parte menos significativa e depois o da parte mais significativa, temos
a ordenação little endian.
Cabe destacar que não existe problema em armazenar num ou noutro formato. O
problema está no processo de comunicação entre uma máquina big endian e uma
little endian. Veja pela Figura 35 a diferença entre os dois formatos no armazenamento
da palavra 3CB416.
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
76
0
1
2
n - 1
3C
B4
?
BIG ENDIAN
0
1
2
n - 1
B4
3C
?
LITTLE ENDIAN
FIGURA 35: Armazenamento no formato big endian e little endian
Estrutura interna da UCP e funçõesO bloco lógico referente à Unidade Central de Processamento é o mais importante dos sistemas
computacionais, pois é ele quem define as características funcionais do computador, através da
organização lógica dos seus diversos blocos internos, bem como a implementação da arquitetura
do seu conjunto de instruções. Tipicamente, as UCP são compostas por uma unidade lógica e
aritmética e uma unidade de controle e, dependendo da arquitetura implementada, existe uma
unidade destinada a armazenamento especial, denominada Banco de Registradores.
O princípio de funcionamento da UCP leva em consideração a existência de diversos blocos
lógicos capazes de executar pequenas operações. Estruturalmente, a UCP possui circuitos
lógicos capazes de executar as operações apresentadas a seguir.
Busca de instruções: para isso, existem mecanismos dedicados ao controle de execução de
programas, que são responsáveis por identificar a próxima instrução a ser executada e promover
a busca dessa instrução na memória principal. Essa operação é cíclica e acontece antes da
efetiva execução de cada instrução.
Disciplina: Arquitetura de Computadores
77
Interpretação de instruções: como não poderia ser diferente, existem internamente na UCP
circuitos digitais responsáveis por decodificar e interpretar o que deve ser efetuado em cada
instrução. Ainda faz parte do processo de interpretação de instruções definir quais dados fazem
parte da instrução e como acessá-los.
Busca de dados: considerando que os dados estão armazenados na memória principal e
que os circuitos de interpretação de instruções já localizaram o endereço de cada dado, um
outro circuito lógico adicional é capaz de efetuar a busca dos dados que fazem parte de uma
determinada instrução na memória principal, tecnicamente chamados de operandos. Eles
podem ser classificados como operando fonte e operando destino. Por exemplo, a operação
de adição de dois números suscita a existência de dois operandos fontes, que são as parcelas
da soma, e um operando destino, o qual deverá armazenar o resultado da operação.
Processar dados: como não poderia ser diferente, a principal operação efetuada pela UCP é
sobre os dados (operandos) de uma determinada operação. Todas as operações efetuadas são
de ordem matemática, podendo ser aritmética, lógica, movimentação ou deslocamento de bits.
Cada uma dessas instruções será apresentada formalmente na próxima unidade.
Escrever dados: os resultados de cada operação deverão ser armazenados em um local
específico (posição de memória), conforme estabelecido em cada instrução. O circuito lógico
especializado na busca de dados possui uma segunda funcionalidade, que permite o acesso
à memória principal para a escrita dos dados. As operações de leitura de dados dessa unidade
fazem somente uma cópia do conteúdo da célula de memória. Por outro lado, a operação de escrita
altera instantaneamente o conteúdo da célula, sobrepondo-se ao valor anteriormente armazenado.
Ainda sobre as características da UCP, deve-se destacar que ela possui um espaço de
trabalho temporário, como área de rascunho, para a execução das instruções chamadas de
registradores. O número e a função de cada registrador existente em uma máquina dependem
do projeto dessa máquina e, mais especificamente, de sua arquitetura, que varia de processador
para processador. O registrador pode ser comparado com uma célula de memória, porém
localizada internamente na UCP, com baixa latência na resposta a solicitações de leitura e escrita,
diferentemente da memória principal, na qual existe uma demora para a resposta às operações
de leitura e escrita.
Uma das maiores decisões a serem tomadas no projeto de uma UCP está relacionada com
o número e a função de cada um dos registradores. Como os registradores são unidades de
armazenamento implementadas internamente à UCP e considerando uma hierarquia do sistema
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
78
de memória, os registradores ocupam o topo da pirâmide hierárquica. Convém destacar que
o custo de implementação de cada registrador é elevadíssimo se comparado com o custo de
implementação de cada célula de memória. Os registradores, de acordo com sua especialidade,
são classificados em:
Registradores de propósito geral (RPG): todos os registradores que podem ser usados para
qualquer finalidade que envolva uma operação executada na UCP – por exemplo, operando
fonte, operando destino – ou como unidade de rascunho para a movimentação de dados.
Registradores de propósito específico (RPE): como o próprio nome indica, esses
registradores não podem ser usados em qualquer operação de forma arbitrária. Eles têm sua
funcionalidade definida no projeto da máquina e não podem ser mudados dinamicamente. O
uso dessa classe de registradores torna as operações da UCP mais simples e rápidas, se
comparado com o uso de registradores de propósito geral.
O uso de registradores de propósito geral aumenta a flexibilidade e as opções para os
programadores desenvolverem seus programas, podendo significar um aumento do tamanho
do programa e da complexidade das instruções disponíveis em uma determinada UCP. Por outro
lado, a implementação de unidades centrais de processamento somente com registradores
especializados torna as instruções mais rápidas e menos flexíveis, do ponto de vista do
programador, com um custo operacional e de implementação mais baixo do que o das UCP
baseadas em RPG.
O projeto ideal de uma máquina equilibra o uso desses registradores com base nas
características principais desejáveis para a nova UCP. Na verdade, o projeto de computadores
que visa alto desempenho computacional faz uso intenso de RPE e, por outro l a d o ,
computadores de propósito geral podem fazer uso somente de registradores de propósito
geral, o que compromete o desempenho da máquina. O número de registradores e o tamanho
das palavras manipuladas pela UCP são decisões tomadas pelos projetistas ainda na fase de
levantamento de requisitos. São exemplos de registradores usados nos projetos de UCP:
• Registrador de dados, normalmente usado como operando, fonte ou destino, de
operações aritméticas ou lógicas.
• Registrador de endereço, que, como o próprio nome sugere, é usado para facilitar o
acesso da UCP à memória principal, armazenando endereço de dados ou instruções.
• Registrador de status (SR), que indica a condição atual da máquina. Em todas as
Disciplina: Arquitetura de Computadores
79
operações executadas pela UCP, são registradas as condições finais de execução, ou
seja, se uma operação de adição é executada, o resultado da operação é armazenado
no operando destino, e as condições finais da operação são registradas pelo registrador
de status. As condições finais podem indicar se o resultado da operação foi zero, se
existe uma condição de overflow ou underflow, se o número final é par ou ímpar, positivo
ou negativo, entre outras informações que o arquiteto do computador quiser registrar.
Esse registrador é usado em operações que exigem a tomada de decisão quanto a
alterar o fluxo de execução de um determinado programa.
• Registradores não visíveis aos usuários e/ou programadores. Para que a UCP mantenha
funcionamento perfeito após a execução de cada instrução, devem ser disponibilizadas
internamente unidades de memória adicional, que não podem ser acessadas diretamente
pelos programadores ou usuários do sistema computacional. Como exemplo dessa
classe de registradores, pode-se destacar o Registrador de Instruções (IR), registradores
de endereços – como o Registrador de Retorno (RR), usado para permitir a volta do
programa após a chamada a uma função, procedimento ou interrupção –, ou mesmo o
registrador de pilha (SP – stack pointer). Os mecanismos de pilha serão apresentados na
unidade referente às arquiteturas do conjunto de instruções.
• Acumuladores são registradores especiais normalmente usados como operando destino
das operações aritméticas ou lógicas. A implementação dos acumuladores depende
exclusivamente da arquitetura usada no projeto da UCP.
• Contadores de programa (PC) são registradores de uso específico, e seu conteúdo
é controlado diretamente pelo hardware, podendo existir situações específicas
que requeiram a alteração de seu conteúdo dinamicamente através de software,
por exemplo, instruções de controle de fluxo do programa, para implementar uma
estrutura de repetição ou mesmo uma estrutura condicional. Esse é um tipo especial
de registrador de endereço, que sempre indica qual será a próxima instrução a ser
executada. Quando uma máquina é inicializada (ligada) ou reinicializada através do
botão de reset, o conteúdo desse registrador é zerado e, assim, ele aponta para a
instrução da posição zero de memória. O processo de zerar o valor do PC no momento
em que ele é ligado é tecnicamente chamado cold boot ou hard reset. Já o processo
que usa um botão específico é denominado warm boot ou soft reset. É claro que, em
algumas máquinas, o valor de inicialização desse registrador poderá ser diferente de
zero, mas, na verdade, o efeito operacional é o mesmo, ou seja, inicializar uma nova
instância de execução de instruções.
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
80
• Registradores de instruções (IR), que foram projetados exclusivamente para armazenar
a instrução que está sendo executada pela UCP e permitir a decodificação da instrução
pelo bloco lógico responsável. Lembre-se de que a instrução em execução foi buscada
na memória principal em um momento anterior ao início da sua execução.
Os registradores são elementos muito importantes para a formação de unidade de processamento,
contudo existem outros blocos lógicos que devem ser projetados para organizar o uso e
implementar as funções de cada registrador.
Principais blocos lógicos que compõem uma UCP
Unidade Lógica e Aritmética - ULA
A Unidade Lógica e Aritmética, comumente conhecida como ULA, é uma unidade exclusiva
para fins de execução de operações lógicas e aritméticas. É a alma do processador (UCP),
sendo que suas características funcionais definem a área de aplicação do computador. Se uma
determinada UCP possui uma ULA que efetua somente operações com números inteiros, então
não será viável executar programas que necessitam efetuar operações em ponto flutuante, por
exemplo, o cálculo da temperatura de um determinado ambiente, ou mesmo o processamento
de uma folha de pagamento de uma empresa.
Tipicamente, a ULA possui suporte a somente dois operandos de entrada e um operando
de saída. O tamanho ou a largura, em número de bits, do seu operando de saída é usado
como referência do processador no mercado. Assim, quando é anunciado um processador
de 64 bits, normalmente a saída da ULA desse processador possui a largura de 64 bits,
bem como deverá existir um ou mais registradores com essa largura ou tamanho. Pela
Figura 36, é possível identificar os principais sinais de entrada e saída da ULA. Um destaque
deve ser dado à ordem dos operandos de entrada, que influenciará efetivamente a
ordem de execução das operações.
Percebe-se, ainda, que exstem duas saídas: uma identificada como operando de saída, que
sempre possui o resultado da operação executada pela ULA, e outra que possui os sinais que
indicam o estado final de cada operação. Esses sinais serão armazenados no registrador de
status. Uma terceira entrada indica o código da operação a ser realizada.
Disciplina: Arquitetura de Computadores
81
1º OperandoOPERANDO FONTE 1
2º OperandoOPERANDO FONTE 2
Operação Destino
Status da ULASAÍDA DE CONTROLE
Operação
ULA
FIGURA 36: Unidade Lógica e Aritmética (ULA)
Unidade de Controle – UCON
A Unidade de Controle é projetada para efetuar a busca e a decodificação das instruções de
uma determinada UCP. Os códigos de cada instrução, bem como seu formato e modos de
endereçamento, fazem parte do projeto inicial da UCP. Além da decodificação das instruções,
essa unidade é responsável por efetuar os acessos à memória principal, a fim de ler instruções e
ler ou gravar dados. Para executar todas as instruções definidas pelo arquiteto do computador, é
necessário o emprego de vários registradores de uso específico. Na Figura 37, são apresentados
alguns registradores comumente usados na implementação das unidades de controle, bem
como a relação da UCON com os demais blocos. Deve-se destacar que o acesso externo à
UCP é efetuado pela UCON, e é ela quem controla o fluxo de dados para a ULA. A organização
geral de comunicação entre a UCON e a ULA define a arquitetura geral da máquina.
SP
RR
PC
IR
SRUCON
Controle interno
Dados Endereço Controle externo
FIGURA 37: Estrutura básica da Unidade de Controle (UCON)
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
82
Funcionamento da UCPQualquer que seja a implementação de Unidade Central de Processamento (UCP), que também
pode ser chamada de CPU ou mesmo Processador, dependendo da literatura estudada, ela possui
o modus operandi igual, estabelecido em três ciclos bem definidos e executados sequencialmente.
Quando uma máquina é inicializada, a frio ou a quente – cold boot, warm boot respectivamente
–, ela sempre vai executar o ciclo de busca de uma instrução, independentemente do modelo,
marca e tipo de computador. Após a busca da instrução, é iniciado o processo de decodificação
e interpretação, bem como são estabelecidas todas as condições necessárias para a execução
da referida instrução.
Na sequência, é iniciado o processo de execução, que normalmente utiliza a ULA, finalizando
com a escrita do resultado no operando destino da instrução executada. Após o encerramento
da escrita do resultado, a UCON inicia automaticamente um novo ciclo de busca de instrução,
a menos que a última instrução executada determine a parada da UCP. Um exemplo típico
desse tipo de instrução é a HALT, que é implementada pela maioria dos processadores. A única
forma iniciar um novo ciclo de busca de instruções é através do soft reset ou hard reset. Veja os
detalhes sobre os ciclos de trabalho de uma UCP:
1º. Ciclo de busca de instrução (Instruction Fetch)
Neste momento a UCON inicia a busca (cópia) da instrução localizada na posição de memória
indicada pelo registrador PC. Assim que uma cópia da instrução é armazenada no registrador IR,
o registrador PC é incrementado em uma unidade de palavra da máquina. Para processadores
de 8 bits, o PC é incrementado em um byte; para processadores de 16 bits, o PC é incrementado
em dois bytes, e assim sucessivamente. Após o incremento do PC, é encerrado o ciclo de
busca e inicializado o ciclo de decodificação de instrução.
2º. Ciclo de decodificação de instrução
Como a instrução a ser executada está armazenada no registrador IR, circuitos lógicos estão
ligados a esse registrador, com a finalidade de identificar as características da instrução, bem
como verificar a origem dos operandos da instrução e efetuar o cálculo do endereço de cada
um dos operandos.
Disciplina: Arquitetura de Computadores
83
3º. Ciclo de busca do operando (Operand Fetch)
Nessa etapa todos os operandos são buscados e encaminhados às respectivas entradas da
ULA. É possível que determinadas operações não necessitem da busca dos operandos, pois
eles já estão embutidos no código da própria instrução, ou a instrução não necessita carregar
os operandos.
4º. Ciclo de execução da operação
É nesse momento que a instrução é realmente efetuada, ou seja, a ULA deverá ser usada nesse
instante para efetuar uma operação lógica ou aritmética. Também existem operações que não
utilizam a ULA, mas é nesse momento que a ação indicada pelo programador é efetuada.
5º. Ciclo de armazenamento do resultado
Havendo necessidade de armazenamento do operando destino, somente nesse momento é
efetuada a escrita do resultado da operação na memória principal ou em outro elemento.
Ao finalizar a passagem pelo quinto ciclo, a UCP comanda automaticamente o início de outro
ciclo de busca, continuando sistematicamente a execução sequencial de cada um dos ciclos
apresentados. A parada desse processo pode ser feita por software, com o uso de uma instrução
específica que determine essa condição, ou por hardware, com o desligamento do sistema, na
incidência de erro interno à UCP, ou mesmo com o desligamento ou acionamento.
Nesta unidade foram apresentadas as características funcionais da Unidade Central de
Processamento (UCP) e seu funcionamento, através da apresentação dos seus ciclos de trabalho.
É importante conhecer esses detalhes técnicos para entender, futuramente, as particularidades
de cada instrução de máquina, bem como conhecer as diferentes implementações de UCP
UNIDADE 5: ORGANIZAÇÃO BÁSICA DE UM COMPUTADOR
84
ReferênciasSTALLINGS, W. Arquitetura e organização de computadores. 5. ed. São Paulo: Pearson Education
do Brasil, 2002.
TANENBAUM, A. Organização estruturada de computadores. 4. ed. São Paulo: Prentice-Hall, 2006.
Disciplina: Arquitetura de Computadores
85
UNIDADE 6Classificação do conjunto de instruções
Objetivos: Conhecer as alternativas de implementações de UCP, bem como as suas vantagens e desvantagens; relacionar os modelos de programação com as máquinas disponíveis no mercado; compreender as diferenças técnicas entre os modelos de máquinas RISC e CISC; classificar um conjunto de instruções em função do modelo de implementação da UCP.
Processamento monociclo e multicicloEm Arquitetura de Computadores, o termo processamento é usado para designar, de forma
geral, todo o processo de execução efetiva de uma única instrução. Conforme mencionado na
Unidade 5, mais especificamente quando foi apresentado o princípio básico de funcionamento
de uma UCP, existem pelo menos cinco ciclos de trabalho bem definidos para a efetiva execução
de uma instrução, ou melhor, para o processamento de uma instrução. Para relembrar, os
nomes de cada um dos ciclos são Busca de Instrução, Decodificação, Busca dos Operandos,
Execução e Armazenamento de Resultados.
Associando as tarefas desenvolvidas em cada um dos ciclos aos conceitos de cada arquitetura
do conjunto de instruções, mais especificamente no que tange à manipulação dos operandos,
é possível concluir que, conforme o número de operandos e o modo de endereçamento usado
em cada instrução, o processamento das instruções demanda tempos distintos para processar
cada instrução.
Por exemplo, na operação de adição na Arquitetura Pilha, a busca dos operandos e o
armazenamento do resultado demandam um tempo maior, em comparação com a Arquitetura
Acumulador. Se comparada à Arquitetura RUG, a execução da mesma operação leva um tempo
maior ainda. Isso se deve ao fato de que na Arquitetura Pilha, no ciclo de busca dos operandos
fontes, a UCP deverá efetuar dois acessos à memória principal (pilha); já com a Arquitetura
Acumulador, fará somente um acesso e, na arquitetura RUG, nenhum acesso.
UNIDADE 6: CLASSIFICAÇÃO DO CONJUNTO DE INSTRUÇÕES
86
O que devemos entender nessa situação é que, independentemente da arquitetura, a execução
efetiva de cada uma das instruções que formam o nível ISA demanda tempos diferentes para a sua
conclusão. Como as UCPs são constituídas por vários blocos lógicos, implementando funções
diversas e necessárias ao processamento de instruções, deve haver sincronismo para a troca de
dados entre os blocos, evitando-se que eles trabalhem com dados contaminados, ou seja, com
valores que ainda não fazem parte da instrução corrente. A Figura 45 ilustra uma situação na qual
a falta de sincronismo entre os blocos pode ocasionar um erro no armazenamento do resultado.
Considere a possibilidade de a ULA efetuar uma soma, por exemplo, 5+3, enquanto o bloco da
UCON, responsável pela busca de operando, ainda está carregando o segundo operando na
entrada da ULA e, no mesmo momento, o bloco da UCON projetado para armazenamento de
resultados já está processando a escrita do dado, na memória principal, de um valor qualquer
que está presente na saída da ULA. Se as máquinas digitais trabalhassem dessa forma, não
serviriam para nada.
UCONGrava:
10
Lê: 3
Dados Endereço Controle externo
ULA
5
Figura 45: Escrita de resultado anetecipadamente pode ocasionar erros de processamento
Para evitar esse e outros tipos de erros, os blocos lógicos dos computadores trabalham com um
tipo de circuito lógico que necessita de uma referência de tempo para estabelecer o sincronismo
entre os blocos. São os chamados Circuitos Combinacionais, apresentados na Unidade 4. Sua
referência de tempo é determinada por sinal especial chamado de Sinal de Clock. O período
Disciplina: Arquitetura de Computadores
87
desse sinal está intimamente associado ao tempo de processamento de cada instrução, que
pode ser chamando de Ciclo de Máquina, por ser um sinal que eletricamente estabelece um
padrão de comportamento da máquina. Fica então um dilema: qual deve ser o tamanho do
ciclo, ou período do Sinal de Clock?
Para responder a essa pergunta, os projetistas de hardware usam dois critérios distintos e
excludentes, ou seja, ao adotar um critério no projeto de uma máquina, o outro não será usado
no mesmo projeto. Eles são conhecidos como Monociclo e Multiciclo.
Monociclo
No modelo de processamento Monociclo, o tempo de execução de cada instrução é o mesmo,
independentemente da instrução. Parece que algo não está de acordo com tudo que já foi
apresentado ao longo desta disciplina, mas é verdade, os projetistas avaliam o comportamento
das instruções isoladamente e calculam o tempo necessário para processar totalmente cada
uma delas. Ao final de tudo, estabelecem o tamanho do Ciclo de Máquina (sinal que controla a
execução de instruções), pelo critério de tempo de execução da instrução mais demorada.
Por exemplo, considere a Tabela 30, na qual estão relacionadas as classes de instruções
empregadas em um determinado projeto, e os respectivos tempos de execução. É importante
observar que, para o cálculo do tempo de execução das instruções, já foi considerada a tecnologia
para a fabricação das pastilhas de circuito integrado, bem como os recursos financeiros a serem
investidos. Os cálculos são efetuados ainda na fase de projeto. Em outras situações, são usadas
ferramentas que permitem a simulação do circuito.
Pela referida tabela, identifica-se que as instruções da classe de Movimentação de Dados
demoram 1,25 nS (1,25 nanossegundos = 1,25 x 10-9 segundos = 0,00000000125 segundos)
e, assim, define-se o tamanho do Ciclo de Máquina. Ainda sobre esse exemplo, como o Ciclo
de Máquina é de 1,25 nS, a frequência de operação do processador é igual ao inverso do Ciclo
de Máquina. Então, nesse caso, o clock é de 800 MHz.
Tabela 30: Tempo de execução por classe de instruções
Classe de instruções Tempo em nSAritmética 1,16 1,16Controle 0,35 0,35Lógica 0,98 0,98
Movimentação de dados 1,25
UNIDADE 6: CLASSIFICAÇÃO DO CONJUNTO DE INSTRUÇÕES
88
No modelo Monociclo, mesmo instruções mais simples como a NOP, por exemplo, gastam
o mesmo tempo de execução de instruções que fazem uso intensivo de acesso à memória
dedados, com instruções de Movimentação de Dados.
As máquinas implementadas usando esse modelo são conhecidas como máquinas que
possuem uma baixa frequência de clock, tipicamente na ordem de 800 MHz. Por assim se
apresentarem, não dissipam tanto calor como as máquinas de clocks bem mais altos, por
exemplo, 2GHz e, consequentemente, tendem a consumir menos energia elétrica. É claro que
esses dados são relativos, pois os demais dispositivos físicos que compõem o hardware podem
impactar diretamente a relação entre calor dissipado e energia elétrica consumida. Dispositivos
móveis normalmente utilizam esse modelo pelas suas características físicas e elétricas (calor e
consumo). Entre os processadores que fazem uso desse modelo mais comuns no mercado,
destacam-se MIPS RS2000, RS3000, Qualcomm MSM7225 do Motorola Spice do Smart Phone
Motorola, que roda o sistema operacional Android, o Samsung Exynos Quad-Core, entre outros.
Multiciclo
Nas implementações Multiciclo, a metodologia para escolha do tamanho do Ciclo de Máquina
possui uma abordagem contrária à do modelo Monociclo, ou seja, a escolha considera o
tempo de execução da instrução mais rápida. Nesse contexto, para executar instruções mais
demoradas, são demandadas múltiplas unidades do Ciclo de Máquina, daí o nome modelo
Multiciclo. Para entender melhor, observe a Tabela 31. Note que o tempo mínimo gasto para
executar uma instrução é de 0,36 nS. Assim, de acordo com o modelo Multiciclo, o tamanho do
Ciclo de Máquina é igual ao tempo de execução da instrução mais rápida.
Na terceira coluna da Tabela 31, são apresentadas as relações entre o tempo de execução de
uma instrução de uma das classes e o tempo da instrução mais rápida. Perceba que o tempo para
executar as demais instruções passa a ser frações de tempo do Ciclo de Máquina. Na primeira
linha da tabela, por exemplo, o tempo mínimo necessário para a execução de uma instrução da
classe Aritmética é de 1,16 nS, necessitando de 3,22 ciclos de clock. Como tecnicamente são
mais onerosas implementações de frações de ciclos de máquina/ clock, criou-se o conceito de
Ciclos por Instrução (CPI), apresentado na quarta coluna da tabela.
Para calcular os CPI de uma determinada classe de instruções, basta efetuar o arredondamento
do valor encontrado na terceira coluna para um valor inteiro da quantidade de ciclos de clock, o
qual permite a execução completa da instrução.
Disciplina: Arquitetura de Computadores
89
Tabela 31: Relação Tempo de execução x CPI, modelo Multiciclo
Classe de instruções Tempo em nS t / ciclo de máquina CPIAritmética 1,16 3,32 4Controle 0,36 1 1Lógica 0,98 2,72 3Movimentação de dados 1,25 3,47 4
Pode-se perceber que, ao estabelecer o tempo base para execução das instruções em 0,36
nS, como no caso da Tabela 31, a frequência de clock é alta, na ordem de 2,7 GHz (2,7 giga-
hertz = 2,7 x 109 = 2.700.000.000 vezes por segundo). Isso significa que as máquinas que
operam no modelo Multiciclo geralmente possuem uma frequência de clock muito maior que as
máquinas do modelo Monociclo. Dessa forma, é natural um consumo de energia elétrica maior
e a necessidade de um sistema de arrefecimento mais eficiente, devido às altas temperaturas
apresentadas pelos processadores desse modelo. Comercialmente existem máquinas com
essa implementação disponíveis para uso pessoal e computação de baixo rendimento, como
as encontradas em escritórios, lojas e empresas de médio e pequeno porte. Os processadores
da Intel Xenon 3500, Core i7, bem como o AMD FX-8320, são exemplos de processadores
implementados segundo o modelo Multiciclo.
Como foi apresentado, os dois modelos de implementação de UCP são usados regularmente para
a produção de computadores comerciais. Existem vantagens e desvantagens no uso de um ou
de outro modelo. Do ponto de vista de implementação física da UCP, o modelo Monociclo é mais
interessante, pois é mais simples de ser construído, uma vez que não é necessário um bloco digital
de controle de número de ciclos para cada classe de instruções. Assim, ocupase menos espaço na
área interna da pastilha de circuito integrado (chip), o que contribui ainda mais para a menor dissipação
de calor e, consequentemente, para um consumo de energia elétrica mais baixo, o que torna esse
modelo mais indicado para aplicações usando dispositivos móveis. Por outro lado, dependendo do
programa a ser executado, o seu desempenho poderá ser pior no modelo Monociclo.
Não é possível afirmar que um modelo é melhor ou pior que o outro, no que se refere a desempenho
computacional, pois tudo está diretamente relacionado com o programa a ser executado, mais
especificamente com o conjunto de instruções que formam o programa. Quando um projetista
de hardware tem que escolher um modelo para a implementação de uma UCP, ele considera
inicialmente a classe de problema com que o novo processador irá trabalhar. Por exemplo, se
os cálculos iniciais de tempo de execução de instruções apontaram para os valores das Tabelas
UNIDADE 6: CLASSIFICAÇÃO DO CONJUNTO DE INSTRUÇÕES
90
30 e 31 e se a natureza dos problemas a serem tratados com o novo processador aponta para
a geração de programas que possuem uma quantidade muito grande de instruções da classe
de Controle e Lógica, é possível que ele tenha um desempenho satisfatório sendo executado
em uma máquina cujo modelo de implementação de UCP é Multiciclo. Por outro lado, se os
programas possuem um conjunto maior de instruções da classe de Aritmética e Movimentação
de Dados, o mais indicado é rodar em um processador que possui a implementação Monociclo.
A escolha do modelo de implementação de processamento envolve outras variáveis que ainda
não foram apresentadas, e que vão além de quesitos técnicos. Envolve questões financeiras,pois
o custo final também influencia o projeto, mas por ora esses aspectos não serão discutidos.
RISC versus CISCAté ao final da década de 1970, os projetos de novas UCPs eram focados na redução do “intervalo
semântico” entre as linguagens utilizadas para programar computadores e as linguagens de
máquina. Acreditava-se que tornar as linguagens de máquina mais parecidas com as linguagens
de alto nível resultaria num melhor desempenho, pela redução do número de instruções exigidas
para implementar um programa, bem como tornaria mais fácil traduzir um programa em linguagem
de alto nível para a linguagem de máquina. O resultado desse movimento culminou em projetos
de conjuntos de instruções que possuíam instruções muito complexas.
À medida que a tecnologia usada no processo de tradução entre as linguagens (compiladores)
se aperfeiçoou, os arquitetos de computadores começaram a questionar se os sistemas com
instruções complexas, conhecidos como Computadores com Conjunto de Instruções Complexas
– CISC (Complex Instruction Set Computer), realmente apresentavam melhor desempenho
que os sistemas baseados em conjuntos de instruções mais simples. Essa nova proposta
deabordagem ficou conhecida como Computadores de Conjunto de Instruções Reduzidas –
RISC (Reduced Instruction Set Computer).
O argumento principal a favor dos computadores CISC é que, para executar uma dada
operação, eles geralmente exigem menos instruções que os computadores RISC, de modo
que um computador CISC teria desempenho melhor que um computador RISC que executasse
instruções à mesma velocidade. Além disso, programas escritos para máquinas CISC tendem
Disciplina: Arquitetura de Computadores
91
a tomar menos espaço na memória que os programas escritos para máquinas RISC. Por outro
lado, os projetistas que acreditavam no projeto RISC alegavam que, com frequência de relógio
maior, um processador RISC permite que ele execute programas em menos tempo do que um
processador CISC.
Ao longo da década de 1980 e no início dos anos 1990, houve muita controvérsia na comunidade
de Arquitetura de Computadores sobre qual das duas abordagens era a melhor e, dependendo
do ponto de vista, qualquer uma das duas pode ser considerada melhor. Nos últimos anos,
tem havido certa convergência entre as duas propostas, o que torna difícil determinar se uma
implementação segue o modelo RISC ou CISC. Os projetos RISC incorporaram algumas
instruções complexas que são bastante úteis em um programa. Por outro lado, nos projetos
CISC, foram abandonadas instruções complexas, que não eram utilizadas com frequência
suficiente para justificar a sua implementação.
Uma diferença clara entre os modelos CISC e RISC refere-se ao acesso à memória. Em muitas
implementações CISC, instruções Lógicas e Aritméticas podem usar operandos diretamente
namemória principal, ao invés de usar somente os registradores de uso geral, como é a proposta
do modelo RISC. Por exemplo, é comum encontrar instruções em uma máquina CISC que podem
permitir uma operação de adição na forma ADD R1, R1, [#36], onde o segundo operando é
um dado oriundo diretamente da posição de memória 36. Ao passo que nas máquinas RISC,
primeiro o operando deverá ser carregado em um registrador de uso geral por uma instrução
específica para movimentação de dados com a instrução LOAD, para depois o operando ser
envolvido na operação de adição, sendo necessário o uso de uma instrução de movimentação
de dados antes da operação de adição.
Devemos entender que, no projeto RISC, cada instrução deve realizar operações mais
específicas, como somente somar, ou somente movimentar dados. No modelo CISC de
implementar instruções, uma operação de adição pode envolver mais ações que o simples fato
de somar, como movimentar dados e somar em uma mesma instrução.
Atualmente, encontram-se processadores híbridos, que são essencialmente processadores
CISC, mas que possuem internamente núcleos RISC. Assim, a parte CISC do processador
pode cuidar das instruções mais complexas, enquanto que o núcleo RISC pode cuidar das
mais simples, nas quais é mais rápido. Parece que o futuro nos reserva uma fusão dessas duas
tecnologias. Um bom exemplo de processador híbrido é o Pentium Pro, processadores I3, I5,
I7, todos da Intel.
UNIDADE 6: CLASSIFICAÇÃO DO CONJUNTO DE INSTRUÇÕES
92
A Tabela 32 apresenta uma comparação entre os modelos de RISC e CISC. Considere que, como
os processadores atuais apresentam uma implementação híbrida em sua arquitetura, possuem
características de um modelo e de outro simultaneamente. Em geral, a arquitetura do conjunto
de instruções se refere a qualquer aspecto da arquitetura que é visível por um programador em
linguagem assembly e que, de forma direta, impacta o desempenho do sistema computacional.
Assim, devemos tomar cuidado ao classificar as máquinas novas quanto ao seu conjunto de
instruções. A tabela mostra somente as características que, ao longo da história, apresentaramse
como as principais diferenças entre os modelos RISC e CISC.
Tabela 32: Comparações entre RISC e CISC
RISC CISC
Poucas instruções, podendo chegar em torno de 100. Muitas instruções, variando de 100 a 300 (tipicamente).
Instruções simples - efetuam operações elementares.Instruções mais elaboradas - podem efetuar diversas sub-operações.
Instruções rápidas, com o tempo de execução padronizado em um ciclo por instrução (CPI =1)
Possui instruções que são executadas em termos distintos (CPI varia de acordo com a classe da instrução).
Todos os códigos de máquina possuem o mesmo tamanho, pouca variação no formato.
Os códigos possuem tamanhos diferentes, com uma diversidade no formato das instruções.
Implementação Big-Endian. Implementação Little Endian.
Pouca ou nenhuma variação nos modos de endereçamento de uma instrução.
Uma mesma operação possui muitos modos de endereçamento.
Número razoável de registradores de propósito geral.
Tipicamente 32, havendo implementações com mais de 200.Poucos registradores de uso geral. Tipicamente 16.
Acesso à memória somente através das instruções LOAD e STORE.
Acesso à memória livre, dependendo somente do modo de endereçamento.
Operações Lógicas e Aritméticas somente entre registradores.Operações Lógicas e Aritméticas livre, controlada pelo modo de endereçamento.
Implementação tipicamente Monociclo Implementação tipicamente Multiciclo.
Nesta unidade foram apresentados os modelos de processamento Monociclo e Multiciclo, que
de certa forma impactam o desempenho computacional, o que exige, por parte do projetista
de computador, uma análise detalhada da classe de problemas a serem tratados pelo novo
processador, para a definição do modelo de processamento a ser implementado.
Disciplina: Arquitetura de Computadores
93
A diferença funcional básica entre os modelos encontra-se no tamanho do Ciclo de Máquina,
ou período de clock, que o projetista determina em função do tempo de execução da instrução
mais rápida ou mais lenta, estabelecendo-se, assim, o modelo Multiciclo ou Monociclo,
respectivamente. Nesta unidade, também foram discutidas e apresentadas as características
das máquinas RISC e CISC.
UNIDADE 6: CLASSIFICAÇÃO DO CONJUNTO DE INSTRUÇÕES
94
ReferênciasCARTER, Nicolas. Teoria e problemas de arquitetura de computadores. Porto Alegre: Bookman, 2003.
STALLINGS, W. Arquitetura e organização de computadores. 5. ed. São Paulo: Pearson Education
do Brasil, 2002.
TANENBAUM, A. Organização estruturada de computadores. 4. ed. São Paulo: Prentice-Hall, 2006.
Disciplina: Arquitetura de Computadores
95
UNIDADE 7Desempenho de computadores
Objetivos: Conhecer técnicas para cálculo de tempo de execução de um programa; entender o que é “performance” de computadores; resolver problemas de desempenho de computadores; entender o conceito e o uso de memória cache.
Medidas de desempenho A partir dos anos 1980, o desempenho dos computadores foi impulsionado por melhorias
significativas nas capacidades dos circuitos integrados utilizados para implementar a UCP: os
circuitos integrados de memória e de outros componentes de computadores. Com o passar do
tempo, o processo de fabricação de circuitos integrados incorporou tecnologias que permitiram
o aumento de densidade das pastilhas de circuito integrado, ou seja, o aumento da quantidade
de transistores e conexões por centímetro quadrado em uma pastilha de silício (material básico
para a produção de circuitos integrados). Houve também uma melhoria no tempo de resposta
dos circuitos, permitindo que cada porta lógica básica e dispositivos de memória tivessem
aumento de velocidade de resposta; já o espaço usado para acomodar todo o circuito eletrônico
ficou cada vez menor, consumindo menos energia e com mais eficiência computacional.
A vertiginosa evolução no desempenho dos computadores ao longo das últimas décadas foi
alavancada pelo aumento da velocidade de operação e da densidade de integração dos chips,
que foram aperfeiçoadas em uma escala geométrica, e não linearmente. Isso significa que,
quando se compara a melhoria no desempenho obtida em um determinado ano com a melhoria
alcançada no ano seguinte, a diferença entre o ganho em desempenho se mostra relativamente
constante, em vez de um valor absoluto constante. Em média, o número de transistores que
podem ser produzidos sobre uma pastilha padrão de silício aumenta cerca de 50% ao ano, e a
velocidade de comutação dos transistores aumentou tanto que o atraso no tempo de resposta de
uma porta lógica, que é formada por um conjunto de transistores, diminui 13% ao ano. Na literatura
técnica, a observação de que o desempenho dos computadores melhora geometricamente e
não linearmente é conhecida como a Lei de Moore (Gordon Moore, um dos fundadores da Intel).
UNIDADE 7: DESEMPENHO DE COMPUTADORES
96
Observadas as características dos produtos disponibilizados pela indústria do silício, o volume
de dados que pode ser armazenado em um circuito integrado de memória, por exemplo,
a RAM dinâmica (DRAM), aumentou em quatro vezes a cada três anos, considerando os
dispositivos comercializados desde o início da década de 1980, gerando uma taxa de
crescimento anual próxima de 60%.
Considerando somente o período compreendido entre o final da década de 1970 e o final da
década de 1980, o desempenho das UCPs (processadores) teve como mola propulsora o
aperfeiçoamento da tecnologia de fabricação de circuitos integrados, o que se refletiu num
crescimento anual de 35%. Daí em diante, a taxa de aperfeiçoamento efetivamente cresceu
para mais de 50% ao ano, embora a taxa do progresso de fabricação de semicondutores tenha
permanecido relativamente a mesma no período.
O aumento na taxa de desempenho dos computadores vem crescendo, tendo em vista também
as diversas melhorias na arquitetura e na organização de computadores. Os arquitetos têm
se mostrado cada vez mais capazes de tirar proveito da crescente evolução da densidade
de integração aplicada sobre os circuitos integrados, acrescentando recursos às UCPs, bem
como aos sistemas de memória, os quais proporcionam um ganho no desempenho acima
do aumento da velocidade dos transistores que os implementam. Para ilustrar isso, pode-se
destacar o uso de estruturas lógicas como o pipeline, que será apresentado mais adiante, o uso
de memórias do tipo DDR (Double Data Rate), técnicas como o overclock, implementação de
memórias cache, entre outras.
Avaliando um sistema computacionalNa seção 8.1, foram apresentadas justificativas para o aumento do desempenho dos
computadores, contudo o conceito de “desempenho de computadores” não foi apresentado
formalmente, pois o termo “desempenho” é vago quando utilizado no contexto de sistemas
computacionais. Geralmente, o desempenho descreve a rapidez com a qual um determinado
sistema pode executar um programa ou um conjunto de programas. Tipicamente, sistemas que
executam programas em menor tempo são considerados como de melhor desempenho.
Assim, melhor medida para definir o desempenho de um computador é o tempo de execução
de um programa que o usuário deseja executar. Geralmente é impraticável testar todos os
Disciplina: Arquitetura de Computadores
97
programas que serão executados em um dado sistema antes de decidir qual computador
comprar, ou mesmo quando é necessário tomar decisões durante a fase de projeto da máquina.
Assim, os engenheiros e cientistas da computação criaram algumas métricas para avaliar o
desempenho, e definiram certas unidades de medida para descrever o desempenho de
computadores. Também foram criadas unidades de medida para registrar o desempenho de
alguns subsistemas dos computadores.
Deve-se observar que, além do desempenho, diversos fatores podem influenciar decisões
de projetos ou de compra de computadores, como a facilidade para o desenvolvimento de
sistemas, pois o tempo e os custos necessários para desenvolver programas que sejam
efetivamente úteis podem ser mais significativos do que o benefício com o uso do programa; ou
mesmo a questão da compatibilidade dos programas entre as diversas máquinas disponíveis
no mercado, pois a maioria dos programas é comercializada no formato binário, ou seja, o
programa foi desenvolvido em uma linguagem de alto nível e posteriormente foi traduzido para
uma linguagem de máquina específica e pode ser executado somente por uma família de UCP
em particular. Se um determinado programa de que você necessita não pode ser executado
no computador que você tem, não importa a rapidez com que outro sistema pode executar o
mesmo programa.
Unidades de medidas de desempenho
MIPS
Uma das unidades de medida mais antigas para avaliar o desempenho de computadores
é a taxa pela qual a máquina executa instruções. Isso é calculado dividindo-se o número de
instruções executadas em benefício de um programa pelo tempo necessário para executá-lo,
e é tipicamente expresso em Milhões de Instruções Por Segundo (MIPS). Essa medida caiu em
desuso porque não leva em conta o fato de que diferentes sistemas, frequentemente, precisam de
números diferentes de instruções para implementar um dado programa. Compare os programas
apresentados ao longo da Unidade 6, e observe que, para as diferentes arquiteturas, o número
de instruções de um mesmo programa sofre variação. A taxa de MIPS de um computador nada
diz a respeito de quantas instruções são necessárias para executar uma data tarefa, tornando-a
menos útil do que outras unidades para comparar o desempenho de diferentes sistemas.
UNIDADE 7: DESEMPENHO DE COMPUTADORES
98
CPI
Outra unidade utilizada para descrever o desempenho de computadores está relacionada
com o número de ciclos de clock necessários para executar cada instrução, conhecida como
Ciclos Por Instrução (CPI). O CPI de um programa a ser executado em um sistema é calculado
dividindo-se o número de ciclos de clock usados na execução do programa pelo número de
instruções executadas.
IPC
Em sistemas que podem executar mais de uma instrução por ciclo, o número de Instruções
Por Ciclo, ou IPC, é frequentemente utilizado em detrimento da unidade CPI. O IPC é calculado
dividindo-se o número de instruções executadas pelo número de ciclos de clock necessários
para a execução do programa. Essa unidade está relacionada indiretamente com o CPI. De certa
forma, tanto o CPI quanto o IPC fornecem a mesma informação, e a escolha de qual unidade
deve ser usada geralmente é relacionada com os resultados obtidos usando cada métrica.
Quando se utiliza o IPC e o CPI para comparar sistemas, é importante lembrar que valores altos
de IPC indicam que o programa de referência demorou menos ciclos para ser executado do que
valores baixos de IPC, enquanto que valores altos de CPI indicam que foram necessários mais
ciclos do que valores baixos de CPI. Assim, um IPC alto tende a indicar bom desempenho; um
CPI alto indica um desempenho fraco.
Exemplo:
Um determinado programa é formado somente por uma estrutura de repetição constituída por
um conjunto de 100 instruções, as quais são executadas 42 vezes. Considerando que são
necessários 16.000 ciclos de clock para executar o referido programa em uma determinada
máquina, quais são os valores de CPI e de IPC do sistema para esse programa?
Resposta:
A estrutura de repetição possui 100 instruções e é executada 42 vezes, de modo que o número
total de instruções executadas é 100 x 42 = 4200. São gastos 16.000 ciclos para executar o
programa, de modo que o CPI é 16.000/4200 = 3,81. Para calcular o IPC, basta dividir 4200
instruções por 16.000 ciclos, perfazendo um IPC de 0,26.
Disciplina: Arquitetura de Computadores
99
Em geral, o IPC e o CPI são medidas ainda menos úteis de desempenho para os sistemas
atuais do que o MIPS, porque eles não contêm qualquer informação a respeito da frequência de
clock da máquina ou de quantas instruções o sistema exige para executar uma tarefa.
Sabendo qual é a taxa de MIPS de um sistema para um determinado programa, é possível
multiplicá-la pelo número de instruções executadas no sistema para determinar quanto tempo
levou para o programa ser executado. Por outro lado, conhecendo-se a taxa CPI de um sistema
para um dado programa e multiplicando-se pelo número de instruções executadas, encontra-
se o número de ciclos que foram gastos para completar o programa, contudo, usando-se essa
unidade de medida, deve-se conhecer a frequência de clock do sistema para se determinar o
tempo de execução do programa.
Como resultado, o CPI e o IPC raramente são utilizados para comparar sistemas computacionais
atuais. No entanto, são unidades muito comuns na pesquisa de Arquitetura de Computadores,
porque a maior parte desse tipo de pesquisa é feita com programas que simulam uma arquitetura
em especial, para estimar quantos ciclos um dado programa irá utilizar para ser executado naquela
arquitetura. Esses simuladores geralmente são incapazes de prever o ciclo de tempo dos sistemas
que eles simulam, de modo que o CPI / IPC é a melhor estimativa de desempenho disponível.
FLOPS
Computadores modernos e desenvolvidos com foco em aplicações científicas, ou que necessitam
manipular uma massa muito grande de dados numéricos, possuem unidades operacionais
específicas para cálculos numéricos que empregam número em ponto flutuante, como é o caso
dos processadores Pentium, i3, i5 entre outros, que possuem uma ULA dedicada à execução
de instruções que envolvem números em ponto flutuante. Considerando essa especificidade, foi
criada uma métrica que avalia o desempenho dessas unidades, chamada de FLOPS (Floating-
point Operations Per Second), que expressa a quantidade de operações com ponto flutuante
realizadas em um segundo.
É importante observar que essa unidade de medida deve ser usada somente para comparar
máquinas que possuem uma ULA específica para esse tipo de operação, ou quando se
deseja saber quanto será o ganho, em termos de desempenho, ao comparar máquinas com
implementação que não possuem essas unidades especializadas. Ou seja, a unidade FLOPS
não deve ser usada de forma geral como as unidades de medidas CPI, IPC ou MIPS.
UNIDADE 7: DESEMPENHO DE COMPUTADORES
100
Como os computadores são capazes de realizar milhões de operações por segundo, podem
ser adotados os múltiplos da unidade de medida FLOPS. A Tabela 33 apresenta a relação
entre a unidade básica FLOPS e seus múltiplos, considerando os prefixos oficiais do Sistema
Internacional de Unidades.
Tabela 33: Múltiplos de FLOPS
Prefixo Ordem de grandeza Escala curtaRelação com a unidade
básica
M MFLOPS (megaflops)milhão de operações em ponto flutuante por segundo
1 x106
G GFLOPS (gigaflops)bitão de operações em ponto flutuante por segundo
1 x109
T TFLOPS (teraflóps)trilhão de operações em ponto flutuante por segundo
1 x1012
P PFLOPS (petaflops)quadrilhão de operações em ponto flutuante por segundo
1 x1015
E EFLOPS (exaflops)quintilhão de operações em ponto flutuante por segundos
1 x1018
Z ZFLOPS (zettaflops)sextilhão de operações em ponto flutuante por segundo
1 x1022
Y YFLOPS (yottaflops)septilhão de operações em ponto flutuante por segundo
1 x1024
Conjunto de Benchmark
Como foi apresentado, tanto o MIPS quanto o CPI ou mesmo o IPC possuem limitações
significativas como medidas de desempenho de computadores, principalmente quando
se deseja comparar dois sistemas computacionais distintos. Os Conjuntos de Benchmark
(ferramentas de referência para medição de desempenho) são alternativas para efetuar medidas
e avaliações de desempenho de computadores que foram desenvolvidas para resolver as
limitações apresentadas pelas métricas MIPS, CPI e IPC. Observa-se que o FLOPS possui uma
aplicação específica e é usado pelas ferramentas de Benchmark.
Uma ferramenta de Benchmark é formada por uma série de programas semelhantes a diversos
tipos de programas que serão executados pelos sistemas computacionais. A pontuação de um
sistema na ferramenta de Benchmark é baseada em quanto tempo o sistema leva para executar
todos os programas que compõem a ferramenta. Existem muitas ferramentas de Benchmark
Disciplina: Arquitetura de Computadores
101
diferentes, que geram estimativas do desempenho de um sistema com diferentes tipos de
aplicações. Uma das ferramentas de Benchmark mais conhecidas é a suíte SPEC, produzida
pela Standatd Performace Evaluation Corporation.
As ferramentas de Benchmark apresentam diversas vantagens sobre MIPS e CPI e IPC. Primeiro,
seus resultados de desempenho são baseados em tempos totais de execução, não na taxa de
execução de instruções. Segundo, elas fazem uma média do desempenho do sistema por vários
programas, de modo a gerar uma estimativa de sua velocidade média. Isso torna a avaliação
geral do sistema por uma ferramenta de Benchmark um indicador melhor do seu desempenho
geral do que a avaliação MIPS em qualquer programa isolado. Além disso, muitas ferramentas
de Benchmark exigem que os fabricantes de computadores publiquem os resultados dos
seus sistemas usando programas individuais do Benchmark, bem como a pontuação geral
do sistema no conjunto de Benchmark, tornando possível fazer uma comparação direta de
resultados individuais dessas ferramentas. Assim, é possível identificar que um sistema será
utilizado para uma aplicação em especial.
Média geométrica versus média aritmética
Muitas ferramentas de Benchmark utilizam a média geométrica, em vez de média aritmética, para
calcular a média dos resultados dos programas contidos no conjunto de Benchmark, porque
um único valor extremo tem impacto menor sobre a média geométrica de uma série do que
sobre a média aritmética. Utilizar a média geométrica torna mais difícil que um sistema atinja uma
pontuação alta no Benchmark, ao atingir um bom desempenho em apenas um dos programas
do conjunto, fazendo com que a pontuação geral do sistema seja um indicador melhor do seu
desempenho com a maioria dos programas.
A média geométrica de n valores é calculada multiplicando-se os n valores e tirando-se raiz
enésima do produto. A média aritmética, ou média de um conjunto de valores, é calculada
somando-se todos os valores e dividindo-se o resultado pelo número de valores.
Aceleração
Frequentemente, os projetistas de computadores utilizam o termo aceleração para descrever
como o desempenho de uma arquitetura muda à medida que diferentes melhoramentos são
feitos nela. A aceleração é simplesmente a razão entre os tempos de execução antes e depois
que mudança é feita, de modo que:
UNIDADE 7: DESEMPENHO DE COMPUTADORES
102
Aceleração = Tempo de execuçãoantes / Tempo de execuçãodepois
Por exemplo, se um programa demora 12 segundos para ser executado em uma versão de uma
arquitetura e 7 segundos para ser executado em uma nova versão, a aceleração geral é de 12
segundos / 15 segundos = 1,714.
Lei de AMDAHL
É a regra mais importante para projetar sistemas de computadores de alto desempenho e fazer
com que a instrução mais comum seja a mais rápida. Qualitativamente, isso significa que o
impacto de um dado aperfeiçoamento sobre o desempenho geral do sistema depende tanto
de quanto o aperfeiçoamento melhora o desempenho quando ele é utilizado, como de com que
frequência esse aperfeiçoamento é utilizado. Quantitativamente, essa regra foi expressa pela Lei
de Amdahl, que define:
Tempo de execuçãonovo = Tempo de execuçãoantigo x [Parcelanão_usada + (Parcelausada/Aceleraçãousada)]
Na equação, Parcelanão_usada é a parcela de tempo (não instruções) na qual o aperfeiçoamento
não está em uso; Parcelausada é a parcela de tempo na qual o aperfeiçoamento está em uso
e Aceleraçãousada é a aceleração que acontece quando o aperfeiçoamento é usado (isto é, a
aceleração geral se o aperfeiçoamento fosse utilizado o tempo todo). Note que Parcelausada
e Parcelanão_usada são calculadas utilizando o tempo de execução antes que as modificações
sejam aplicadas.
Uso de pipelineOs processadores mais antigos executam as instruções de modo muito direto, ou seja, a UCON
busca uma instrução na memória principal e a armazena no IR (ciclo de busca de instrução - BI). Na
sequência, a instrução é avaliada e decodificada, permitindo identificar qual operação efetivamente
deverá ser executada e quais operandos estão envolvidos na operação (ciclo de decodificação da
instrução - DI). O próximo estágio do processo de execução é referente à leitura dos operandos
(ciclo de busca do operando - BO), seguido pela fase de execução da operação (EX) e finalizando
com a escrita/armazenamento do resultado (ER). Essa sequência é ilustrada pela Figura 46:
Disciplina: Arquitetura de Computadores
103
BI DI BO EX ER
1º 2º 3º 4º 5º
Figura 46: Estágios de execução de uma instrução
Considerando-se o diagrama funcional apresentado pela Figura 46, pode-se imaginar que as
unidades lógicas usadas para implementar cada um dos ciclos de execução de uma instrução
são teoricamente diferentes, pois envolvem operações lógicas distintas, podendo-se concluir
que, à medida que uma determinada instrução vai sendo executada, as unidades funcionais já
utilizadas ficam ociosas, havendo, de certa forma, um desperdício momentâneo de hardware.
Em analogia ao processo de execução de instruções por parte dos processadores mais antigos,
imagine uma lavanderia que possui os seguintes estágios no seu processo de lavagem:
1º. Receber a trouxa de roupa
2º. Lavar
3º. Secar
4º. Passar
5º. Entregar
Ainda sobre o funcionamento da lavanderia, considere que ela possui a capacidade de
efetuar todo o processo em somente uma trouxa de roupa por vez, demorando cerca
de 10 minutos em cada estágio. Dessa forma, são necessários 50 minutos para atender
cada cliente que chegar com uma trouxa de roupa. Não é difícil imaginar uma melhora nos
processos dessa lavanderia, pois, havendo um investimento em pessoal e sincronismo
entre os processos, é possível atender a mais de um cliente por vez. É claro que o tempo
de lavagem da trouxa não muda, mas a vazão nos processos da lavanderia melhoraria
significativamente.
O que está sendo proposto é a otimização de todas as unidades funcionais da lavanderia,
com pelo menos um funcionário responsável em cada estágio, e a sincronização entre
os processos. Assim, o primeiro estágio só poderá receber uma nova trouxa de roupa
quando finalizar a recepção da trouxa já iniciada. Por sua vez, o estágio de lavagem das
roupas não poderá iniciar uma nova lavagem antes de terminar e entregar a lavagem
UNIDADE 7: DESEMPENHO DE COMPUTADORES
104
corrente. Assim deverá ser a política de trabalho em todos os estágios dessa lavanderia.
A Figura 47 ilustra o funcionamento após a recepção da primeira trouxa de roupa, seguida
pelas demais trouxas. Observe que a primeira trouxa será entregue 50 minutos depois de
recebida, assim como as demais; o que melhorou no processo é que, a cada 10 minutos,
uma trouxa de roupa está pronta para ser entregue, o que aumenta a vazão do sistema
de 1 para 5 trouxas a cada 50 minutos. É claro que a melhoria aparece após a entrega da
primeira trouxa.
Trouxa 2Trouxa 3Trouxa 4Trouxa 5
Trouxa 1
Trouxa 2Trouxa 3Trouxa 4Trouxa 5
Trouxa 1
Trouxa 2Trouxa 3Trouxa 4Trouxa 5
Trouxa 1
Trouxa 2Trouxa 3Trouxa 4Trouxa 5
Trouxa 1
Trouxa 2Trouxa 3Trouxa 4Trouxa 5
Trouxa 1......
...
......
...
...... ...
Processo
Tempo
...
10`20`30`40`50`60`70`80`90`
Receber Lavar Secar Passar Entregar
Figura 47: Temporização do processo de lavagem de roupas
Se a mesma metodologia usada na lavanderia for aplicada para a otimização da execução das
instruções em um processador, será usada uma técnica denominada Pipelining, que na verdade
é usada para sobrepor a execução de diversas instruções, visando reduzir o tempo de execução
de um programa e não de uma instrução propriamente dita.
O pipeline é uma estrutura eletrônica usada para implementar uma lógica adicional de controle de
execução de instruções pela UCON, que permite a utilização de unidades operacionais ociosas
em benefício de um programa. O uso dessa estrutura pode melhorar o tempo de execução de um
programa desde que não ocorram conflitos no pipeline. A Figura 48 apresenta uma implementação
de pipeline em forma de blocos lógicos e o uso de registradores entre cada os blocos da unidade
de controle, o que permite a implementação da metodologia de sobreposição de instrução, em
que cada um dos registradores internos isolam as unidades operacionais envolvidas.
Disciplina: Arquitetura de Computadores
105
Registrador B
I/DI
Registrador D
I/BO
Registrador B
o/EX
Registrador EX/ER
Figura 48: Uso de registradores para implementar um pipeline de 5 estágios
O uso de pipeline não é a solução definitiva para o aumento de desempenho em sistemas
computacionais. Existem diversos problemas com o uso de pipeline que definitivamente
diminuem o seu rendimento geral. A maioria dos problemas pode ser resolvida pelo
programador ou pelo aplicativo tradutor (compilador), seja alterando a ordem de execução
de algumas instruções do programa ou mesmo eliminando estrutura condicionais e/ou
de repetição em um programa. Tipicamente os problemas encontrados com o uso de
pipeline podem ser:
Estruturais
São problemas oriundos da impossibilidade de uso de alguma unidade operacional da UCP;
por exemplo, a unidade lógica responsável pela busca de instruções conflita com a unidade de
busca do operando, no instante da execução de instruções que necessitam efetuar acesso à
memória principal para buscar um operando. Normalmente esse tipo de conflito não pode ser
controlado pelos programadores, sendo possível a solução somente ao longo do projeto do
pipeline, ou seja, é uma solução de implementação física.
Dependência de dados
Frequentemente é necessário executar em um programa uma sequência de operações lógicas
e/ou aritméticas. Estatisticamente, é provável que o resultado de uma instrução seja usado
pelas instruções seguintes. Assim, o problema aparece quando, dependendo do número de
estágios de um pipeline, a instrução imediatamente seguinte ou mesmo a segunda instrução
necessita usar esse resultado como fonte de sua operação, ou seja, o operando destino de
uma instrução será usado como operando fonte de uma operação subsequente.
UNIDADE 7: DESEMPENHO DE COMPUTADORES
106
Observe, na Figura 49, que o resultado da operação de adição ainda não foi gravado pela
unidade de escrita de resultado, e a instrução imediatamente posterior está efetuando a
leitura do valor do operando, ou seja, o dado usado pela operação de multiplicação está
contaminado, pois possui um valor que não pode ser considerado verdade para a operação.
Esse tipo de problema pode ser facilmente resolvido pelo programador/compilador com uma
simples troca da ordem das instruções ou mesmo inserindo-se uma instrução NOP para
estabelecer a distância necessária entre as instruções conflitantes.
Desvio
São raros os programas que não fazem uso de instruções de desvio, como as instruções JMP,
JZ, JNZ. O que deve ser avaliado com o uso de pipeline é que, sempre que houver um desvio,
o pipeline deverá ser esvaziado e carregado com o alvo da instrução de desvio, bem como
as instruções que a seguem, de certa forma, inserindo um atraso significativo no tempo de
execução do programa. Uma proposta de solução para esse conflito passa pela diminuição do
uso de estruturas que efetuam desvios, bem como uma análise detalhada do programa pelo
programador para alocar o trecho de programa que possui a menor probabilidade de execução
como alvo da instrução de desvio.
Para análise de desempenho dos computadores que utilizam pipeline, deve-se considerar a
latência e a taxa de vazão ou throughput. A latência indica o tempo necessário para a execução
de uma única operação. O througput indica a velocidade na qual um conjunto de instruções é
executado, ou taxa de rendimento, que tipicamente são expressas como instruções\segundo
ou instruções\ciclo).
Nos processadores que não utilizam pipeline, o throughput é igual ao inverso da latência (1\
latência), uma vez que cada operação é executada atomicamente (indivisivelmente). Nos
processadores com pipeline, o throughput deve ser maior que o inverso da latência, uma vez
que existe uma sobreposição de instruções. No entanto, a latência de um processador com
pipeline é igualmente importante, na medida em que a latência determina a frequência com que
instruções que geram conflitos podem ser executadas.
Disciplina: Arquitetura de Computadores
107
ADD R1, R2, R3MUL R4, R3, R1SUB R5, R6, R7SUB R5, R6, R7
MOV R1, 0
ADD R1, R2, R3MUL R4, R3, R1SUB R5, R6, R7SUB R5, R6, R7
MOV R1, 0
ADD R1, R2, R3
SUB R5, R6, R7SUB R5, R6, R7
MOV R1, 0
ADD R1, R2, R3MUL R4, R3, R1SUB R5, R6, R7SUB R5, R6, R7
MOV R1, 0
ADD R1, R2, R3MUL R4, R3, R1SUB R5, R6, R7SUB R5, R6, R7
MOV R1, 0......
...
......
...
...... ......
MUL R4, R3, R1
Figura 49: Conflito de dados no pipeline – R1 usado com destino e fonte
Uso de memória cacheOs dispositivos de armazenamento dos sistemas computacionais são hierarquizados em função
da sua proximidade com a ULA. Os elementos mais próximos possuem um tempo de resposta
extremamente rápido se comparados com os mais distantes, e até mesmo com a latência da
própria ULA. Por outro lado, o custo de implementação é inversamente proporcional ao tempo
de resposta de cada um dos elementos, o que de certa forma contrasta com o volume de
dados armazenado em cada nível hierárquico, pois, à medida que aumenta a distância em
relação à ULA, o volume para armazenamento aumenta. A Figura 50 ilustra a relação entre tempo
de resposta, distância e volume armazenado.
< volume armazenadoREGISTRADORES
MEMÓRIA CACHE
MEMÓRIA PRINCIPAL
MEMÓRIA SECUNDÁRIA> volume armazenado
Acesso mais rápido
Acesso mais lento
Figura 50: Hierarquia do sistema de memória dos dispositivos computacionais
Sob o ponto de vista de desempenho computacional, os dispositivos de armazenamento
mais indicados são os registradores, mas, devido ao custo de implementação muito alto, os
processadores/UCP possuem um conjunto limitado desse tipo de dispositivo de armazenamento,
UNIDADE 7: DESEMPENHO DE COMPUTADORES
108
que não é suficiente para armazenar um programa completo. Por outro lado, a memória principal
é um subconjunto do sistema de memória com características operacionais que devem permitir
o acesso à leitura e à escrita de dados e programas em um volume razoavelmente considerável,
mas possui um tempo de resposta alto, o que impacta negativamente o desempenho do
sistema computacional.
Para otimizar o desempenho sem aumentar significativamente o custo dos computadores, os
engenheiros projetaram um subsistema de memória intermediário entre a UCP e a memória
principal, denominado memória cache. A ideia básica na utilização de memória cache é esconder
o baixo rendimento da memória principal com a utilização de um pequeno banco de memória,
constituído de dispositivos com tecnologia similar à dos registradores, que de certa forma se
apresenta como um espelho de parte da memória principal (Figura 51). Para tanto, é necessário
utilizar um sistema auxiliar de controle de cache, que irá registrar quais endereços de memória
estão espelhados e atualizar os dados na memória principal sempre que necessário.
UCP
CACHEMemória Principal
Figura 51: Espelhamento da memória principal (memória cache)
Assim sendo, todas as vezes que a UCON efetuar um acesso à memória principal, deverá
verificar, primeiro, se o endereço acessado está na memória cache. Caso o endereço
acessado esteja na memória cache, o conteúdo é rapidamente lido pela UCON, não sendo
necessário efetuar acesso à memória principal. Nesse caso, dizemos que houve um «acerto
de cache”. Caso contrário, haverá uma “falha de cache”, obrigando a UCON a efetuar um
acesso à memória principal, e o sistema auxiliar de cache a copiar o conteúdo do endereço
acessado, bem como alguns outros endereços de memória da vizinhança, conforme o
comprimento da linha de cache, para atender a UCON em um futuro próximo e evitar acesso
Disciplina: Arquitetura de Computadores
109
à memória principal, ganhando em desempenho. Na verdade, o sistema de controle de
cache considera o princípio computacional da localidade para copiar dados da memória
principal na cache, pois a probabilidade de acessos a endereços próximos a um endereço
já acessado é muito alta.
O comprimento de linha de uma cache está relacionado com o tamanho do grupo de dados
que nela são copiados ou dela são eliminados, em resposta a uma falha na cache. Por
exemplo, se uma cache tem o comprimento de linha igual a 32 bytes, todas as vezes que
buscar um novo dado na memória, será copiado um bloco de 32 bytes de dados contendo
o endereço de falta e descartando outros 32 bytes para liberar espaço na cache.
Com relação ao processo de escrita de dados na memória principal, é possível seguir uma
de duas políticas básicas de escrita. A primeira, conhecida como write-through, orienta que,
todas as vezes que um dado for gravado na cache pela UCON, ele deverá ser gravado
imediatamente na memória principal. A segunda é chamada de write-back, pela qual a
atualização de um dado na memória principal se dá somente quando o sistema de controle de
cache encontrar uma “falha de cache”. Pode-se notar que a primeira política tende a diminuir
o desempenho do sistema, pois, sempre que um único dado for gravado pela UCON, será
necessário esperar o encerramento do processo de escrita na memória principal para efetuar
um novo acesso à memória.
Sob a ótica da segunda política, pode ocorrer a gravação de mais de um dado na memória
principal e, dependendo do programa, essa política será mais eficiente. Como regra geral
de uso de memória cache, programas que fazem acessos de escrita a memória principal
com muita frequência devem utilizar a política write-back, com, por exemplo, programas
de processamento de imagens. Por outro lado, para programas que fazem uso de poucas
variáveis e com uma frequência de atualização baixa é mais indicada a política write-
through. Na verdade, como não conhecemos a fundo a estrutura interna das aplicações, o
recomendado é efetuar testes de funcionamento das duas políticas. A título de curiosidade, a
troca da política de escrita de cache é normalmente efetuada pelo programa de configuração
do hardware (Setup do computador).
UNIDADE 7: DESEMPENHO DE COMPUTADORES
110
PeriféricosAinda sobre desempenho computacional, deve-se levar em conta as características e
a tecnologia dos dispositivos de entrada e saída, pois, sempre que for necessário ler
ou gravar um dado que está associado a um determinado dispositivo, a UCP deverá
aguardar o envio ou o recebimento dos dados por parte do periférico. Como os periféricos
normalmente utilizam sistemas mecânicos, ou dependem da manipulação direta do
homem para o seu funcionamento, há de se considerar que eles são muito mais lentos
que a UCP, contribuindo negativamente para o desempenho geral do sistema.
Periféricos mais modernos utilizam sistemas de memória cache para aumentar a sua
performance, mas deve-se lembrar que o custo de produção desses dispositivos é mais
alto que o dos demais. Outra alternativa para melhorar o desempenho geral dos sistemas
é a utilização de uma técnica conhecida como DMA (Acesso Direto à Memória), como
ilustra a Figura 52. Essa técnica faz uso da comunicação direta com a memória principal,
gravando ou lendo uma massa de dados nos momentos em que a UCP não está fazendo
uso do barramento de comunicação externo, lembrando o modelo de Von Neumman, e
assim evita que a UCP faça acessos diretos aos periféricos para manipulação de dados.
UCP
CACHE
Memória Principal
Dispositivos de Entrada e Saída
Processando ou acessando a cache
Periférico efetuando acesso direto a memória
Figura 52: DMA – Acesso Direto à Memória
Disciplina: Arquitetura de Computadores
111
Esta unidade apresentou alguns conceitos e tecnologias que impulsionam o desempenho
de computadores e forneceu um arcabouço de recursos para a discussão e a avaliação do
desempenho de sistema. Como foi apresentado, há vários modos de medir o desempenho de
computadores, e as medidas mais efetivas do desempenho geral são baseadas no desempenho
de um sistema com uma ampla variedade de aplicação.
Para prever o desempenho de um sistema em uma determinada aplicação, é importante
entender como uma dada unidade de desempenho foi concebida, de modo que se entenda
também qual é a sua utilidade. Vimos que o uso de técnicas de adiantamento de instruções
(pipeline) pode contribuir positivamente para o desempenho, mas cuidados devem ser tomados
para evitar os conflitos no pipeline. Vimos, ainda, como o uso de memórias espelho e técnicas
de DMA podem melhorar o desempenho de um sistema.
UNIDADE 7: DESEMPENHO DE COMPUTADORES
112
ReferênciasCARTER, Nicolas. Teoria e problemas de arquitetura de computadores. Porto Alegre: Bookman, 2003.
STALLINGS, W. Arquitetura e organização de computadores. 5. ed. São Paulo: Pearson Education
do Brasil, 2002.
TANENBAUM, A. Organização estruturada de computadores. 4. ed. São Paulo: Prentice-Hall, 2006.