Apostila de Arquitetura dos Computadores
Versão Preliminar – Setembro de 2005
1
Capítulo 1 – Evolução Histórica dos Computadores
1.1
INTRODUÇÃO:
1.1.1 Conceituação:
Mário A. Monteiro (Introdução à Organização de Computadores)
“Um computador é uma máquina (composta de partes eletrônicas e eletromecânicas) capaz de
sistematicamente coletar, manipular e fornecer resultados das manipulações de informações para
um ou mais objetivos.”
“Processamento de dados consiste em uma série de atividades ordenadamente realizadas, com o
objetivo de produzir um arranjo determinado de informações a partir de outras obtidas
inicialmente.”
“Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa
da coleta).”
“Informação é o resultado do processamento, isto é, o dado processado ou “acabado”.”
Dados
Processamento
Resultado: Informação
Figura 3.1 – Etapas básicas de um processamento de dados.
1.1.2 Sistemas:
“Um sistema é um conjunto de partes coordenadas que concorrem para a realização de um
determinado objetivo.”
O enfoque sistemático se faz presente em várias áreas do desenvolvimento comercial, científico,
industrial e social.
“Sistema de processamento de dados (SPD) são aqueles responsáveis pela coleta, armazenamento,
processamento e recuperação, em equipamento eletrônico, dos dados necessários ao funcionamento
de um outro sistema maior: o sistema de informação.”
a) Sistema de computação;
b) Sistema de aplicação.
“Sistema de informação de uma empresa pode ser conceituado como o conjunto de métodos,
processos e equipamentos necessários para se obter, processar e utilizar informações dentro da
empresa.”
Os sistemas de informações se desenvolvem segundo duas dimensões:
a) componentes da organização: diversos setores funcionais;
b) nível de decisão: operacional, gerencial e alto nível da organização.
“Sistema de informações gerenciais (SIG) é o sistema que engloba todos os componentes e todos
os níveis de decisão de uma organização.”
2
1.1.3 Sistemas de Computação:
“Programa é um conjunto de instruções.”
1.
2.
3.
4.
5.
6.
7.
Escrever e guardar N = 0 e SOMA = 0;
Ler número da entrada;
Somar valor do número ao de SOMA e guardar resultado como SOMA;
Somar 1 ao valor de N e guardar resultado como novo N;
Se valor de N for menor que 100, então passar para item 2;
Senão: imprimir valor de SOMA;
Parar.
Figura 3.2 – Algoritmo para soma de 100 números.
Um programa de computador é a formalização de um algoritmo em linguagem inteligível pelo
computador.
“Linguagem binária é a linguagem de comunicação dos computadores.”
Na linguagem binária os caracteres inteligíveis não são A, B, +, 0, etc., mas apenas zero(0) e
um (1).
Essa linguagem também chamada de linguagem de máquina, é, para os seres humanos, tediosa de
manipular, difícil de compreender e fácil de acarretar erros. Por essa razão, foram desenvolvidas
outras linguagens, mais próximas do entendimento dos operadores, genericamente chamadas de
Linguagens de programação.
Instruções de máquinas entendidas pelos computadores:
a) executar operações aritméticas sobre dois números;
b) executar operações lógicas sobre dois números;
c) mover um conjunto de bits (um número ou parte) de um ponto para outro do
computador;
d) desviar a seqüência do programa;
e) comunicação com algum dispositivo de entrada ou saída de dados.
“Hardware é o conjunto formado pelos circuitos eletrônicos e partes eletromecânicas de um
computador.”
“Software consiste em programas, de qualquer tipo e em qualquer linguagem, que são introduzidos
na máquina para fazê-la trabalhar, passo a passo, e produzir algum trabalho.”
1.2
HISTÓRICO:
É comum encontrar uma divisão histórica da evolução dos computadores segundo o elemento
básico de sua organização: Válvulas, transistores, circuito integrado, pastilhas de alta e muito alta
integração.
1.2.1. Época dos dispositivos mecânicos (500 a.c – 1880)
O conceito de efetuar cálculo surgiu com os babilônios e sua invenção o Ábaco.
A primeira evolução do ábaco aconteceu em 1642, quando o filosofo e matemático Blaise Pascal
construiu um contador mecânico que realizava soma e subtração.
3
1.2.2. Época dos dispositivos Eletromecânicos (1888-1930)
Com a invenção do motor elétrico surgiu uma grande quantidade de máquinas de somar acionadas
por motores elétricos, baseados no princípio de funcionamento da máquina de Pascal.
Em 1889, Hollerith desenvolveu o cartão perfurado para guardar dados e uma máquina tabuladora
mecânica, acionada por um motor elétrico, que contava, classificava e ordenava informações
armazenadas no cartão perfurado.
Em 1914, foi criada a IBM.
Até a década de 1980, os cartões perfurados foram um dos principais elementos de entrada de dados
dos computadores digitais, tais como IBM/360/370.
1.2.3. Época dos componentes eletrônicos – Primeiras Invenções (1930-1945)
O problema dos computadores mecânicos era:
a) baixa velocidade de processamento;
b) falta de confiabilidade dos resultados.
1.2.4. Época dos componentes eletrônicos (1945 - ?)
1.2.4.1. Primeira Geração: Computadores à válvula
O 1o computador eletrônico digital – ENIAC (Electronic Numerical Integrator And Computer):
• Projetado de 1943 a 1946;
• Funcionou até 1955;
• Possuía 17.000 válvulas e 8000 Km de cabos;
• Pesava 30 toneladas;
• Consumia grande quantidade de energia e válvulas que queimava freqüentemente;
• 10.000 operações por segundo;
• 20 registradores que guardavam valor numérico de 10 dígitos;
• Era uma máquina decimal, não binária, cada dígito é representado por um anel de 10
válvulas;
• Programação feita através da recolocação dos fios.
Em 1945 foi iniciada a construção do IAS (Von Neumann), que para os estudos de arquitetura de
computadores, ele é fundamental.
• Era constituído de quatro unidades principais: a memória, a UCP, a UC e dispositivos
de entrada e saída;
• memória de 1.000 posições, chamadas de palavras, cada uma podendo armazenar 40
dígitos binários (bits);
• tantos dados como instruções eram representados na forma binária r armazenados na
mesma memória;
Resumindo, o IAS possuía características de arquitetura que permaneceram ao longo do tempo. As
máquinas evoluíram consideravelmente em velocidade, capacidade de armazenamento,
miniaturização, consumo de energia e calor, mas a arquitetura básica permaneceu.
1.2.4.2. Segunda Geração: Computadores Transistorizados
A eletrônica moderna surgiu em 23 de Dezembro de 1947.
Os transistores se tornaram não só sucesso em toda a industria eletrônica (custo, tamanho e
desempenho melhores que os dispositivos a válvula), como também formaram a base de todos os
computadores digitais. O fato de que se pode ligar e desligar a corrente elétrica em um dispositivo é
a base de toda a lógica digital.
A primeira companhia a lançar comercialmente um computador transistorizado foi a NCR.
A IBM também teve grande participação transformou a série 700 em 7000.
4
1.2.4.3. Terceira Geração: Computadores com Circuitos Integrados
Em Outubro de 1958, Jack Kilby, da Texas Instruments Co., colocou dois circuitos em uma só peça
de germânio. O dispositivo resultante era rudimentar e a interconexão tinha que ser realizadas por
fios externos, mas é reconhecido como o primeiro circuito integrado, CI, fabricado no mundo.
Robert Noyce utilizou tecnologia para integrar vários circuitos em uma só partilha de silício.
Em 1964, a IBM lançou a sua mais famosa família, a série 1360.
1.2.4.4. Quarta Geração: Computadores que utilizam VLSI (Very Large Scale Integration)
Integração em larga escala, caracteriza uma classe de dispositivos eletrônicos capazes de armazenar,
em um único invólucro, milhares e milhares de diminutos componentes.
1.2.5. Computadores Pessoais - Microcomputadores
Em 1971, a Intel Corporation, produziu uma CPU em uma só pastilha de circuito integrado,
denominado INTEL-4004, que possuía palavra de 4 bits e tinha cerca de 2.300 transistores na
pastilha.
Logo em seguida, a Intel lançou o INTEL 8008 com 8 bits de palavra e 16 K de memória.
Quadro Comparativo de características de microprocessadores
Microprocessador
Data de
Palavra de
Endereçamento Máximo
Lançamento
Dados
Intel 4004
1971
4
1K bytes
Intel 8080
1973
8
64K bytes
Intel 8088
1980
16
1M bytes
Intel 80286
1982
16
16M bytes
Intel 80386
1985
32
4G bytes
Intel 80486
1989
32
4G bytes
Intel Pentium
1993
32
4G bytes
Motorola MC 6800
1974
8
64K bytes
MC 68000
1979
32
16M bytes
MC 68010
1983
32
16M bytes
MC 68020
1984
32
4G bytes
MC 68030
1987
32
4G bytes
MC 68040
1989
32
4G bytes
Zilog Z 80
1974
8
64K bytes
Zilog Z 8000
1979
16
1M bytes
5
Capítulo 2 – Sistemas de Numeração e Aritmética Computacional
2.1
SISTEMAS DE NUMERAÇÃO:
Sistemas de numeração são formas de representação de valores. Existem os sistemas nãoposicionais e os posicionais. Nos não-posicionais o símbolo não depende da posição. Por exemplo,
os numerais romanos: o símbolo X vale 10 em qualquer posição que estiver no número, seja IX ou
LXV. Já nos posicionais, o valor do símbolo muda com a posição. Por exemplo: o símbolo 6 dentro
do número 625 significa o valor 600, mas no número 461 significa 60.
Diariamente trabalhamos com o sistema posicional decimal, assim chamado por ter dez símbolos:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Como tem dez símbolos, dizemos também que possui base 10.
Como sabemos, o computador funciona em binário, ou seja, representações de número somente
com os símbolos 0 e 1. Este é um sistema de numeração com base 2 ou binário.
Na eletrônica ainda é comum trabalhar-se com o sistema octal, que possui base 8, cujos símbolos
são: 0, 1, 2, 3, 4, 5, 6, 7.
Para o endereçamento da memória do computador é utilizado o sistema de numeração hexadecimal,
de base 16, formado pelos símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
São estes quatro sistemas de numeração que serão o fundamento do estudo da computação, sendo
necessários para compreensão da organização de sua arquitetura.
Para compreendermos melhor a relação entre eles, devemos estudar a conversão de uma base para
outra.
2.2
CONVERSÃO ENTRE BASES:
2.2.1
De binário, octal, e hexadecimal para decimal:
Segue-se a regra simples: símbolo x baseposição
Ou seja, eleva-se a base a converter à potência cujo valor é sua posição no número e multiplica-se
pelo símbolo.
Assim, de binário (base 2) para decimal (base 10), podemos fazer, por exemplo:
Ex1:
(100101)2 = 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20
= 32 + 0 + 0 + 4 + 0 + 1
= 37
Ex2:
(110,10)2 = 1 x 22 + 1 x 21 + 0 x 20 + 1 x 2-1 + 0 x 2-2
= 4 + 2 + 0 + 0,5 + 0
= 6,5
E de octal (base 8) para decimal:
Ex1:
Ex2:
(473)8 = 4 x 82 + 7 x 81 + 3 x 80
(115,2)8 = 1 x 82 + 1 x 81 + 5 x 80 + 2 x 8-1
= 256 + 56 + 3
= 64 + 8 + 5 + 0,25
= 315
= 77,25
6
Finalmente, de hexadecimal (base 16) para decimal:
Ex1:
Ex2:
(B108)16 = B x 163 + 1 x 162 + 0 x 161 + 8 x 160
(F0,1)16 = F x 161 + 0 x 160 + 1 x 16-1
= 45056 + 256 + 0 + 8
= 240 + 0 + 0,0625
= 45320
= 240,0625
2.2.2
Conversão de decimal para binário, octal e hexadecimal:
Para converter números da base 10 para outras bases, segue-se a seguinte regra:
Divide-se o número a ser convertido pela base desejada; toma-se o quociente resultante e divide-se
novamente pela base até que o quociente seja zero; os restos das divisões formam o número
convertido; o primeiro resto representa o último dígito do número; o último quociente representa o
primeiro dígito do número;
Para conversão de decimal para binário, temos o exemplo:
(174)10 : 174 / 2 = 87 resto 0
87 / 2 = 43 resto 1
43 / 2 = 21 resto 1
21 / 2 = 10 resto 1
10 / 2 = 5 resto 0
5 / 2 = 2 resto 1
2 / 2 = 1 resto 0
último quociente: 1 ==> 10101110
(174)10 = (10101110)2
De decimal para octal:
(749)10 : 749 / 8 = 93 resto 5
93 / 8 = 11 resto 5
11 / 8 = 1 resto 3
último quociente: 1 ==> 1355
(749)10 = (1355)8
E de decimal para hexadecimal:
(155)10 : 155 / 16 = 9 resto 11 (B)
último quociente: 9 ==> 9B
(155)10 = (9B)16
2.2.3
Conversão de binário para octal
Basta converter cada três símbolos binários em um octal, partindo-se da direita. Caso faltem
símbolos para completar três, completa-se com zeros. Exemplo:
(010 101)2 = (25)8
7
2.2.4
Conversão de octal para binário:
O oposto do método anterior: pega-se cada valor e converte-se pela tabela em três símbolos
binários. Exemplo:
(356)8 = (11 101 110,)2
2.2.5
Conversão de binário para hexadecimal:
Semelhante a conversão de octal, apenas pegando cada quatro símbolos binários para um
hexadecimal, convertidos a partir da tabela. Exemplo:
(1101 1010 0100)2 = (DA4)16
2.2.6
Conversão de hexadecimal para binário:
Oposto do método anterior. Exemplo:
(CAFE)16 = (1100 1010 1111 1110)2
DECIMAL
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TABELA DE CONVERSÃO
BINÁRIO OCTAL HEXADECIMAL
0000
0
0
0001
1
1
0010
2
2
0011
3
3
0100
4
4
0101
5
5
0110
6
6
0111
7
7
1000
10
8
1001
11
9
1010
12
A
1011
13
B
1100
14
C
1101
15
D
1110
16
E
1111
17
F
8
2.3
ARITMÉTICA COMPUTACIONAL:
Todo sistema de computação moderno é construído de modo a ser capaz de armazenar, interpretar e
manipular informações codificadas na forma binária. Além disso, muitos deles possuem a
capacidade de representar valores e efetuar operações aritméticas utilizando recursos de outras
bases da potência de 2 (mais especialmente as bases octal - base 8 e hexadecimal - base 16). Esse é
o caso, por exemplo, de representação e aritmética de números em ponto flutuante; alguns sistemas
de computação IBM empregam a base 16 quando efetuam aritmética em ponto flutuante.
2.3.1
Procedimento de Adição:
Tendo em vista que toda representação de valores nos computadores digitais é realizada no sistema
binário, é obvio, então, que as operações aritméticas efetuadas pela máquina sejam também
realizadas na mesma base de representação, a base 2.
As operações de adição nas bases 2, 8 e 16 são realizadas de modo idêntico ao que estamos
acostumados a usar para a base 10, exceto no que refere à quantidade de algarismos disponíveis
(que, em cada base, é diferente). Esse fato acarreta diferença nos valores encontrados, mas não no
modo como as operações são realizadas.
Adição de Números Binários
A operação de soma de dois números em base 2 é efetuada de modo semelhante à soma decimal,
levando-se em conta, apenas, que só há dois algarismos disponíveis (0 e 1). Assim:
0+0=0
0+1=1
1+0=1
1 + 1 = 0, com "vai 1"
Ex1:
111111 1
101101,01
+100111,11
1010101,00
vai 1
Ex2:
1 11 1
vai 1
11001,1101
+11100,1110
110110,1011
Do mesmo modo que operamos na base decimal, a soma é efetuada algarismo por algarismo, de
maneia que, quando somamos 1 com 1, obtemos como algarismo resultante 0 e sobra o valor 1 para
ser somado aos algarismos da parcela imediatamente seguinte à esquerda (valor de uma base - 2);
esse é o valor que denominamos "vai 1". Se os dois algarismos serem somados são de valor igual a
1, e ainda temos o "vai 1" para o algarismo da esquerda.
Resumindo:
1 + 1 + 1 = 1 com "vai 1";
1 + 0 + 1 = 0 com "vai 1".
Adição de Números Octais e Hexadecimais
Os procedimentos para adição nas bases 8(octal) e 16(hexadecimal) também não diferem da base
10, exceto quanto à quantidade de algarismos diferentes em cada base, conforme já mencionamos
anteriormente.
9
No caso da base octal, temos 7 algarismos disponíveis e, portanto, a soma de 2 algarismos
produzindo um valor superior a 7 implica a utilização do conceito de "vai 1" consiste em um valor
igual a 8 na ordem inferior).
Para a base 16, o "vai 1" somente ocorre quando a soma de 2 algarismos excede o valor da base, 16.
Ex: Soma com aritmética em base 8:
Ex1:
Ex2:
11
3463
+1524
5207
Ex3:
1
11
422,74
+513,74
1136,70
111 1
27,416
+55,635
105,253
A execução detalhada do algoritmo de soma para o Ex1 é apresentada a seguir, de modo que se
possa compreender melhor o processo:
3 + 4 = 7, valor colocado na coluna, em resultado;
6 + 2 = 8 (não há algarismo na base 8 - o maior algarismo é 7). Assim, temos: 8 = 8 + 0; o 0 é
colocado na coluna como resultado e o 8 é passado para a esquerda com valor 1 (é o "vai 1"), pois 8
unidades de uma ordem representam apenas 1 unidade de ordem superior - mais à esquerda);
4 + 5 +1 ("vai 1") = 10 (10=8 + 2); logo, é 2 na coluna de resultado e "vai 1" à esquerda,
representando o valor 8).
3 + 1 + 1 ("vai 1") = 5, colocado na coluna resultado.
O processo é semelhante para os exemplos (2) e (3).
Ex: Soma com aritmética em base 16:
Ex1:
Ex2:
11
1
3A54,3B
+ 1BE8,7A
563C,B5
Ex3:
1 11
3A943B
+23B7D5
5E4C10
11 1 1
2AC79
+B7EEC
E2 B65
A execução detalhada do algoritmo de soma para o Ex1 é apresentada a seguir, de modo que se
possa compreender melhor o processo:
10(A) + 11(B) = 21, que excede 5 da base 16. Logo, coloca-se 5 na linha "soma" e "vai 1" para a
esquerda;
7 + 3 + 1 = 11 (algarismo B);
8 + 4 = 12 (algarismo C);
14(E) + 5 = 19, que excede de 3 a base 16. Logo, coloca-se na linha "soma" e "vai 1" para a
esquerda;
10(A) + 11(B) + 1 = 22, que excede 6 da base 16 e "vai 1";
1 + 3 + 1 = 5.
10
2.3.2
Procedimento de Subtração:
Os procedimentos para execução da operação de subtração em bases 2, 8, 16, ou qualquer outra não
decimal seguem as mesmas regras adotadas para a base 10, variando, conforme já mencionado
diversas vezes, quanto à quantidade de algarismos existentes em cada base.
Essas regras são:
minuendo - subtraendo = diferença;
operações realizada algarismo por algarismo;
se o algarismo do minuendo for menor que o algarismo do subtraendo, adiciona-se ao minuendo um
valor igual ao da base (2 ou 8 ou 16). Esse valor corresponde a uma unidade subtraída (empréstimo)
do algarismo à esquerda do minuendo;
resultado é colocado na coluna, na parcela diferença.
Subtração de Números Binários
A subtração em base 2, na forma convencional usada também no sistema decimal (minuendo subtraendo = diferença), é relativamente mais complicada por dispormos apenas dos algarismos 0 e
1. Assim, 0 menos 1 necessita de um "empréstimo" de um valor igual à base (no caso é 2), obtido
do primeiro algarismo diferente de zero, existente à esquerda. Se estivéssemos operando na base
decimal, o "empréstimo" seria de valor igual a 10.
Ex1:
2
Ex2:
1
002
02 022
101101
100110001
- 100111
- 010101101
000110
010000100
A execução detalhada do algoritmo de soma para o Ex2 é apresentada a seguir, de modo que se
possa compreender melhor o processo:
1–1=0
0–0=0
0 – 1 não é possível. Retira-se 1 da 5a ordem, a partir da direita, ficando 2 unidades na 4a ordem.
Dessas 2 unidades, retira-se 1 para a 3a ordem (nesta 3a ordem ficam, então, 2), restando 1 nesta 4a
ordem. Logo 2-1 = 1.
1–1=0
0–0=0
1–1=0
0–0=0
0 – 1 não é possível. Retira-se 1 da ordem à esquerda, que fica com zero e passa-se 2 para a direita.
Logo 2 – 1 = 1
0–0=0
Subtração de números Octais e Hexadecimais
Os procedimentos para realização da operação de subtração com valores representados em base 8
(octal) ou 16 (hexadecimal) são os mesmos das bases 2 ou 10, porém com a já conhecida diferença
em termos de algarismos disponíveis.
11
Ex: Subtração com valores em base 8:
Ex1:
8
248 48
3526,53
- 2764,36
0542,15
Ex2:
88
6208
7312
- 3465
3625
Ex2:
16
Ex: Subtração com valores em base 16:
Ex1:
16
3B16 D16
4C7BE8
- 1E9 27A
2DE96E
3816 A 16 C16
49AB,8D5
- FC8,AB8
39E2,E1D
2.3.3 - Adição Utilizando Números Com Sinal:
O Meio normal para representar números com sinal (+ ou -) é adicionando-se um BIT ao número,
chamado BIT de sinal (BIT mais representativo).
Convenção:
0: BIT DE SINAL que representa um número positivo;
1: BIT DE SINAL que representa um número negativo.
Ex:
0 0111 = (+7)10
1 0111 = (-7)10
↑
Bit de sinal
2.3.4 – Aritmética Complementar:
* Complemento Aritmético: É definido como sendo o que falta a um número para atingir o seu
módulo. Módulo de um número de um dígito é a quantidade de números diferentes que podemos
distinguir.
Ex: Sistema Decimal ⇒ Módulo 10
2⇒8
4⇒6
No sistema binário, composto por dois símbolos, isto é, os BITS 0 e 1, um é complemento do outro.
12
* Subtração no sistema complemento-de-2:
Obtenção do complemento-de-2 de um número binário:
- Troca-se cada 0 por 1 e vice-versa (complemento-de-1);
- Soma-se 1 ao resultado.
Ex.: 1001 ⇒ 0110 (complemento-de-1)
+ 1
0111 (complemento-de-2)
OBS: A principal vantagem do uso de complemento é executar a SUBTRAÇÃO pelo processo da
ADIÇÃO.
ü Dois números positivos
(+7) 0 0111
+ (+3) 0 0011
(+10) 0 1010
ü Número positivo e número negativo
(+7) 0 0111
+ (-3) 1 0011
Complemento-de-2
0 0111
+1 1101
100100 ⇒ (+4)
ü Dois números negativos
(-7) 1 0111
+ (-3) 1 0011
Complemento-de-2
1 1001
+1 1101
11 0110
Descomplementar (1 1010) ⇒ (-10)
* Fazer complemento-de-2 no número negativo;
* Somar os números;
* Descomplementar o resultado da soma.
Veja mais detalhes sobre este assunto no Capítulo 3.
13
Capítulo 3 – Representação de Dados
Em um computador são armazenados e processados apenas dados e instruções. Um programa de
computador é formado por uma seqüência de instruções que operam sobre um conjunto de dados
(os dados são os operandos das instruções). Um computador executa operações sobre dados
numéricos (os números) ou alfabéticos (letras e símbolos). Por outro lado, um computador somente
opera sobre valores representados em notação binária, isto é, somente "entende" bits - uns e zeros.
Assim, os dados precisam ser representados no computador (na memória e no processador) sempre
através de bits, de uma forma que o computador possa interpretar corretamente o seu significado e
executar as operações adequadas.
Em outras palavras, isso significa que é preciso definir uma forma de representar os dados,
codificados em uns e zeros, que possam ser interpretados pelo computador, de forma correta e
eficiente (com bom desempenho e pouco consumo de memória).
TIPOS DE DADOS
Um programa (a seqüência de instruções) deverá manipular diferentes tipos de dados.
Os dados podem ser:
--numéricos
---- ponto fixo (números inteiros)
---- ponto flutuante (números reais ou fracionários)
---- BCD (representação decimal codificada em binário)
-----alfabéticos
----- letras, números e símbolos (codificados em ASCII e EBCDIC)
O tipo de dado que está sendo fornecido ao programa deverá ser informado pelo programador,
através de declarações, fazendo com que o programa interprete o dado fornecido de acordo com a
declaração. Por exemplo, na linguagem C, declarações tipo
int num; (inteiro) ou
float sal (real);
indicam que a variável num é um número inteiro (int) e a variável sal é um número real (float),
representação científica, isto é, representado na forma
[(Sinal) Valor x Base (elevada a Expoente)].
Declarações tipo char letra ; indicam que a variável é um caractere.
14
DADOS NUMÉRICOS
A forma mais intuitiva de representar números seria através da conversão do número decimal para
seu correspondente em binário. Como os computadores operam sempre em binário, essa seria a
forma mais imediata e eficiente.
Os números podem ser positivos ou negativos. Um aspecto primordial a ser definido seria então
como representar o sinal. Nesta representação foi definida a utilização de mais um bit na
representação (o bit mais representativo), representando o sinal, com a seguinte convenção:
bit 0 ==> sinal positivo
bit 1 ==> sinal negativo.
A seguir, apresentamos exemplos de números e sua representação em binário:
Valor decimal
+9
-9
+127
-127
Valor binário com 8 bits (7 + bit de sinal)
00001001 (bit inicial 0 significa positivo)
10001001 (bit inicial 1 significa negativo)
01111111 (bit inicial 0 significa positivo)
11111111 (bit inicial 1 significa negativo)
Assim, uma representação em binário com n bits teria disponíveis para a representação do número
n-1 bits (o bit mais significativo representa o sinal). Essa representação tem o nome de
representação em sinal e magnitude .
REPRESENTAÇÃO DE NÚMEROS INTEIROS (PONTO FIXO)
Dados numéricos ponto fixo são números inteiros, isto é, sem parte fracionária.
Os dados NUMÉRICOS INTEIROS POSITIVOS são sempre representados com o sinal
(convencionado que bit mais significativo 0 = sinal positivo) e em seguida o valor do dado em
binário.
Porém, devido à complexidade dos algoritmos para os computadores operarem com NÚMEROS
NEGATIVOS quando se usa a representação em sinal e magnitude (acima sumariamente
apresentada), são comumente adotadas outras formas que facilitam e tornam mais eficiente a
manipulação de operações aritméticas em computadores: as representações em complemento.
Vamos analisar cada uma dessas representações.
REPRESENTAÇÃO EM SINAL E MAGNITUDE
A magnitude (isto é, o valor absoluto, que independe de sinal) de um número é representada em
binário. O sinal é representado por um bit (o bit mais significativo, isto é, o bit mais à esquerda na
representação). Por convenção, o bit de sinal 0 (zero) significa que o número é positivo e o bit 1
representa número negativo.
15
O valor dos bits usados para representar a magnitude independe do sinal, isto é, sendo o número
positivo ou negativo, a representação binária da magnitude será a mesma, o que varia é apenas o bit
de sinal.
Ex.:
0011 = +3
1011 = -3
(011 equivale ao valor absoluto 3)
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 e permite representar bn -1 valores, de vez que há duas representações para o zero.
A faixa de representação de uma representação na base 2 em sinal e magnitude com n bits
(incluindo o bit de sinal) possui
2n representações, representando os valores entre - ( 2n-1-1) e + ( 2n-1-1).
O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1).
Obs1.: o número de bits para a representação é determinado no projeto do computador.
Obs2.: em sinal e magnitude, existem duas representações para o zero.
ARITMÉTICA EM SINAL E MAGNITUDE
Algoritmo da soma
a) verificar o sinal das parcelas
b) se os sinais forem iguais:
-- repetir o sinal
-- somar as magnitudes
c) se os sinais forem diferentes
-- verificar qual parcela tem maior magnitude
-- repetir o sinal da maior magnitude
-- subtrair a menor magnitude da maior magnitude
Algoritmo da subtração
O algoritmo da subtração é o mesmo da soma, sendo feita como se fosse uma soma de dois
números que tem os sinais diferentes.
A representação em sinal e magnitude apresenta uma grande desvantagem: ela exige um grande
número de testes para se realizar uma simples soma de dois números inteiros. O algoritmo acima
descrito é complicado de ser realizado no computador, o que resulta em baixa eficiência (execução
lenta). Um outro ponto negativo é termos duas representações para o zero.
16
REPRESENTAÇÃO DE NÚMEROS EM COMPLEMENTO
Complemento é a diferença entre cada algarismo do número e o maior algarismo possível na base.
Uma vantagem da utilização da representação em complemento é que 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.
REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A (BASE - 1)
A representação dos números inteiros negativos é obtida efetuando-se: (base - 1) menos cada
algarismo do número. Fica mais fácil entender através de exemplos:
Ex.1: Calcular o complemento a (base - 1) do número 29710 .
Se a base é 10, então 10-1 = 9 e o complemento a (base -1) será igual a complemento a 9
Ex.2: Calcular o complemento a (base - 1) do número 3A7EH.
Se a base é 16, então 10H-1 = F e o complemento a (base -1) será igual a complemento a F.
Portanto:
Ex.1
(base -1) --->999
-297
Complemento --->702
Ex.2
FFFF
-3A7E
C581
Caso Particular: Números na Base 2 (Complemento a 1)
Para se obter o complemento a 1 de um número binário, devemos subtrair cada algarismo de 1.
Uma particularidade dos números binários é que, para efetuar esta operação, basta inverter todos
os bits.
Como exemplo, vamos calcular o complemento a 1 (C1) de um número binário 0011 com 4 dígitos.
1111
- 0011
1100 (C1)
Portanto, bastaria inverter todos os bits!
17
Vamos analisar como ficaria a representação em C1 dos números binários de 4 dígitos:
Decimal
Binário (se o número é
Decimal
Binário (em
(positivo) positivo, não há alteração) (negativo)
C1)
0
0000
0
1111
1
0001
-1
1110
2
0010
-2
1101
3
0011
-3
1100
4
0100
-4
1011
5
0101
-5
1010
6
0110
-6
1001
7
0111
-7
1000
FAIXA DE REPRESENTAÇÃO
A representação na base b em complemento a (base-1) com n bits possui bn representações e
permite representar bn -1 valores. Há duas representações para o zero.
A faixa de representação de uma representação na base 2 em complemento a (base-1) com n bits é a
mesma que em sinal e magnitude e pode ser calculada como
2n valores, entre - ( 2n-1 -1) e + ( 2n-1-1)
O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1).
Obs1.: o número de bits para a representação é determinado no projeto do computador.
Obs2.: em C1 também existem duas representações para o zero.
Vamos verificar qual a faixa de representação nos seguintes exemplos:
Base 10 com 3 dígitos: a representação varia de 000 a 999 (103 representações), representando os
números de -499 a -1 (faixa negativa), de +1 a +499 (faixa positiva).
Base 10
C1
Número representado
Faixa Inferior (positiva)
1 2.... 498 499
1 2 .... 498 499
Faixa Superior (negativa)
500 501 ..... 997 998
-499 -498 ..... -2 -1
O zero pode ser representado tanto por 000 quanto por 999.
18
Base 16 com 4 dígitos: a representação varia de 0000 a FFFF, representando os números de -7FFF a
-0001 (faixa negativa) e de +0001 a +7FFF (faixa positiva).
Base 16
C1
Número representado
Faixa Inferior (positiva)
0001 0002 ... 7FFF
0001 0002 ... 7FFF
Faixa Superior (negativa)
8000 8001 ....FFFE
-7FFF -7FFE ...... -0001
O zero pode ser representado tanto por 0000 quanto por FFFF.
Obs: Podemos concluir que, 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! Mas é importante notar que o bit mais significativo, na representação em
complemento, ao contrário do que ocorre na representação em sinal e magnitude, NÃO
REPRESENTA O SINAL DE NEGATIVO!
ARITMÉTICA EM COMPLEMENTO A (BASE - 1)
Na aritmética em complemento a (base-1), basta somar os números, sendo que um número negativo
estará representado por seu complemento. Ex.: Somar + 123 com - 418 (decimal).
Sinal e
Complemento a (baseVerificação
magnitude
1)
-418
581 (C9)
999
+123
+123
-295
-295
704
704
Verificamos que o resultado 704 (C9) é um número negativo, isto é, o complemento a 9 (base 10 -1)
de 295.
Repare que a subtração (ou soma de um número positivo com um número negativo) se transforma,
nesta representação, em uma soma em complemento, isto é, a soma dos complementos do número
positivo com o número negativo! Portanto, numa subtração (realizada através de soma em
complemento), se o número é positivo, mantenha-o; se o número é negativo, complemente-o; e aí, é
só somar! Dessa forma, podemos constatar que o algoritmo da soma em complemento é muito mais
simples que o da soma em sinal e magnitude, de vez que não requer nenhum teste. No entanto,
continuamos com duas representações para o zero. Vamos a seguir discutir a solução para esse
problema.
REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A BASE
A representação dos números inteiros negativos em complemento a base é obtida subtraindo-se da
base cada algarismo do número. Ora, seria a mesma coisa subtrair cada algarismo de (base-1), isto
é, calcular o complemento a (base -1) e depois somar 1 ao resultado, ou seja:
b - N = [(b-1) - N] + 1.
Ou seja, encontramos o complemento a (base-1) do número (o que facilita muito no caso dos
números binários) e depois somamos 1 ao resultado. Fica mais fácil entender através de exemplos:
19
Ex.1: Calcular o complemento a base do número 29710 .
Se a base é 10, o complemento a base será igual a complemento a 10.
Ex.2: Calcular o complemento a base do número 3A7Eh.
Se a base é 16 (lembremos mais uma vez que o H ou h depois do número simboliza "hexadecimal"),
o complemento a base será igual a complemento a 1610 ou 10h.
Portanto, calculando o complemento a base dos números acima, temos:
Ex.
Ex.1 (alternativa)
Ex.2
1
100
999
FFFF
0
- 297 -297
-3A7E
702 702
C581
+001
+0001
703
C582
Caso Particular: Números na Base 2 (Complemento a 2)
Para se obter o complemento a 2 de um número binário, a regra geral nos diz para subtrair cada
algarismo de 2. Ora, seria a mesma coisa subtrair cada algarismo de 1 (complemento a 1) e depois
somar 1 ao resultado, ou seja: (2-N) = (1-N) + 1. Assim, tirando partido da particularidade dos
números binários anteriormente apresentada (para obter o C1 de um número binário, basta inverter
todos os bits), para obter o C2 de um número obtemos primeiro o C1 (invertendo os bits) e depois
somamos 1 ao resultado.
Como exemplo, vamos calcular o complemento a 2 (C2) de um número binário 0011 com 4 dígitos.
1111
- 0011
1100 (C1)
+0001
1101 (C2)
Vamos analisar como ficaria a representação em C2 dos números binários de 4 dígitos:
Binário (se o número é
Decimal
Binário (C2)
positivo, não há alteração)
(negativo)
0
0000
-1
1111
1
0001
-2
1110
2
0010
-3
1101
3
0011
-4
1100
4
0100
-5
1011
5
0101
-6
1010
6
0110
-7
1001
7
0111
-8
1000
Vemos assim que em C2, não há duas representações para o valor 0 e conseqüentemente
abriu-se lugar para mais uma representação - no caso, mais um número negativo pode ser
representado.
Decimal (positivo)
20
FAIXA DE REPRESENTAÇÃO
A representação na base b em complemento a base com n bits possui bn representações e permite
representar bn valores.
A faixa de representação de uma representação na base 2 em complemento a base com n bits pode
ser calculada como
2n valores (entre - 2n-1 e + 2n-1-1), sendo 2 a base.
O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1).
Obs1.: o número de bits para a representação é determinado no projeto do computador.
Obs2.: nesta representação somente existe uma representação para o zero e há mais um número
negativo representado!
Nos exemplos acima, vamos verificar qual a faixa de representação:
Base 10 com 3 dígitos: de 0 a 999 (103 valores), representando de -500 a -1 (faixa negativa) e de 1 a
+499 (faixa positiva). O zero tem apenas uma representação: 000.
Base 10
C2
Número representado
Faixa Inferior (positiva)
1 2 .... 499
1 2 .... 499
Faixa Superior (negativa)
500 501 ..... 999
-500 -499 ... -1
Base 16 com 4 dígitos: de 0 a FFFF, representando -8000 a -1 (faixa negativa) e de 0 a +7FFF
(faixa positiva). O zero tem apenas uma representação: 0000.
Base 16
C2
Número representado
Faixa Inferior (positiva)
0001 0002 ... 7FFF
0001 0002 ... 7FFF
Faixa Superior (negativa)
8000 F001 ...... FFFF
-8000 -7FFF... -0001
Obs: Podemos concluir que, tal como na representação em sinal e magnitude e em
complemento a (base-1), sempre que em uma representação em complemento a base o
primeiro dígito binário for 1, o número representado é negativo! Mas é importante notar que
o bit mais significativo, na representação em complemento, ao contrário do que ocorre na
representação em sinal e magnitude, NÃO REPRESENTA O SINAL DE NEGATIVO!
21
ARITMÉTICA EM COMPLEMENTO A BASE
Na aritmética em complemento a base, basta somar os números, sendo que um número negativo
estará representado por seu complemento a base. Ex.: Somar +123 com -418 (decimal).
Sinal e
magnitude
- 418
+123
- 295
Cálculo C2
999
- 418
581 (C1)
+001
582 (C2)
C2
582
+123
705 (C2)
Verificação
999
-295
704
+001
705
Verificamos que o resultado 705 (C2) é um número negativo, isto é, o complemento a 10 (base 10)
de 295.
Repare que a subtração (ou soma de um número positivo com um número negativo) se transforma
em uma soma em complemento, isto é, a soma dos complementos do número positivo com o
número negativo! Portanto, se o número é postivo, mantenha-o; se o número é negativo,
complemente-o; e aí, é só somar! Dessa forma, podemos constatar que o algoritmo da soma em
complemento é muito mais simples que o da soma em sinal e magnitude, de vez que não requer
nenhum teste.
22
ARITMÉTICA BINÁRIA E EM COMPLEMENTO
Nesta seção, vamos rever os conceitos já apresentados sobre aritmética binária e em complemento e
resolver alguns exercícios para exemplo. Inicialmente, vamos considerar apenas números positivos
(o sinal não será representado).
Exemplo de Operações de Adição
BASE 2 BASE 8 BASE 8 BASE 16
111
11
_11
111
0111
0762
7142
A679
+0101
+0365
+0576
+49FB
1100
1347
7740
F074
BASE 16
111
6FACB
+4ED93
BE85E
Exemplo de Operações de Subtração
BASE 2
111
- 101
010
BASE 8
0762
- 0365
0375
BASE 8
7142
- 0576
6344
BASE 16
A679
- 49FB
5C7E
BASE 16
6FACB
- 4ED93
20D38
Exercício:
Suponha um sistema posicional de numeração na base 6. Determine os valores de R, S, T, V, X e Z.
RVTZR
+ SRSVZ
TFXVZS
Inicialmente, devemos considerar que cada uma das letras representa um algarismo, sem qualquer
valor pré-determinado.
a) T = 1, porque: T só pode ser 1; a soma de dois algarismos, em qualquer base b, será no máximo
igual a (2b) -1 e portanto o "vai-um" nunca será "vai dois"!.
b) V = 0, porque: como Z + V = Z, concluimos que V = 0 e a soma R + Z = S (não vai-um).
c) S = 5, porque T + S = 0 o que significa que T + S = 6 (porque não pode ser 0, logo é 0 + base = 6
e vai um para a próxima casa) e como T = 1, temos portanto S = 5.
d) Assim, R + V = X, como V = 0 e veio 1 da casa anterior, temos que X = 1 + R
Substituindo, temos que R + S = Z + 6 logo
R-Z=1
R + Z= 5; somando as expressões, temos 2R = 6 ou
R = 3 logo
Z=2e
X=4
23
ARITMÉTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A UM
O algoritmo da soma em complemento a um é:
a) Somar os dois números, bit a bit, inclusive o bit de sinal.
b) Avaliação dos casos de "vai-um":
b.1) Se não ocorreu vai-um para o bit de sinal nem para fora do número:
--- este é o resultado correto;
b.2) Se ocorrer "vai-um" só para o bit de sinal (e não para fora do número):
--- incorreto - ocorreu overflow
------- (isto significa que o resultado excede a faixa de representação para o número de bits
adotado).
b.3.1) Se ocorrer "vai-um" para fora do número:
--- para obter o resultado final, soma-se o "vai-um" externo (para fora do número) ao resultado da
soma; o bit para fora do número (que excede o número de bits adotado na representação) é
desprezado.
b.3.2) Nesta soma final também pode ocorrer "vai-um" no último bit;
--- se o número de "vai-um" ocorridos (para o bit de sinal, para fora do número ou na soma final)
for par (o que equivale a inverter duas vezes o sinal),
------ o resultado está correto;
--- se o número for ímpar (1 ou 3 "vai-um"):
------ o resultado está incorreto - ocorreu overflow.
Exemplos (referidos aos casos acima), considerando representação com 6 bits:
caso b.1:
15 +10 = 2510
_111
001111 (+)
+001010 (+)
011001 (+)
caso b.2:
15 + 22 = 3710
1111
001111 (+)
+010110 (+)
100101 (-)
CORRETO
OVERFLOW
(não ocorreu "vaium")
(só ocorreu "vai-um"
para o bit de sinal)
obs.: soma de dois nº
positivos não poderia
dar negativo
caso b.3:
-15 -10 = -2510
11
110000 (-)
+110101 (-)
100101
+______1
100110 (-)
CORRETO
(ocorreu "vai-um" p/
bit de sinal e p/ fora
do nº mas não na
soma final - nº de
"vai-um" é par)
caso b.3:
-15 -22 = -3710
1
110000 (-)
+101001 (-)
011001
+______1
011010 (+)
OVERFLOW
(ocorreu "vai-um" só p/
fora do nº mas não na
soma final - nº de "vaium" é ímpar)
obs.: soma de dois nº
negativos não poderia
dar positivo
A faixa de representação com 6 bits em C1 vai de -31 a +31. Conferindo as contas pela
representação decimal, vemos que os resultados fora desta faixa excedem a faixa da representação e
não podem ser representados com 6 bits (portanto, com este número de bits, ocorre overflow).
Existe um teste prático que, quando ambos os números tem o mesmo sinal, pode mostrar se ocorreu
overflow e o resultado obtido está incorreto: basta ver que na soma de dois números negativos, o
resultado só pode ser negativo, e a soma de dois números positivos só poderia dar resultado
positivo!
24
ARITMÉTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A DOIS
O algoritmo da soma (ou subtração) em complemento a dois é:
a) Somar os dois números, bit a bit, inclusive o bit de sinal.
b) Despreza-se o bit para fora do número, se houver.
c.1) Se não ocorreu vai-um para o bit de sinal nem para fora do número ou
c.2) Se ocorrer "vai-um" tanto para o bit de sinal quanto para fora do número (equivale a inverter
duas vezes o sinal):
--- o resultado está correto;
d.1) Se ocorrer "vai-um" só para o bit de sinal (e não para fora do número):
d.2) Se não ocorrer "vai-um" para o bit de sinal e somente ocorrer para fora do número:
--- o resultado é incorreto - ocorreu overflow
------- (isto significa que o resultado excede a faixa de representação para o número de bits
adotado).
Nota: Podemos constatar que o algoritmo de soma em C2 é bem mais simples que o de soma em
C1.
Exemplos (referidos aos casos acima), considerando representação com 6 bits:
caso c.1:
15+10 = 2510
_111
001111 (+)
+001010 (+)
011001 (+)
CORRETO
(não ocorreu
"vai-um")
caso d.1:
15 + 17 = 3210
11111
001111 (+)
+010001 (+)
100000 (-)
OVERFLOW
caso c.2:
-15 -17 = -3210
1
111111
110001 (-)
110001 (-)
+110110 (-)
+101111 (-)
100111 (-)
100000 (-)
CORRETO
CORRETO
(ocorreu "vai(ocorreu "vai(só ocorreu "vaium" p/ bit de
um" p/ bit de
um" para o bit de sinal e p/ fora do sinal e p/ fora do
sinal)
nº - o nº de "vai- nº - o nº de "vaium" é par)
um" é par)
obs.: soma de nº
positivos não
poderia dar
negativo
caso c.2:
-15 -10 = -2510
(despreza-se o
"vai-um" para
fora do número)
(despreza-se o
"vai-um" para
fora do número)
caso d.2:
-15 -27 = -4210
1 ____1
110001 (-)
+100101 (-)
010110 (+)
OVERFLOW
(só ocorreu "vaium" p/ fora do nº o nº de "vai-um" é
ímpar)
obs.: soma de nº
negativos não
poderia dar positivo
(despreza "vai-um"
p/ fora do nº)
A faixa de repreentação com 6 bits em C2 vai de -32 a +31. Conferindo as contas pela
representação decimal, vemos que os resultados fora desta faixa estão necessariamente incorretos
(ocorreu overflow)
Pode-se aplicar o mesmo teste prático que, quando ambos os números tem o mesmo sinal, pode
mostrar se ocorreu overflow e o resultado obtido está incorreto: basta ver que na soma de dois
números negativos, o resultado só pode ser negativo, e a soma de dois números positivos só poderia
dar resultado positivo!
25
ARITMÉTICA EM SINAL E MAGNITUDE
Em sinal e magnitude, o algoritmo da soma é:
a) Se os números forem de mesmo sinal, basta somar os dois números e manter o sinal;
b) Se os números forem de sinais diferentes, subtrai-se o menor número do maior; o sinal será o do
maior número.
c) Tem-se overflow sempre que ocorrer "vai-um" da magnitude para o bit de sinal (o número de bits
da magnitude foi excedido).
__1
1001
0110 (positivo e
1110 (negativo e
0010 (positivo)
(negativo)
maior)
maior)
1101
1010 (negativo e
0100 (positivo e
+0101 (positivo) +
+
+
(negativo)
menor)
menor)
0111
1110
0100
1010
CORRETO
CORRETO
CORRETO
CORRETO
ambos
sinais contrários
sinais contrários
ambos
negativos ->
-> subtrai
-> subtrai
positivos ->
soma e mantém maior magnitude é maior magnitude é
soma e mantém
o sinal
positivo ->
negativo -> resultado
o sinal positivo
negativo
resultado é positivo é negativo
11
1110 (negativo)
+1101 (negativo)
1011
OVERFLOW
ambos negativos
-> soma
"vai-um" para bit
de sinal ->
overflow
26
REPRESENTAÇÃO DE NÚMEROS REAIS
Até agora, passamos por cima de alguns outros problemas. Os dados numéricos podem ser
fracionários (tais como 57,683). Como representar essa parte fracionária (após a vírgula que a
separa da parte inteira), de forma que permita processamento eficiente e armazenamento com pouco
consumo de memória? Vamos analisar esses problemas logo à frente.
NÚMEROS REAIS
Números reais são aqueles com parte fracionária (por exemplo, 57,683). Estamos acostumados a
representar esses números no formato parte inteira, vírgula (ou ponto), parte fracionária:
Esta representação, embora cômoda para cálculos no papel, não é adequada para processamento no
computador.
REPRESENTAÇÃO EM PONTO FLUTUANTE
Consideremos o número 57,683 usado acima como exemplo. Este número pode ser também
expresso como 57,683 x 100 . E também poderia ser expresso com 57683 x 10-3 ou ainda 0,57683 x
102 . Na realidade, qualquer número - inteiro ou fracionário - pode ser expresso neste formato
número x base expoente , em que variamos duas coisas: a posição da vírgula (que delimita a parte
fracionária) e a potência à qual elevamos a base. Essa representação é denominada representação
em ponto flutuante, pois o ponto varia sua posição, modificando, em conseqüência, o valor
representado.
REPRESENTAÇÃO NORMALIZADA
Na representação normalizada, o número é preparado movendo a vírgula para a direita ou para a
esquerda de forma que o número seja menor que 1, o mais próximo possível de 1, obviamente
multiplicado por uma potência da base de forma a manter o valor do número. Em geral, isso
significa que o primeiro dígito significativo seguirá imediatamente ao ponto (ou vírgula).
Por exemplo:
57,68310 --> normalizando ==> 0,57683 x 102
0,000462810 --> normalizando ==> 0,4628 x 10-3
0,000010112 --> normalizando ==> 0,1011 x 2-4
De forma genérica, podemos representar a forma normalizada:
± número x base ±expoente
A parte do número representado dessa forma normalizada (os algarismos significativos), damos o
nome de mantissa.e portanto podemos representar:
± 0,M x B ± e
onde M é a mantissa, B é a base e e é o expoente.
27
REPRESENTAÇÃO DE NÚMEROS REAIS NO COMPUTADOR
Uma forma comum de representação de números reais no computador pode ser expressa como
segue:
Pode-se notar que a base não é expressa. Como a base, para cada computador, será sempre a
mesma, não há necessidade de apresentar a base na representação (no exemplo, a base é 2).
Dizemos que a base é implícita.
Para cada computador, o número total M de bits para a representação, o número de bits para SN
(sinal do número), para SE (sinal do expoente), para a mantissa e para o expoente, são pré-definidos
em projeto.
Assim, podemos concluir que, quanto maior o número de bits para o expoente, maior será a faixa de
números que o computador pode representar (maior alcance); e quanto maior o número de bits para
a mantissa, maior a precisão da representação. Porém, reduzindo-se a mantissa, perde-se precisão e
há maior a necessidade de truncar o número (truncar um número é cortar algarismos significativos
que não podem ser representados).
Considerando-se a representação acima, na base implícita 2:
maior expoente possível E: 2x – 1
maior mantissa possível: 2y – 1
maior número real: +(0.111...1 x 2E) sendo E = 2x – 1
menor número real: -(0.111...1 x 2E) sendo E = 2x – 1
menor real positivo: +(0.100...0 x 2 -E sendo E = 2x – 1
maior real negativo: -(0.100...0 x 2 -E sendo E = 2x – 1
28
FAIXA DE REPRESENTAÇÃO
Como vimos anteriormente, a representação em ponto flutuante tem limites de alcance e de
precisão. O alcance é limitado pelo número de bits do expoente. A precisão é determinada pelo
número de bits da mantissa.
Ocorre overflow quando o valor absoluto do dado a ser representado excede a capacidade de
representação, porque o número de bits do expoente (neste caso, positivo) é insuficiente para
representar o dado.
Um outro problema ocorre na região de números próximos de zero, que tem o maior expoente
negativo possível. Ocorre underflow quando o valor absoluto do dado a ser representado é tão
pequeno que fica menor que o menor valor absoluto representável. Nesse caso, o expoente é
negativo mas não representa os números muito próximos de zero e ocorre uma descontinuidade na
representação, com os números próximos a zero não sendo representados.
Underflow não é o mesmo que imprecisão. Dados na faixa de underflow não podem ser
representados, ocorrendo estouro no expoente. No caso de imprecisão, a normalização permite que
o dado seja representado, porém com perda de precisão.
CARACTERÍSTICA
Característica é o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
A representação substituindo expoente por característica acarreta que todas as características serão
positivas, de forma que é possível eliminar a representação do sinal do expoente.
Se CARACTERÍSTICA = EXPOENTE + EXCESSO,
sendo M o número de bits para a representação da característica, temos:
0 = - 2M-1 + EXCESSO logo: EXCESSO = + 2M-1
29
EXEMPLO DE REPRESENTAÇÃO EM PONTO FLUTUANTE
a) Representação no IBM /370
A família IBM /370 representa os dados em ponto flutuante com base implícita = 16, no seguinte
formato:
sendo
SN = sinal do dado
CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
No caso da IBM, o excesso é de 6410 , portanto: CARACTERÍSTICA = EXPOENTE + 6410
Exemplificando: expoente = 810 , logo característica = 810 + 6410 = 7210
Assim, uma característica entre 0 e 6310 significa que o expoente é negativo, enquanto uma
característica entre 65 e 127 significa que o expoente é positivo (característica igual a 6410 significa
expoente igual a 0).
Exemplo: Representar 25,510
Como a base implícita é 16, vamos converter para hexadecimal: 25 / 16 = 1, resto 9 logo: 2510 =
1916
Parte fracionária: 0.5 x 16 = 8,0
Logo: 25,510 = 19,816 x 160
Normalizando: 19,816 x 160 = 0,19816 x 162 . Em binário com 24 bits, a mantissa normalizada será:
0,19816 = 0001.1001.1000.0000.0000.0000
Obs.: Como o número 0,19816 será representado em 24 bits, os bits não representativos (à direita)
serão preenchidos com zeros.
Como o expoente é 2, a característica será: 210 + 6410 = 6610 . Em binário com 7 bits, será: 100.0010
Portanto, a representação será:
30
b) Representação no PDP 11
Os microcomputadores PDP 11 representam os dados em ponto flutuante com base implícita = 2,
no seguinte formato:
sendo
SN = sinal do dado
CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
No caso do PDP 11, o excesso é de 12810 , portanto: CARACTERÍSTICA = EXPOENTE + 12810
Exemplificando: expoente = - 28 logo característica = - 2810 + 12810 = 10010
Assim, uma característica entre 0 e 12710 significa que o expoente é negativo, enquanto uma
característica entre 129 e 255 significa que o expoente é positivo (característica igual a 1280
significa expoente igual a 0).
Exemplo: Representar 25,510
Como a base implícita é 2, vamos converter para binário: 2510 = 110012
Parte fracionária: 0.5 x 2 = 1,0
Logo: 25,510 = 11001,12 x 20
Normalizando: 11001,12 x 20 = 0,1100112 x 25 .
Obs.: Como a base implícita no PDP 11 é 2, o número normalizado começará SEMPRE por 0,1.
Assim, como o primeiro dígito da mantissa será sempre 1, o PDP 11 economiza um bit na mantissa
não armazenando o primeiro bit da mantissa, já que está implícito que todos os números terão
mantissa iniciando com 1. O bit economizado dessa forma permite que, embora a mantissa no PDP
seja representada com 23 bits e no IBM /370 com 24 bits, a precisão na representação é a mesma.
Obs.1: Leia-se o SEMPRE da obs. acima como quase sempre . A única exceção corre por conta do
zero, que nesse caso tem um tratamento especial.
Em binário com 23 bits, a mantissa normalizada será (lembrando que o primeiro bit 1 não é
representado):
0,1100112 = 100.1100.0000.0000.0000.0000
Obs.: Como o número 0,1100112 será representado em 23 bits, os bits não representativos (à direita)
serão preenchidos com zeros.
Como o expoente é 5, a característica será: 510 + 12810 = 13310 . Em binário com 8 bits, será:
1000.0101
Portanto, a representação será:
31
Exercício: Qual das representações de ponto flutuante nos dois computadores exemplificados acima
tem o maior alcance?
Resp.: O alcance de uma representação depende do valor da base implícita, elevado ao maior valor
que a característica pode assumir.
O maior alcance será o que tiver o maior valor de Be ou seja, base elevada ao maior valor possível
da característica.
O IBM /370 tem 7 bits para característica (maior característica = 63) e base implícita 16, portanto
1663 = (24 ) 63 = 2252
O PDP tem 8 bits para característica (maior característica = 127) e base implícita 2, portanto 2127
Conclusão: A representação em ponto flutuante do IBM /370 tem maior alcance que a do PDP 11.
REPRESENTAÇÃO DE CARACTERES E SÍMBOLOS
A representação de caracteres e símbolos em computador é feita atribuindo-se a cada caractere ou
símbolo um código binário. Desta forma são construídas tabelas (padrões) em que cada código
binário representa para o computador um determinado caractere ou símbolo.
Cada computador (ou cada fabricante) adota um determinado padrão. O número de bits que será
utilizado no padrão é uma decisão do fabricante e determinará quantos caracteres (e símbolos)
poderão ser representados.
Nota: Se um padrão utiliza 7 bits, será possível representar até 27 = 128 caracteres e símbolos e com
8 bits serão 28 = 256.
O principal padrão hoje utilizado é o ASCII, de 7 bits, com uma variação de 8 bits (ASCII
extendido) em que o 8º bit permite representar outros 128 símbolos.
Nota 1: Nos computadores PC, devido às diferenças lingüísticas, com a necessidade de representar
caracteres diferentes para para dar suporte a outras línguas que não o inglês, foram criadas diversas
"páginas de código". Por exemplo, a página de código 437 refere-se aos Estados Unidos, a 850 é a
Multilingüe (Latin I), a 860 para Português (incluindo caracteres que não existem no inglês, tais
como ç e os acentos).
Nota 2: ASCII é um acrônimo para American Standard Code for Information Interchange (ou
Código Padrão Americano para Intercâmbio de Informações).
32
A seguir, apresentamos alguns exemplos de códigos da tabela ASCII:
Decimal
Binário
Caractere
48 a 57
0011.0000 a 0011.1001
de 0 até 9 (algarismos)
65 a 90
0100.0001 a 0101.1010
de A até Z (maiúsculas)
97 a 122
0110.0001 a 0111.1010
de a até z (minúsculas)
36
0010.0100
$
42
0010.1010
*
43
0010.1011
+
63
0011.1111
?
64
0100.0000
@
128
1000.0000
Ç
135
1000.0111
ç
132
1000.0100
ã
142
1000.1110
Ã
172
1010.1100
¼
167
1010.0111
º
166
1010.0110
ª
225
1110.0001
ß
241
1111.0001
±
Nota: Até 127, os códigos pertencem à tabela ASCII padrão, enquanto os códigos entre 128 e 255
fazem parte do ASCII extendida, podendo variar o caractere ou símbolo representado conforme a
página de código configurada.
Outros padrões foram e ainda são usados, por exemplo o EBCDIC (Extended Binary Coded
Decimal Interchange Code, de 8 bits, usados nos computadores de grande porte IBM).
33
Capítulo 4 – Organização Interna de um Computador
Vimos que um sistema de computador é um conjunto de componentes que são integrados para
funcionar como um único elemento e tem por objetivo realizar manipulações com dados; isto é,
realizar algum tipo de operação com os dados de modo a obter informações úteis.
4.1 MODELO DE VON NEUMANN
Para podermos entender a importância da arquitetura Von Neumann vamos começar fazendo uma
pergunta: qual a diferença entre uma calculadora e um computador?
Uma calculadora básica realiza apenas as funções pré-determinadas em seu teclado. Se desejarmos
fazer um novo tipo de operação, isto só será possível com a modificação dos circuitos eletrônicos
que compõem a calculadora, além do seu teclado, para a inclusão da nova função. Não há, portanto,
flexibilidade para realizar alterações na calculadora para se adaptar a novas aplicações.
O computador, por sua vez, é um equipamento que oferece a possibilidade de ser configurado
facilmente para novas tarefas, de acordo com as necessidades de cada aplicação que for requerida
pelo usuário.
A grande inovação da proposta de Von Neumann foi uma nova forma de organização para o
computador que permitisse um alto grau de flexibilidade, de forma a adaptá-lo facilmente para
diversas aplicações.
Modelo de Von Neumann
O conceito de programa armazenado foi um dos conceitos fundamentais apresentados por Von
Neumann que permitiu essa flexibilidade. Em seu modelo de computador foi introduzido o conceito
de memória, um dispositivo de armazenamento temporário, para onde programas (e dados)
diferentes poderiam ser carregados a partir de uma unidade de entrada, para serem executados
pela unidade aritmética e lógica, com os resultados sendo transferidos da memória para uma
34
unidade de saída, tudo isso sob a coordenação de uma unidade de controle. Deste modo, ficava
garantida a flexibilidade do computador, que pode ter o seu funcionamento facilmente alterado
mediante o uso de programas e dados diferentes, de acordo com a aplicação de cada usuário.
Sendo mais formal, os componentes da máquina de Von Neumann (Figura) podem ser descritos
assim:
Memória: É a unidade onde as instruções, os dados de entrada, as tabelas de referência, e os
resultados intermediários devem ser armazenados para permitir a execução de um programa.
Controle: É a unidade responsável pelo seqüenciamento das operações e pelo controle das demais
unidades do computador.
Aritmética: É a unidade que irá executar as operações aritméticas e lógicas tais como: soma,
subtração, multiplicação, divisão, raiz quadrada, movimentação entre a unidade aritmética e a
memória, verificação do sinal do resultado, conversão de decimal para binário e vice-versa. Um
total de 10 operações fundamentais foi definido por Von Neumann. É chamada abreviadamente de
UAL.
Entrada: É a unidade que transfere a informação (numérica ou não) do meio externo. Todas as
transferências devem ser feitas para a memória e nunca diretamente para a unidade de controle.
Saída: É a unidade que transfere a informação (numérica ou não) para o meio externo. Todas as
transferências devem ser feitas da memória para o meio externo, e nunca diretamente da unidade de
controle.
Von Neumann, em uma analogia com o comportamento dos neurônios, sugere o uso da numeração
binária para a representação interna dos números, ao invés da numeração decimal, pela evidente
economia que isto proporciona no tempo gasto nos cálculos e na complexidade dos circuitos. As
válvulas foram escolhidas como elementos básicos por serem dispositivos com o menor tempo de
chaveamento (mudança do valor lógico 0 para o valor lógico 1) existentes com a tecnologia
disponível naquela época. O uso de um sinal elétrico periódico para cadenciar todas as operações do
computador foi também proposto, dando origem ao que chamamos de relógio do computador.
Este modelo de organização proposto por Von Neumann continua sendo utilizado no projeto dos
processadores comerciais nos dias de hoje. O estudo de suas características permite uma
compreensão adequada do funcionamento dos computadores utilizados comercialmente hoje em
dia.
35
4.2 MODELO DE BARRAMENTO DE SISTEMA
O modelo de Von Neumann passou por um refinamento que recebeu o nome de modelo de
barramento de sistema (Figura acima). Nesse modelo, a unidade de controle e a unidade
aritmética são vistas como um só elemento e recebem o nome de processador. As unidades de
entrada e saída são vistas também em uma única unidade, chamada agora de unidade de
entrada/saída. A memória continua sendo vista com uma unidade independente, com as mesmas
funções da arquitetura de Von Neumann.
Um elemento novo que surge é o próprio barramento de sistema, que faz a interligação entre o
processador, a memória e a unidade de entrada/saída. O barramento de sistema é composto pelos
barramentos de endereço, dados e controle.
O barramento de endereços transporta os sinais de endereço através de fios ou trilhas até a memória.
Sinais estes que vão, principalmente, determinar qual a posição de memória que irá ser lida ou
escrita. Os endereços podem ser fornecidos tanto pelo processador como pela unidade de entrada/
saída. A informação dessa posição de memória, que está sendo lida ou escrita na memória, transita
pelo barramento de dados, que é bidirecional. Apesar do nome, tanto instruções como os dados
propriamente ditos circulam por esse barramento.
O barramento de controle indica qual a natureza da operação que vai ser realizada: leitura ou
escrita, na maior parte dos casos, e possui também sinais para a arbitragem do barramento, para
determinar quem vai utilizar o barramento naquele momento, que pode ser tanto o processador
como a unidade de entrada/saída.
Eventualmente, nos modernos computadores, existe também um barramento dedicado para ligar os
periféricos à unidade de entrada/saída. Isso permite que o acesso do processador à memória se faça
com maior eficiência, pela diminuição do tráfego de dados no barramento de sistema.
A seguir vamos examinar cada um dos componentes do modelo de barramento de sistema com mais
detalhes.
ü Unidade Central de Processamento (Processador) → é o componente vital do sistema de
computação, responsável pela realização das operações de processamento (os cálculos
matemáticos com os dados, etc.) e pelo controle de quando e o que deve ser realizado, durante a
36
execução de um programa. Tal controle é realizado através da emissão de sinais apropriados de
controle.
A função da UCP consiste, então, em:
a) buscar uma instrução na memória, uma de cada vez;
b) interpretar que operação a instrução está explicitando (pode ser e soma de dois números,
uma multiplicação, etc.);
c) buscar os dados onde estiverem armazenados, para trazê-los até a UCP;
d) executar efetivamente a operação com os dados, guardar o resultado no local definido na
instrução;
e) reiniciar o processo apanhando nova instrução.
ü Memória → é o componente de um sistema de informação cuja função é armazenar as
informações que são, foram ou serão manipuladas pelo sistema. Os programa e os dados são
armazenados na memória para execução imediata (memória principal) ou para execução ou uso
posterior (memória secundária). Há duas únicas ações que podem ser realizadas: 1) a de guardar
um elemento na memória, então chamamos de armazenar e a operação associada a esta ação é
de escrita ou gravação (“write”) ou 2) recuperação de um elemento da memória, ação de
recuperar, e operação de leitura (“read”).
ü Dispositivos de Entrada e Saída → serve basicamente para permitir que o sistema de
computação se comunique com o mundo externo, realizando ainda, a interligação, a conversão
das linguagens do sistema para a linguagem do meio externo e vice-versa. Os seres humanos
entendem símbolos como A, b, *, ?, etc. e o computador entende sinais elétricos que podem
assumir um valor de +3Volts para representar 1 e ou outro valor, 0 Volts para representar 0. O
teclado (dispositivo de ENTRADA) interliga o usuário e o computador, por exemplo, quando
pressionamos a tecla A, os circuitos eletrônicos existentes no teclado “convertem” a pressão
mecânica em um grupo de sinais elétricos, alguns com voltagem alta (bit 1) e outras com
voltagem baixa (bit 0), que corresponde, para o computador, ao caractere A. Os dispositivos de
SAÍDA operam de modo semelhante, porém em sentido inverso, do computador para o mundo
exterior, convertendo os sinais elétricos em símbolos conhecidos por nós.
4.3
BIT, CARACTERE, BYTE E PALAVRA:
ü Bit → é a menor unidade de informação armazenável em um computador. Bit é a contração das
palavras inglesas Binary Digit. O bit pode ter, então, somente dois valores: 0 e 1.
Evidentemente, com possibilidades tão limitadas, o bit pouco pode representar isoladamente;
por essa razão, as informações manipuladas por um computador são codificadas em grupos
ordenados de bits, de modo a terem um significado útil.
ü Caractere → é o menor grupo de bits representando uma informação útil e inteligível para o ser
humano. Qualquer caractere a ser armazenado em um sistema de computação é convertido em
um conjunto de bits previamente definidos para o referido sistema (chama-se código de
representação de caracteres). Cada sistema poderá definir como (quantos bits e como se
organizam) cada conjunto de bits irá representar um determinado caractere.
37
ü Byte → é o grupo de 8 bits, tratados de forma individual, como unidade de armazenamento e
transferência. Como os principais códigos de representação de caracteres utilizam 8 bits por
caractere, os conceitos de byte e caractere tornam-se semelhantes e as palavras, quase
sinônimas.
É costume, no mercado, construírem memória cujo acesso, armazenagem e recuperação de
informações são efetuadas byte a byte (ou caractere a caractere). Por exemplo, 16 Kbytes de
memória ou 12 Mbytes. O K e M, são letras indicativas de um valor numérico fixo, utilizado para
reduzir a quantidade de algarismos representativos de um número, onde K representa mil vezes e M
milhões.
Como os computadores são binários, toda indicações numéricas referem-se a potência de 2, ou seja,
o K representa 210 = 1.024 unidades e M é 1.024 * 1.024 = 1.048.576 caracteres ou bytes.
ü Palavra → é um conjunto de bits que representam uma informação útil, mas estaria associada
ao tipo de interação entre a MP (memória principal) e a UCP, que é individual, informação por
informação, ou seja, a UCP processa informação por informação, armazena e recupera número a
número (cada uma estaria associada a uma palavra).
De modo geral, usam-se dois valores diferentes: um relacionado à unidade de armazenamento – o
byte e o outro para indicar a unidade de transferência e processamento – a palavra (que na quase
totalidade de computadores, possui um número de bits múltiplo de 1 byte – 16 ou 32 bits é o valor
mais comum.
4.4
CLASSIFICAÇÃO DE SISTEMAS DE COMPUTAÇÃO:
ü Microcomputadores → surgiram comercialmente por volta de 1974, através do
desenvolvimento dos microprocessadores (todos os componentes de uma UCP em uma única
pastilha) e o nome foi justamente devido ao tamanho e à capacidade de processamento, ambos
pequenos em relação ao que já existia no mercado.
Há no mercado várias categorias de microcomputadores, classificadas quanto ao tamanho físico do
equipamento e a sua portabilidade:
a) Mesa ou desktop;
b) Torre (maior disponibilidade para instalação de dispositivos de entrada e saída);
c) Laptops;
d) Notebooks e sub-notebooks;
e) Palmtops.
ü Estação de Trabalho → é essencialmente um microcomputador projetado para realizar tarefas
pesadas, em geral na área científica ou industrial, tais como complexas computações
matemáticas e a composição, manipulação e apresentação de gráficos e imagens de altíssima
resolução. Especialmente no que se refere a velocidade do processador e a capacidade de
memória, a potência de uma estação de trabalho é semelhante à de um minicomputador. Ex:
IBM RS/6000.
ü Minicomputadores → são máquinas projetadas para atender simultaneamente a demanda por
execução de programas de vários usuários, embora a quantidade de usuário e de programas não
seja tão grande quanto se pode encontrar em computadores de grande porte. A capacidade de
suportar múltiplos usuários e programas requer além de velocidade de processamento e
38
capacidade/velocidade de memória, uma extensa potencialidade para manipular diversos
dispositivos de entrada e saída. Ex: IBM AS/400.
ü Computador de Grande Porte → são sistemas projetados para manusear considerável volume
de dados e executar simultaneamente programas de uma grande quantidade de usuários. Essas
máquinas podem interagir com centenas de usuários em um dado instante, como, por exemplo,
um sistema de reserva de passagens aéreas, bem como uma contínua solicitação de
processamento por parte dos incontáveis terminais conectados diretamente ao sistema, aos quais
os computadores têm que atender e responder em poucos segundos. Ex: IBM 3090 e Control
Data CDC 6600.
ü Supercomputadores → são projetados primariamente para atender a um único propósito:
realizar grandes quantidades de cálculos matemáticos o mais rapidamente possível, tipo
previsão do tempo, simulação, modelagem tridimensional, etc. Ex: IBM 9021 e CRAY Y-MP.
4.5
MEDIDAS DE DESEMPENHO DE SISTEMA DE COMPUTADORES:
A medida geral de desempenho de um sistema de computador depende fundamentalmente da
capacidade e velocidade de seus diferentes componentes, da velocidade com que estes se
comunicam entre si e do grau de compatibilidade que possa existir entre eles.
ü Desempenho dos Processadores → é medido em termos de sua velocidade de trabalho; como
seu trabalho é executar instruções, criou-se a unidade chamada MIPS – milhões de instruções
por segundo e também a unidade MFLOPS – milhões de operações de ponto flutuante por
segundo, que é uma medida típica de estações de trabalho e de supercomputadores, pois estes
costumam trabalhar mais com cálculos matemáticos.
ü Tempo de Acesso → é uma unidade de medida mais apropriada, estando relacionada à
velocidade de cada componente e à do canal de interligação entre os dois (UCP e memória).
ü Tempo de Resposta → é a medida ligada ao desempenho global do sistema e não de um ou
outro componente. Trata-se do período de tempo gasto entre o instante em que o usuário iniciou
uma solicitação ou interrogação e o instante em que o sistema apresentou ao usuário a sua
resposta ou atendeu à sua solicitação. Ex: o intervalo de tempo entre a solicitação de um saldo
de conta em um terminal bancário e apresentação no vídeo da resposta (o saldo da conta).
ü Vazão (throughput) → define a quantidade de ações ou transações que podem ser realizadas
por um sistema na unidade de tempo. Por exemplo, a quantidade de atualizações que podem ser
feitas em um sistema de controle do estoque de uma empresa.
39
Capítulo 5 – Funções de cada Componente de um Computador
Iremos detalhar neste capítulo os aspectos que envolvem os componentes do sistema computador:
Processador, Memória e Entrada e Saída.
5.1
UNIDADE CENTRAL DE PROCESSAMENTO
A Unidade Central de Processamento - UCP (em inglês, Central Processing Unity - CPU) é a
responsável pelo processamento e execução dos programas armazenados na MP. As funções da
UCP são: executar as instruções e controlar as operações no computador.
Um programa, para ser efetivamente executado pelo processador, deve ser constituído de uma série
de instruções de máquina. Para que a execução tenha início, as instruções
devem ser armazenadas em células sucessivas, na MP.
A função da UCP consiste, então, em:
a) Buscar uma instrução na memória (operação de leitura), uma de cada
vez;
b) Interpretar que operação a instrução está explicitando (pode ser soma
de dois números, uma multiplicação, uma operação de entrada ou de
saída de dados, ou ainda uma operação de movimentação de um dado
de uma célula para outra);
c) Buscar os dados onde estiverem armazenados, para trazê-los até a
UCP;
d) Executar efetivamente a operação com os dados, guardar o resultado
(se houver algum) no local definido na instrução; e, finalmente;
e) Reiniciar o processo apanhando nova instrução.
Estas etapas compõem o que se denomina um ciclo de instrução. Este
ciclo se repete indefinidamente (ver Figura 5.8) até que o sistema seja
desligado, ou ocorra algum tipo de erro, ou seja, encontrada uma instrução
de parada.
Figura 5.8 – Ciclo de Instrução.
As atividades realizadas pela UCP podem ser divididas em duas grandes categorias funcionais:
função processamento e função controle.
5.1.1 Função Processamento
Vimos que processamento de dados é a ação de manipular um ou mais valores (dados) em certa
seqüência de ações, de modo a produzir um resultado útil. O resultado muda conforme o tipo de
operação realizada. Por exemplo, se uma instrução define que deve ser realizada uma operação de
adição sobre os valores A = 5 e B = 3, o sistema, ao interpretar a instrução, gera as ações
subseqüentes que redundarão no resultado igual a 5+3 = 8. Por outro lado, se o sistema interpretar
uma outra instrução que define a operação de subtração, ele deve gerar outras ações de modo que o
resultado seja 5-3 = 2 (e não mais 8).
Processar o dado é executar com ele uma ação que produza algum tipo de resultado. Este é, pois, a
atividade-fim do sistema; ele existe para processar dados. O dispositivo principal desta área de
atividade de uma UCP é chamado ULA – Unidade Lógica e Aritmética. Os demais componentes
relacionados com a função processamento são os registradores, que servem para armazenar dados
(ou para guardar resultados) a ser usados pela ULA. A interligação entre estes componentes é
efetuada pelo barramento interno da UCP.
40
5.1.1.1. Unidade Lógica e Aritmética – ULA:
É o dispositivo que realmente executa as operações matemáticas com os dados. Tais operações
podem ser:
Soma
Op. Lógica AND
Deslocamento à direita
Subtração
Op. Lógica OR
Deslocamento à esquerda
Multiplicação
Op. Lógica XOR
Incremento
Divisão
Op. Complemento
Decremento
Tais operações podem utilizar dois valores (operações aritméticas e lógicas), por isso a ULA possui
duas entradas, ver Figura 5.9, ou apenas um valor (operações com complemento). A ULA é um
aglomerado de circuitos lógicos e componentes eletrônicos simples que, integrados, realizam as
operações já mencionadas.
Sendo que os elementos em
amarelo, da UCP, são os
que contribuem para a
realização
da
função
processamento.
Figura 5.9 – Esquema da UCP, destacando-se os elementos que contribuem para a realização da função processamento.
5.1.1.2. Registradores:
Para que o dado seja transferido para a ULA, é necessário que ele permaneça, mesmo que por um
breve instante, armazenado em um registrador (a memória da UCP). Além disso, o resultado de uma
operação aritmética ou lógica realizada na ULA deve ser armazenado temporariamente, de modo
que possa ser reutilizado mais adiante (por outra instrução) ou apenas para ser, em seguida,
transferido para a memória.
Para atender a este propósito, a UCP é fabricada com certa quantidade de registradores, destinados
ao armazenamento de dados. Serve de memória auxiliar da ULA. Há sistemas nos quais um desses
registradores, denominado Acumulador – ACC, além de armazenar dados, serve de elemento de
ligação da UAL com os restantes dispositivos da UCP.
Em geral, os registradores de dados da UCP têm uma largura (quantidade de bits que podem
armazenar) igual à da palavra. O tamanho dos processadores IBM/370 era de 32 bits, a mesma
41
largura dos 16 registradores de emprego geral neles existentes. O microprocessador Intel 8088, que
moveu os primeiros sistemas IBM PC, possui registradores de 16 bits cada um, tamanho idêntico ao
definido para a palavra.
A quantidade e o uso dos registradores variam bastantes de modelo para modelo de UCP. As
Figuras 5.10 e 5.11 apresentam exemplos de organização de registradores de dados em algumas
UCP.
Além dos registradores de dados, a UCP possui sempre outros registradores (que não participam
diretamente da função processamento), com funções específicas ou que funcionam para a área de
controle. Entre estes registradores podemos citar desde já o Registrador de Instrução – RI e o
contador de instrução – CI, além do Registrador de Endereço de Memória – REM e o Registrador
de Dados de Memória – RDM.
Barramento Interno
ACC
Reg. Temp.
Flags
Reg. B Reg. C
Reg. D Reg. E
Reg. H Reg. L
ULA
B = C = D = E = H = L = 8 bits
ULA = 8 bits
Figura 5.10 – Diagrama (simplificado) em bloco da UCP Intel 8085, apenas com os
dispositivos básicos da área de processamento.
Reg. Temp.
ULA
Reg. Temp.
Flags
Reg. de Emprego geral
AH
AL
BH
BL
CH
CL
AH + AL += 16 bits
OH
DL
ULA = 16 bits
Barramento Interno
Figura 5.11 – Diagrama (simplificado) em bloco da UCP Intel 8086, mostrando
apenas os dispositivos básicos da área de processamento.
5.1.1.2. A Influência do Tamanho da Palavra:
A capacidade de processamento de uma UCP (a velocidade com que realiza o ciclo de uma
instrução) é em grande parte determinada pelas facilidades embutidas no hardware da ULA (ela é,
só hardware) para realizar as operações matemáticas projetadas.
Um dos elementos fundamentais para isso é a definição do tamanho da palavra da UCP. O valor
escolhido no projeto de fabricação da UCP determinará o tamanho dos elementos ligados à área de
processamento, entre estes a ULA.
42
Um tamanho maior ou menor de palavra (e, por conseguinte, da ULA, dos registradores de dados,
do barramento interno) acarreta, sem dúvida, diferenças fundamentais de desempenho da UCP.
Vejamos um exemplo simples sobre a influência do tamanho da palavra na capacidade de
processamento.
Vamos realizar a soma de dois valores, A = 3A25 e B = 172C, ambos números inteiros, sem sinal,
com 16 bits de tamanho cada um. A referida soma será simulada em 2 sistemas de computação,
sistema 1 e sistema 2.
O sistema 1 possui palavras de 8 bit, e a memória principal tem 64K células de 8 bits cada uma,
conforme mostrado na Figura 5.10.
O sistema 2 possui palavras de 16 bits, e a memória principal possui um espaço de endereçamento
de 1M células, todas também com 8 bits cada uma, conforme mostrado na Figura 5.11.
Operação de soma no sistema 1:
a) A operação é realizada em duas etapas lógicas, porque cada valor tem 16 bits e a UCP (ULA,
registrador ACC e barramento de dados) só permite armazenar, processar e transferir dados com
8 bits de tamanho.
b) Na primeira etapa são transferidos para a ULA, via ACC e barramento de dados, a 1a metade de
cada número (25 para o número A e 2C para o número B) e eles são somados.
c) Na segunda etapa a operação é realizada de forma idêntica, exceto para a 2a parte dos valores
(3A para o número A e 17 para o número B).
d) A operação completa gasta um período de tempo igual a T1 .
A Figura 5.12 mostra este exemplo em um digrama em bloco de uma UCP semelhante à do sistema
1, com a transferência dos valores sendo efetuada de 8 em 8 bits de cada vez.
Operação de soma no sistema 2:
a) A operação é realizada em uma etapa lógica, porque a UCP é fabricada para operar valores de
16 bits de tamanho, mesmo tamanho dos números.
b) A operação completa gasta um período de tempo igual a T2 .
A Figura 5.13 mostra este exemplo em um digrama em bloco de uma UCP semelhante à do sistema
2, com a transferência dos valores sendo efetuada de 16 em 16 bits de cada vez.
Considere que a operação de soma no sistema 1 é realizada em duas etapas e a mesma operação no
sistema 2 é realizada em uma etapa, o tempo T2 deve ser aproximadamente a metade do tempo T1 .
Isto torna a capacidade da UCP do sistema 2 bem maior que a capacidade do sistema 1.
NOTA: Nos exemplos anteriores foram consideradas várias simplificações, não somente na
arquitetura dos dois sistemas, como também no processo de soma, visando não complicar a
explicação do essencial – a influência do tamanho da palavra na variação da capacidade de
processamento dos sistemas. Nenhuma das simplificações feitas comprometeu a conclusão final.
43
MP
UCP
8 bits
8 bits
0
8 bits
25+2C (1a)
3A+17 (2a)
3A
25
17
2C
ULA
A
B
≈
≈
ACC = 8 bits
8 bits
Barramento de dados
UCP – Palavra de 8 bits
Memória de 64K bytes
Operação: somar 2 números com 16 bits de tamanho
A = 3A25 e B = 172C (realizada em duas etapas)
Figura 5.12 – Exemplo de uma operação de soma de 2 números, A e B, em um computador com palavra de 8 bits.
MP
UCP
16 bits
8 bits
8 bits
0
3A25+172C (1a)
3A
25
17
2C
ULA
≈
A
B
≈
ACC = 16 bits
16 bits
Barramento de dados
UCP – Palavra de 16 bits
Memória de 1M bytes
Operação: somar 2 números com 16 bits de tamanho
A = 3A25 e B = 172C (realizada em uma única etapa)
Figura 5.13 – Exemplo de uma operação de soma de 2 números, A e B, em um computador com palavra de 16 bits.
No projeto de uma UCP, a definição do tamanho da palavra tem enorme influência no desempenho
global de toda a UCP e, por conseguinte, do sistema como um todo. Vejamos:
a) Influencia no desempenho devido ao maior ou menor tempo na execução de instruções com
operações matemáticas na ULA, conforme demonstrado no exemplo anterior;
b) Influencia no desempenho devido ao tamanho escolhido para o barramento interno e externo da
UCP. Em geral, obtém-se o máximo de desempenho quando a largura (tamanho) do barramento
44
de dados é, no mínimo, igual ao tamanho da palavra (como nos exemplos mostrados). Se a
largura do barramento for, p. ex., igual a 16 bits em um sistema com palavra de 32 bits (ULA e
registradores de 32 bits), então o movimento de 4 bytes de um dado tipo caractere requererá
dois ciclos de tempo do barramento, ao passo que em barramento de 32 bits requereria apenas
um ciclo de tempo;
c) Influencia também na implementação física do acesso à memória. Embora atualmente a
capacidade das memórias seja medida em bytes (porque as células são sempre de largura igual a
8 bits), o movimento de dados entre UCP e memória é normalmente medido em palavras,
porque o barramento de dados que une o RDM (ou MBR) à memória deve acompanhar em
largura o valor da palavra. Para uma UCP de 32 bits de palavra, p. ex., é desejável que a
memória seja organizada de modo que sejam acessadas 4 células contíguas (4 bytes = 32 bits)
em um único ciclo de memória. Se isto não ocorrer, a UCP deverá ficar em estado de espera
(“wait state”).
5.1.2 Função Controle
A área de controle de uma UCP é a parte funcional que realiza (uma etapa de cada vez, em sistemas
de execução serial, ou várias etapas simultaneamente, em sistemas de execução “pipelining”) as
atividades de:
a) Busca de instrução que será executada, armazenando-a em um registrador especialmente
projetado para esta finalidade;
b) Interpretação das ações a serem desencadeadas com a execução da instrução (se é uma soma,
uma subtração, uma complementação, etc.); e
c) Geração de sinais de controle apropriado para ativação requerida para a execução propriamente
dita da instrução identificada. Esses sinais de controle são enviados aos diversos componentes
do sistema, sejam internos da UCP (como a ULA) ou externos (como a memória ou E/S).
Em outras palavras, a área de controle é projetada para entender o que fazer, como fazer e comandar
quem vai fazer no momento adequado. Podemos fazer uma analogia com os seres humanos,
imaginando que a área de controle é o cérebro que comanda o ato de andar, e as áreas do
processamento são os músculos e ossos das pessoas que realizam efetivamente o ato. Os nervos são
análogos ao barramento de interligação entre os diversos elementos.
Na Figura 5.9 apresentada anteriormente, os elementos em Azul são os que contribuem para a
realização da função de controle.
Os dispositivos básicos que devem fazer parte daquela área funcional são:
ü Unidade de controle (UC);
ü Decodificador;
ü Registrador de instrução (RI);
ü Contador de Instrução (CI) ou PC – Program Counter;
ü Relógio ou Clock;
ü Registradores de endereço de memória (REM) e de dados da memória (RDM).
A quantidade, a complexidade e a disposição dos componentes que realizam as funções de controle
variam consideravelmente de UCP para UCP, porém, essencialmente, os dispositivos indicados (em
azul na Figura 5.9) são os mesmos.
45
5.1.2.1. A Unidade de Controle:
É o dispositivo mais complexo da UCP. Possui a lógica necessária para realizar a movimentação de
dados e instrução de e para a UCP, através de sinais de controle, que emite em instantes de tempo
programados. Este dispositivo controla a ação da ULA. Os sinais de controle emitidos pela UC
ocorrem em vários instantes durante o período de realização de um ciclo de instrução e, de modo
geral, todos possuem uma duração fixa e igual, originada em um gerador de sinais usualmente
conhecido como relógio (clock).
5.1.2.2. O Relógio:
É o dispositivo gerador de pulsos cuja duração é chamada de ciclo. A quantidade de vezes em que
este pulso básico se repete em um segundo define a unidade de medida do relógio, denominada
freqüência, a qual também usamos para definir velocidade na UCP. A Figura 5.14 mostra um
exemplo de um relógio (em geral, é um gerador de cristal de quartzo) e os pulsos por ele gerados.
Um ciclo de relógio ou de máquina é o intervalo de tempo entre o início de um pulso e o início do
seguinte. Este ciclo está relacionado à realização de uma operação elementar, durante o ciclo de
uma instrução (operação elementar pode ser, p. ex., uma microinstrução, que é parte do ciclo de
uma instrução de máquina, que veremos posteriormente). No entanto, mesmo esta operação
elementar não se realiza em um só passo e, por essa razão, costuma-se dividir o ciclo de máquina
em ciclos menos (subciclos), defasados no tempo, de modo que cada um aciona um passo diferente
da operação elementar. A Figura 3.14 mostra o ciclo básico e os 5 subciclos gerados por um
retardador (exemplo dos ciclos do processador Intel 8085).
5.1.2.3. Registrador de Instrução - RI:
É o registrador que tem a função específica de armazenar a instrução a ser executada pela UCP. Ao
se iniciar um ciclo de instrução, a UC emite o sinal de controle que acarretará a realização de um
ciclo de leitura para buscar a instrução na memória (uma cópia dela), e que, via barramento de
dados e RDM, será armazenado no RI.
5.1.2.4. Contador de Instrução - CI:
É o registrador cuja função específica é armazenar o endereço da próxima instrução a ser executada.
Tão logo a instrução que vai ser executada seja buscada (lida) da memória para a UCP (início do
ciclo de instrução), o sistema providencia a modificação do conteúdo do CI de modo que ele passe a
armazenar o endereço da próxima instrução na seqüência. Por isso, é comum definir a função CI
como sendo a de “armazenar o endereço da próxima instrução”, que é o que realmente ele faz
durante a maior parte da realização de um ciclo de instrução.
O CI é um registrador crucial para o processo de controle e de seqüenciamento da execução dos
programas.
Relógio
T0
Gerador
De
Tempo
T1
T2
T3
T4
T5
Unidade
De
Controle
(a) Diagrama em Bloco do conjunto de tempo da área de controle.
46
1 Subciclo = T0 /5
T0
T1
T2
T3
T4
T5
1 Ciclo = T0
(b) Diagrama de tempo do ciclo do processador (T0 ) e seus 5 subciclos.
Figura 5.14 – Diagrama em bloco da UC, mostrando o relógio e um conjunto de ciclos de tempo.
5.1.2.5. Decodificador de Instrução:
É um dispositivo utilizado para identificar as operações a serem realizadas, que estão
correlacionadas à instrução em execução. Em outras palavras, cada instrução é uma ordem para que
a UCP realize uma determinada operação. Como são muitas instrução, é necessário que cada uma
possua uma identificação própria e única. A unidade de controle está, por sua vez, preparada para
sinalizar adequadamente aos diversos dispositivos da UCP, conforme ela tenha identificado a
instrução a ser executada.
O decodificador recebe na entrada um conjunto de bits previamente escolhidos e específicos para
identificar uma instrução de máquina (cada instrução tem um valor próprio) e possui 2N saídas,
sendo N a quantidade de algarismos binários do valor de entrada.
A Figura 5.15 mostra um exemplo de configuração de decodificador com entrada de 4 bits e 16
saídas. Cada linha de saída aciona de modo diferente a UC e esta, por sua vez, emite diferentes
sinais de controle, conforme a linha de saída decodificada.
S0 a S15
Registrador
de Instrução
E0 a E2
Decodificador
UC
Sinais de
Controle
E – Entrada
S – Saída
(a) Diagrama em bloco da decodificação em uma UCP.
47
E0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
E1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
E2
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
E3
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
S0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
S1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
S2
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
S3
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
S4
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
S5
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
S6
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
S7
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
S8
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
S9
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
S10 S11 S12 S13 S14 S15
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
Figura 5.15 – Exemplo de um decodificador com 4 entradas e 16 saídas.
5.1.2.6. Registrador de Dados de Memória – RDM e Registrador de Endereços de Memória - REM:
São os registradores utilizados pela UCP e memória para comunicação e transferência de
informação conforme já explicado. Em geral, o RDM (ou MBR – Memory Buffer Register) possui
um tamanho (capacidade de armazenamento de bits) igual ao da palavra e do barramento de dados,
enquanto o REM (ou MAR – Memory Address Register) possui um tamanho igual ao dos
endereços da memória (e, consequentemente, do barramento de endereço do sistema). Pela
definição de bits do REM podemos calcular qual o espaço máximo de endereçamento da memória
principal de um computador.
48
5.2
MEMÓRIA:
5.2.1 Tecnologia de fabricação:
Ao longo do tempo, diversas tecnologias vêm sendo desenvolvidas para a fabricação de memória.
Atualmente algumas dessas tecnologias já são obsoletas, como as memórias de núcleo de ferrite
(magnéticas), algumas das tecnologias mais conhecidas são:
ü Memória de semicondutores → são dispositivos fabricados com circuitos eletrônicos e
baseados em semicondutores. São rápidas e relativamente caras, se comparadas com outros tipos.
Registradores e memória principal são exemplos de memórias de semicondutores ou, mais
simplesmente, memórias eletrônicas.
ü Memórias de meio magnético → são dispositivos, como os disquetes, discos rígidos e fitas
magnéticas, fabricados de modo a armazenar informações sob a forma de campos magnéticos.
Eles possuem características magnéticas semelhantes às das fitas cassetes de som, as quais são
memórias não voláteis.
5.2.2 Hierarquia de Memória:
A MP não é o único dispositivo de armazenamento de um computador. Em função de características
como tempo de acesso, capacidade de armazenamento, custo, etc., podemos estabelecer uma
hierarquia de dispositivos de armazenamento em computadores.
Devido a essa grande variedade de tipos de memória, não é possível implementar um sistema de
computação com uma única memória. Na realidade, há muitas memórias no computador, as quais
se interligam de forma bem estruturada, constituindo um sistema em si, parte do sistema global de
computação, podendo ser denominado subsistema de memória, como mostrado na Figura 5.2.
Custo alto
Velocidade alta
Baixa capacidade
Registradores
Memória cache
Memória principal
Custo baixo
Velocidade baixa
Capacidade elevada
disco
fitas
Memória secundária
Figura 5.2 – Hierarquia de memória.
A pirâmide em questão é projetada com base larga, que simboliza a elevada capacidade, o tempo de
uso e o custo do componente que a representa.
A seguir serão definidos os principais parâmetros para análise das características de cada tipo de
memória componente da hierarquia apresentada na Figura 5.2.
ü Tempo de Acesso → é o período de tempo gasto decorrido desde o instante em que foi iniciada
a operação de acesso até que a informação requerida (instrução ou dado) tenha sido
efetivamente transferida. Pode ser chamado tempo de acesso para leitura ou simplesmente
tempo de leitura. É dependente do modo como o sistema de memória é constituído e da
velocidade dos seus circuitos. Ele varia bastante de acordo com o tipo de memória analisado,
sendo valores típicos entre 50 e 150 nanossegundos (ns), por exemplo, para uma memória
49
principal (tipo DRAM) e de 12 a 60 milissegundos (ms) para discos magnéticos (memória
secundária).
ü Capacidade → é a quantidade de informação que pode ser armazenada em uma memória; a
unidade de medida mais comum é o byte, embora também possam ser usadas outras unidades
como células (no caso da memória principal e cache), setores (no caso de discos) e bits (no caso
de registradores). Dependendo do tamanho (tamanho refere-se a quantidade de informação que
pode ser armazenada e não no tamanho físico) da memória, isto é, de sua capacidade, indica-se
o valor numérico total de elementos de forma simplificada, através da inclusão de K (kilo), M
(mega), G (giga) ou T (tera).
Exemplo de nomenclatura para valores de capacidade de memória:
a) O registrador R1 tem 16 bits;
b) A ROM do microcomputador A tem 32 Kbytes;
c) A RAM do computador B tem capacidade para endereçar 32 Mcélulas;
d) O disco C tem capacidade para armazenar 4.5 Gbytes.
e) O CD-ROM E tem capacidade de armazenamento igual a 650 Mbytes.
ü Volatilidade → memórias podem ser do tipo volátil ou não volátil. Uma memória não volátil é
a que retém a informação armazenada quando a energia elétrica é desligada. Memória volátil é
aquela que perde a informação armazenada quando a energia elétrica desaparece (interrupção de
energia elétrica ou desligamento da chave ON/OFF do equipamento).
ü Temporariedade → trata-se de uma característica que indica o conceito de tempo de
permanência da informação em um dado tipo de memória. Por exemplo, informações
(programas e dados) podem ser armazenadas em discos ou disquetes e lá permanecerem
armazenadas indefinidamente (mas há sempre a possibilidade de perda de magnetismo com o
passar do tempo) a este tipo de memória define-se como permanente. Ao contrário dos
registradores, que armazenam um dado por um tempo extremamente curto (nanossegundos), a
este tipo chamamos de transitória.
ü Custo → o custo de fabricação de uma memória é bastante variado em função de diversos
fatores, tipo: tecnologia de fabricação, tempo de acesso, e outros. Uma boa forma de medida de
custo é o preço por byte armazenado, em vez do custo total.
O quadro a seguir mostra mais características:
Tipo
Registrador
Memória Cache
Memória Principal
Memória Auxiliar
Capacidade
Bytes
Kbytes
Mbytes
Gbytes
Velocidade
muito alta
alta
Média
Baixa
Custo
muito alto
alto
médio
baixo
Localização
UCP
UCP/placa
Placa
Externa
Volatilidade
Volátil
Volátil
Volátil
Não Volátil
A UCP vê nesta ordem e acessa primeiro a que está mais próxima. Subindo na hierarquia, quanto
mais próximo da UCP, maior velocidade, maior custo, porém menor capacidade de
armazenamento.
50
5.2.2.1 – Registradores:
São dispositivos de armazenamento temporário, localizados na UCP, extremamente rápidos, com
capacidade para apenas um dado (uma palavra). Devido a sua tecnologia de construção e por estar
localizado como parte da própria pastilha ("chip") da UCP, é muito caro. O conceito de registrador
surgiu da necessidade da UCP de armazenar temporariamente dados intermediários durante um
processamento. Por exemplo, quando um dado resultado de operação precisa ser armazenado até
que o resultado de uma busca da memória esteja disponível para com ele realizar uma nova
operação.
Analisando os diversos parâmetros que caracterizam as memórias, temos:
Tempo de acesso: possuem o menor tempo de acesso a memória do sistema, algo em torno de 10 a
20 nanossegundos, dependendo de tratar-se da UCP de um supercomputador ou de um
microprocessador mais lento.
Capacidade: são fabricadas com a capacidade de armazenar um único dado, umas únicas
instruções ou até um único endereço. Desta forma, a quantidade de bits de cada um é de uns poucos
bits (de 8 a 64), dependendo do tipo de processador.
Volatilidade: são memórias semicondutoras, portanto, necessitam de energia elétrica para
funcionarem.
Temporariedade: os registradores são memórias auxiliares internas à UCP e, portanto,
tendem a guardar informações o mais temporariamente possível.
Custo: devido à tecnologia mais avançada de sua fabricação, os registradores são os
dispositivos de memória de maior custo.
5.2.2.2. Memória Cache:
Com o desenvolvimento da tecnologia de construção da UCP, as velocidades foram ficando muito
mais altas que as das memórias, que não tiveram a mesma evolução de velocidade (o
aperfeiçoamento das memórias se deu mais no fator capacidade). Desta forma, os tempos de acesso
às memórias foram ficando insatisfatórios e a UCP ao buscar um dado na memória precisa ficar
esperando muitos ciclos até que a memória retorne o dado buscado ("wait states"), configurando um
gargalo ("bottleneck") ao desempenho do sistema. Por esse motivo, desenvolveram-se outras
arquiteturas de memória privilegiando a velocidade de acesso. A arquitetura da memória cache é
muito diferente da arquitetura da memória principal e o acesso a ela é muitas vezes mais rápido
(p.ex: 5 ns contra 70 ns). No entanto, o custo de fabricação da memória cache é muito maior que o
da MP. Desta forma, não é econômico construir um computador somente com tecnologia de
memória cache. Criou-se então um artifício, incorporando-se ao computador uma pequena porção
de memória cache, localizada entre a UCP e a MP, e que funciona como um espelho de parte da
MP.
A memória cache opera em função de um princípio estatístico comprovado: em geral, os programas
tendem a referenciar várias vezes pequenos trechos de programas, como loops, sub-rotinas, funções
e só tem sentido porque programas executados linearmente, seqüencialmente, são raros. Desta
forma, algoritmos (chamados algoritmos de cache) podem controlar qual parte do código ficará
copiado na cache, a cada momento.
Quando a MP busca um determinado trecho de código e o encontra na cache, dá-se um "cache hit”,
enquanto se o dado não estiver presente na cache será necessário requisitar o mesmo à MP,
acarretando atraso no processamento e dá-se um "cache miss" ou "cache fault". O índice de cache
hit ou taxa de acerto da cache é geralmente acima de 90%.
Tempo de acesso: tendo em vista que a UCP acessa primeiro a memória cache, para buscar a
informação requerida, possuem tempo de acesso entre 5 e 25 ns.
Capacidade: os valores típicos de memória cache oscilam entre 512 K a 2 M em máquinas
de grande porte e em máquinas tipo microcomputador de 512 K a 1 M.
51
Volatilidade: são dispositivos constituídos de circuitos eletrônicos, logo requerem energia
elétrica para seu funcionamento.
Temporariedade: devido a seu tamanho não ser grande e ser utilizada por todo os programas
em execução, há a necessidade de alteração periódica da informação armazenada para permitir
entrada de novas informações.
Custo: o custo de fabricação das memórias cache é alto.
5.2.2.3. Memória Principal:
Uma das principais características definidas no projeto de arquitetura do sistema de Von Neumann,
o qual se constitui na primeira geração de computadores, consistia no fato de ser uma máquina “de
programa armazenado”. O fato de as instruções, uma após a outra, poderem ser imediatamente
acessadas pela UCP é o que garante o automatismo do sistema e aumenta a velocidade de execução
dos programas.
Tempo de acesso: possuem tempo de acesso entre 50 ns e 150 ns.
Capacidade: os valores típicos para microcomputadores, minicomputadores e de grande
porte, estão na faixa de 16 até 128M byte, embora eles possam endereçar memória de 4G byte.
Volatilidade: sendo construído com semicondutores e circuitos eletrônicos correlatos, este
tipo de memória também é volátil.
Temporalidade: para que um programa seja executado é necessário que ele seja armazenado
na memória principal. Atualmente esta afirmação é parcialmente verdadeira, visto que não é mais
necessário que o programa completo esteja na MP, e sim apenas armazenado a instrução que será
acessada pela UCP. No entanto, a transitoriedade com que as informações permanecem
armazenadas na MP é, em geral, mais duradoura que na memória cache e registradores.
Custo: A tabela abaixo mostra os valores típicos.
Nome
SIMM 16Mb -72 vias EDO
SIMM 32Mb -72 vias EDO
DIMM 64Mb SDRAM 100 MHz
DIMM 64Mb SDRAM 133 MHz
DIMM 128Mb SDRAM 100 MHz
DIMM 128Mb SDRAM 133 MHz
DIMM 256Mb SDRAM 100 MHz
DIMM 256Mb SDRAM 133 MHz
Preço
130,98
287,92
177,00
188,80
354,00
365,80
790,60
802,40
5.2.2.4. Memória Secundária:
Memórias secundárias resolvem problemas de armazenamento de grandes quantidades de
informações. A capacidade da MP é limitada pelo seu relativamente alto custo, enquanto as
memórias secundárias têm maior capacidade e menor custo; portanto, o custo por bit armazenado é
muito menor.
Outra vantagem importante é que as memórias secundárias não são VOLÁTEIS, isto é, não
dependem de estar energizadas para manter gravado seu conteúdo.
Os principais dispositivos de memória auxiliar são: discos rígidos (ou HD), drives de disquete,
unidades de fita, CD-ROM, DVD, unidades ótico-magnéticas, etc.
Tempo de acesso: os valores típicos para disco rígidos são faixa de 10 a 40 ms. Discos do
tipo CD-ROM trabalham com tempos de acesso ainda maiores, na faixa de 200 a 500 ms, enquanto
52
as fitas magnéticas são ainda mais lentas, podendo ler um arquivo em tempos da ordem de
segundos.
Capacidade: uma das características que coloca a memória secundária na base da pirâmide é
justamente sua grande capacidade de armazenamento. Discos rígidos de microcomputadores
podem, atualmente, ser encontrados com capacidade de 1.2, 4.5, 10 Gbytes, etc. Sistema de grande
porte são maiores ainda, tipos 360 Gbytes. Os CD-ROM têm capacidade de 650 Mbytes, etc.
Volatilidade: as informações não desaparecem com a falta de energia elétrica, logo não são
voláteis.
Temporariedade: tem caráter permanente, ou pelo menos, de longo período de
armazenagem.
5.2
MEMÓRIA PRINCIPAL:
Conforme foi definido anteriormente, Memória Principal é a parte do computador onde programas e
dados são armazenados para processamento. A informação permanece na memória principal apenas
enquanto for necessário para seu emprego pela UCP, sendo então a área de MP ocupada pela
informação pode ser liberada para ser posteriormente sobregravada por outra informação. Quem
controla a utilização da memória principal é o Sistema Operacional.
5.2.1. Estrutura da Memória Principal – Células e Endereços:
A memória precisa ter uma organização que permita ao computador guardar e recuperar
informações quando necessário. Não teria nenhum sentido armazenar informações que não fosse
possível recuperar depois. Portanto, não basta transferir informações para a memória. É preciso ter
como encontrar essa informação mais tarde, quando ela for necessária, e para isso é preciso haver
um mecanismo que registre exatamente onde a informação foi armazenada.
ü Célula: é a unidade de armazenamento do computador. A memória principal é organizada em
células. Célula é a menor unidade da memória que pode ser endereçada (não é possível buscar
uma "parte" da célula) e tem um tamanho fixo (para cada máquina). As memórias são
compostas de um determinado número de células ou posições. Cada célula é composta de um
determinado número de bits. Todas as células de um dado computador têm o mesmo tamanho,
isto é, todas as células daquele computador terão o mesmo número de bits.
Cada célula é identificada por um endereço único, pela qual é referenciada pelo sistema e pelos
programas. As células são numeradas seqüencialmente, uma a uma, de 0 a (N-1), chamado o
endereço da célula.
ü Endereço: é o localizador da célula, que permite identificar univocamente uma célula. Assim,
cada célula pode ser identificada pelo seu endereço.
53
Figura 5.3 – Estrutura de uma Memória Principal.
Unidade de transferência é a quantidade de bits que é transferida da memória em uma única
operação de leitura ou transferida para a memória em uma única operação de escrita. O tamanho da
célula poderia ser igual ao da palavra, e também à unidade de transferência, porém por razões
técnicas e de custo, são freqüentemente diferentes.
OBS.: Uma célula não significa o mesmo que uma palavra; uma célula não necessariamente contém
uma palavra.
ü Palavra: é a unidade de processamento da UCP. Uma palavra deve representar um dado ou uma
instrução, que poderia ser processada, armazenada ou transferida em uma única operação. No
entanto, em geral não é assim que acontece e os computadores comerciais não seguem um
padrão único para a organização da UCP e MP. Computadores comerciais (tais como por
exemplo, os baseados nos processadores Intel 486) podem ter o tamanho da palavra definido
como de 32 bits, porém sua estrutura de memória tem células de 16 bits.
A estrutura da memória principal é um problema do projeto de hardware:
- mais endereços com células menores ou
- menos endereços com células maiores?
- O tamanho mais comum de célula era 8 bits (1 byte); hoje já são comuns células contendo
vários bytes.
Número de bits para representar um endereço
Expressão geral: MP com endereços de 0 a (N-1)
N = 2x logo:
x = log2 N
sendo x = nº de bits para representar um endereço e N o número de endereços.
5.2.2 Capacidade da Memória Principal
A capacidade da MP em bits é igual ao produto do nº de células pelo total de bits por célula.
T=NxM
T = capacidade da memória em bits
N = nº de endereços (como vimos anteriormente, N=2x sendo x = nº de bits do endereço)
M = nº de bits de cada célula
54
Para encontrar a capacidade em bytes, bastaria encontrar a capacidade em bits e depois multiplicar
por 8 (cada byte contém 8 bits) ou então converter o tamanho da célula para bytes e depois
multiplicar pelo número de células.
O último endereço na memória é o endereço N-1 ( os endereços começam em zero e vão até N-1).
EXERCÍCIOS
1) Numa MP com 1kbyte de capacidade, onde cada célula tem 8 bits:
a) quantas células tem a MP?
b) quantos bits são necessários para representar um endereço de memória?
2) Um computador endereça 1k células de 16 bits cada uma. Pede-se:
a) sua capacidade de memória;
b) o maior endereço que o computador pode endereçar;
3) A memória de um computador tem capacidade de armazenar 216 bits e possui um barramento de
dados de 16 bits. Pede-se:
a) o tamanho da célula de memória;
4) Calcular e completar os campos:
M - Tamanho x - nº de bits do N - nº de
T - Capac. da memória
da célula
endereço
endereços
8 bits
1 K byte
16 bits
1 K endereços 4 bits
256 bits
4 bytes
4 Gbytes
1 Mbyte
64 bits
-
0 a (N-1) - Faixa
de endereços
0 a 65.535
0 a 262.143
4) Uma memória de um computador tem um espaço máximo de endereçamento de 2K. Cada célula
pode armazenar 16 bits. Qual o valor total de bits que podem ser armazenados nesta memória e qual
o tamanho de cada endereço?
5) Uma memória é fabricada com a possibilidade de armazenar um máximo de 256K bits. Cada
célula pode armazenar 8 bits. Qual é o tamanho de cada endereço e qual é o total de células que
podem ser utilizadas na memória?
5.2.3 Operações com Memória Principal
É possível realizar duas operações em uma memória:
ü escrita (“write”) – armazenar informação na memória;
ü leitura (“read”) – recuperar uma informação armazenada na memória.
A operação de leitura não destrói o conteúdo da memória, ela apenas providencia a transferência de
uma cópia do que está armazenado, enquanto a informação desejada continuar armazenada.
Somente a operação de escrita é destrutiva.
Vamos descrever, com um pouco mais de detalhe, como se acontece uma operação de leitura e uma
escrita na MP de um sistema de computação.
Para tanto, há necessidade de se definir os elementos que compõem a estrutura UCP/MP e que são
utilizados naquelas operações, veja Figura 5.4.
55
UCP
RDM
REM
MP
UC
Barramento de controle
Barramento de endereços
Barramento de dados
Figura 5.4 – Estrutura UCP/MP e a utilização de barramento para comunicação entre elas.
ü Registrador de Dados da Memória (RDM) → registrador que armazena temporariamente a
informação (conteúdo de uma ou mais células) que está sendo transferida da MP para a UCP
(em uma operação de leitura) ou da UCP para a MP (em uma operação de escrita). Permite
armazenar a mesma quantidade de bits do barramento de dados.
ü Barramento de dados → interliga o RDM à MP, para transferência de informações entre MP e
a UCP (sejam instruções ou dados). É bidirecional, isto é, ora os sinais percorrem o barramento
da UCP para a MP (operação de escrita), ora percorrem o caminho inverso (operação de leitura).
ü Registrador de Endereços da Memória (REM) →registrador que armazena o endereço de
acesso a uma posição de memória, ao se iniciar uma operação de leitura ou de escrita. Em
seguida, o referido endereço é encaminhado à área de controle da MP para codificação e
localização da célula desejada. Permite armazenar a mesma quantidade de bits do barramento de
endereços.
ü Barramento de Endereços → interliga o REM à MP para transferência dos bits que
representam um determinado endereço. É unidirecional, visto que somente a UCP aciona a MP
para realização de operações de leitura e escrita. Possui tantos fios (ou linhas de transmissão)
quantos são os bits que representam o valor do endereço.
ü Barramento de controle → interliga a UCP (Unidade de Controle) à MP para passagem de
sinais de controle durante uma operação de leitura ou escrita. É bidirecional, porque a UCP
pode enviar sinais de controle para a MP, como sinal indicador de que a operação é de leitura ou
escrita e a MP pode enviar sinais do tipo WAIT (para a UCP se manter aguardando o término de
uma operação).
Para simplificar a descrição dos procedimentos e operações realizadas internamente em um sistema
de computação vamos adotar uma convenção genericamente conhecida como Linguagem de
Transferência entre Registradores (LTR), Princípios básicos da LTR:
a) Caracteres alfanuméricos significam abreviaturas de nomes de registradores ou posição
de memória. EX: REM, MP, R1.
b) Parênteses indicam conteúdo, no caso de registradores, ou que o valor entre parênteses é
um endereço de MP.
c) Uma seta indica atribuição, isto é, transferência de conteúdo de um registrador para
outro ou para a MP ou vice-versa.
56
EXEMPLO:
(REM) ← (CI) (significa que o conteúdo do registrador cujo nome é CI é transferido para o
registrador REM).
(RDM) ← (MP(REM)) (significa que o conteúdo da célula da MP cujo o endereço está no REM é
transferido para o RDM.
5.2.3.1. Operações de leitura:
A Figura 5.5 mostra um exemplo de operação de leitura de um dado armazenado no endereço 1324
da MP (o valor do dado é 5C) para a UCP.
Os passos que descrevem a referida operação de leitura são:
1. (REM) ← (outro registrador)
o endereço é colocado no barramento de endereços.
2. Sinal de leitura na barra de controle
3. (RDM) ← (MP(REM)) pelo barramento de dados
4. (outro registrador) ← (RDM)
end 0000
≈
≈
UCP
Outro
reg.
RDM
5C
Outro
reg.
end 1324
5C
REM
1324
UC
end FFFF
Barramento de controle
Barramento de endereços
Barramento de dados
Figura 5.5 – Exemplo da operação de leitura.
No primeiro passo, a unidade de controle – UC da UCP inicia a operação de leitura através da
transferência do endereço 1324, de um de seus registradores específicos para a REM e coloca o
sinal de leitura (READ) no barramento de controle para indicar aos circuitos de controle da MP o
que fazer em seguida.
A MP decodifica o endereço recebido e transfere seu conteúdo para o RDM através do barramento
de dados. Do RDM, então, a informação é transferida para o elemento da UCP destinatário final.
5.2.3.2. Operações de escrita:
A realização de uma operação de escrita segue o procedimento semelhante ao da operação de
leitura, mas pelo sentido de transferência inverso, isto é, da UCP para a MP.
57
A Figura 5.6 mostra um exemplo de operação de escrita de um dado, de valor igual a F7, da UCP
para a MP, a ser armazenado no endereço 21C8.
Os passos que descrevem a referida operação são:
1. (REM) ← (outro registrador) (a UCP coloca o endereço no REM de endereços)
endereço é colocado no barramento de endereços.
2. (RDM) ← (outro registrador) (a UCP coloca no RDM o dado a ser transferido)
3. Sinal de escrita (a UCP aciona o sinal WRITE pelo barramento de controle)
4. (MP(REM)) ← (RDM) (o dado é transferido para a célula de memória pelo barramento de
dados)
end 0000
≈
≈
UCP
end 21C8
RDM
F7
F7
REM
21C8
UC
end FFFF
Barramento de controle
Barramento de endereços
Barramento de dados
Figura 5.6 – Exemplo da operação de escrita.
Nos primeiros passos a UC coloca o endereço desejado no REM e o dado a ser transferido no RDM.
O endereço é colocado no barramento de endereço, o dado no barramento de dados e o sinal de
escrita (WRITE) é acionado no barramento de controle.
Como resultado da decodificação do endereço pelos dispositivos de controle da memória, o valor
F7 é colocado na célula desejada, de endereço 21C8.
Conforme explicado para a operação de leitura, a realização dos passos necessários à efetivação de
uma operação de escrita gastas um tempo de acesso e a MP pode ou não estar preparada para
imediatamente realizar nova operação.
EXERCÍCIO:
6) Um computador, cuja a MP tem capacidade máxima de 2K palavras de 16 bits cada, possui um
REM e um RDM. Qual o tamanho destes registradores; qual o valor do maior endereço dessa MP e
qual a quantidade total de bits que nela podem ser armazenados?
58
5.2.4 Tipos de Memória Principal:
Conforme já mencionamos diversas vezes a memória principal da maioria dos computadores atuais
é fabricada com tecnologia de semicondutores. Tendo em vista as características desses elementos
eletrônicos, este tipo de dispositivo possui uma particularidade muito importante e única: o tempo
de acesso a qualquer célula é igual, independente da localização física da célula.
Em outras palavras, se o tempo de acesso de uma determinada memória de semicondutor é 70 ns,
isto significa que este será o tempo para acessar a célula de endereço 0 (1a célula) ou para acessar a
20a célula.
Qualquer que seja o endereço, aleatoriamente ou randomicamente escolhido, o tempo de acesso será
o mesmo. Esse tipo de memória é denominado memória de acesso aleatório, sendo, no entanto,
mais conhecida pela sigla de seu nome em Inglês: RAM - Random Access Memory. Memória
RAM são normalmente utilizadas na implementação do espaço de endereçamento da MP dos
computadores. No que se refere ao processo de fabricação e desempenho, há dois tipos de RAM no
mercado: memórias RAM Estáticas (Static RAM – SRAM) e memórias RAM Dinâmicas
(Dynamic RAM – DRAM).
A MP é a memória de trabalho da UCP, onde os programas (e seus dados) se sucedem em
execução, uns após os outros. Além de a MP ter de permitir que um programa seja armazenado em
seguida ao outro (isto significa que são realizadas sucessivas operações de escrita nas mesmas
células) durante a execução normal de um programa, suas instruções são sucessivamente lidas pela
UCP, que, por sua vez, também realiza operações de escrita sobre a MP, armazenando resultados
das operações realizadas.
Desta forma, a MP, utilizada para armazenamento dos programas e dados rotineiramente
executados em um sistema de computação, deve ser do tipo leitura/escrita (R/W – Read/Write).
Por outro lado, memórias de semicondutores são do tipo RAM, sendo usadas como MP dos
computadores. Se uma memória é de acesso aleatório (RAM) para leitura, invariavelmente também
o será para realizar ciclos de escrita.
Assim, as memórias do tipo RAM, que permitem leitura/escrita, são usadas como MP e este termo –
RAM – passou a ser tão comum com estas memórias que se confundem com o próprio nome da
memória (comumente se usa no comércio e na indústria o termo RAM quando se refere à MP).
Embora seja rápida e de acesso aleatório, a RAM possui algumas desvantagens, entre as quais a
volatilidade.
Por outro lado, as memórias R/W apresentam o inconveniente de permitindo que se escreva
normalmente em suas células, ser possível a acidental eliminação do conteúdo de uma ou mais de
suas células.
Uma vez que o processador nada realiza sem as instruções, é óbvio que ele deve possuir uma certa
quantidade de memória não volátil. Isto é, um local onde estejam permanentemente armazenadas
instruções que automaticamente iniciam a operação e a inicialização do sistema, tão logo a
alimentação elétrica seja ligada. Em microcomputadores costuma-se chamar de programa
bootstrap ou simplesmente boot, alguns fabricantes chamam de IPL – Initial Program Load
(Carregamento do Programa Inicial).
Esse tipo de memória além de ter que ser não-volátil, também não deve permitir que haja
eliminações acidentais. Trata-se de um programa que deve estar permanentemente armazenado e
não sofrer alterações por parte de nenhum outro programa. Em outras palavras, memórias que
armazenam este tipo de programa devem permitir apenas leitura. Chamam-se estas memória de
ROM – Read Only Memory (memória somente para leitura) e elas devem ser não voláteis.
No entanto, o tempo de acesso em memória ROM também é constante, independentemente da
localização física da célula, logo elas também são memória RAM. Porém, o mercado caiu no
engano de chamar de RAM apenas as memórias R/W, talvez para claramente diferença-las do outro
tipo, ROM (somente para leitura), já que as siglas são bem parecidas.
A Figura 5.7 apresenta a distribuição espacial das memórias R/W, RAM e ROM em um
microcomputador, indicando o conceito correto e o conceito usado na prática pelo mercado.
59
Endereço 0
Endereço 0
RAM
(Leitura/escrita)
Leitura/
escrita
≈
≈
≈
≈
RAM
ROM
ROM
Endereço N-1
Endereço N-1
(a) nomenclatura correta.
(b) nomenclatura popular
Figura 5.7 – Configuração da MP de um microcomputador tipo PC.
Memórias dos Tipos ROM:
ü PROM - Programmable Read Only Memory ou memória apenas de leitura, programável. Esta
memória é uma ROM programável (em condições e com máquinas adequadas, chamadas
queimadores de PROM) e geralmente é comprada "virgem" (sem nada gravado), sendo muito
utilizada no processo de testar programas no lugar da ROM, ou sempre que se queira produzir
ROM em quantidades pequenas. Uma vez programada (em fábrica ou não), não pode mais ser
alterada.
ü EPROM - Erasable Programmable Read Only Memory ou memória apenas de leitura,
programável (com queimadores de PROM) e apagável (com máquinas adequadas, à base de
raios ultra-violeta). Esta memória é uma PROM apagável. Tem utilização semelhante à da
PROM, para testar programas no lugar da ROM, ou sempre que se queira produzir ROM em
quantidades pequenas, com a vantagem de poder ser apagada e reutilizada.
ü EEPROM (ou E2PROM) - Electrically Erasable Programmable Read Only Memory ou
memória apenas de leitura, programável e eletronicamente alterável. Também chamada
EAROM (Electrically Alterable ROM). Esta memória é uma EPROM apagável por processo
eletrônico, sob controle da UCP, com equipamento e programas adequados. É mais cara e é
geralmente utilizada em dispositivos aos quais se deseja permitir a alteração, via modem,
possibilitando a carga de novas versões de programas à distância ou então para possibilitar a
reprogramação dinâmica de funções específicas de um determinado programa, geralmente
relativo ao hardware (p.ex., a reconfiguração de teclado ou de modem, programação de um
terminal, etc).
60
61
Download

Apostila de Arquitetura dos Computadores