Você está na página 1de 55

Arquitetura de Computadores

Engenharia/Ciência da Computação
Prof. Joel Guilherme

UNIDADE 2 – ARITMÉTICA
COMPUTACIONAL E SISTEMAS DE
MEMÓRIA
Introdução
Na Unidade 1, você viu os conceitos básicos de um sistema computacional, os principais
elementos que o compõem, e os mecanismos básicos que permitem ao computador computar. Como
computar é fazer cálculos, no sentido lato da palavra, e sendo esta a principal atividade de um
computador, precisamos entender como um computador executa cálculos.
Dois aspectos particularmente diferenciam a forma como um computador faz cálculos daquela
a que nós estamos acostumados. Primeiro, o computador trabalha em binário, conforme vimos, e
nós trabalhamos em decimal. Segundo, é que o computador trabalha com valores de precisão finita,
ou seja, ele não dispõe de quantos bits você queira para fazer os cálculos, estando limitado, em
primeira instância, pelo tamanho de seus registradores, e, em última instância, pela tamanho da
memória. Por isto vamos iniciar esta unidade examinando a aritmética computacional. Vamos ver
como o computador representa valores numéricos em binário, e como são realizadas as operações
aritméticas com esses números.
O restante da unidade será dedicada a nos aprofundarmos na parte mais importante de um
computador, depois do processador: seu sistema de memória, onde dados e instruções ficam
armazenados. Tivemos uma breve visão do que é uma memória na Unidade 1, como um depósito de
“informações”. Veremos aqui que existem diversos tipos de memória, analisaremos suas
características, e justificaremos porque um computador geralmente conta com todos estes tipos de
memória, organizados em uma estrutura hierárquica.
AULA 1 – Aritmética Computacional
1.1. Números de Precisão Finita
Segundo estimativas (http://tinyurl.com/l4rw9wf), o número de átomos no universo é

da ordem de 1080. Tal número, para ser expresso por extenso, requer 81 dígitos
decimais, ou seja, o dígito '1' seguido de 80 '0s'. Isto corresponde ao número N =
100000000000000000000000000000000000000000000000000000000000000000000000
000000000. Para representação em binário, como veremos adiante, necessitaríamos de
266 bits. Este é um número muito grande. No papel, praticamente não temos qualquer
problema para expressarmos um número desta ou qualquer outra grandeza, nem de
realizarmos operações com estes números. Em um computador digital, existem limitações
para a representação numérica, pois a quantidade de bits para isto é limitada, em função
do tamanho da palavra do processador, e mesmo da quantidade de memória existente.
Vejamos quais são as implicações de trabalharmos com números de precisão finita, ou
seja, com um número de dígitos limitado para sua representação.
Vamos considerar que nosso sistema computacional somente possa operar com
números inteiros, decimais, representados por 3 dígitos, na faixa de 000 a 999. Que
limitações isto nos trará?
Claramente podemos identificar que não seremos capazes de representar:
a) números maiores que 999 (por exemplo, '3752');
b) números negativos (como '-2');
c) números fracionários (tal como '1,35');
d) números irracionais (tal como ' √ 2 ' );
e) números complexos. (como '3+2i').
Além disso, sabemos que números inteiros, de uma forma geral, satisfazem à
propriedade de fechamento em relação às operações de soma, subtração e multiplicação.
Isto significa que se A e B são dois inteiros quaisquer, então A+B, A-B e AxB são também
inteiros. No entanto, os inteiros não satisfazem o fechamento sob a operação de divisão –
por exemplo, 62 = 3 é um inteiro, mas 32 = 1,5 não é inteiro.
Com relação aos números de precisão finita, podemos verificar que estes não
satisfazem à propriedade de fechamento para nenhuma das quatro operações
aritméticas, o que nos leva a prever que operações aritméticas realizadas em um
computador digital, que têm por natureza precisão finita, serão distintas das operações
aritméticas usuais a que estamos acostumados.
A principal diferença que vamos encontrar está na possível geração de erros.
Considerando nosso sistema numérico anterior, podemos observar os seguintes
exemplos:
 erro por excesso: 600+700 = 1300 (o resultado é muito grande);
 erro por falta: 005 – 007 = -2 (o resultado é muito pequeno);
 não-membro: 005  002 = 2,5 (o resultado não pertence ao conjunto, embora não
seja nem muito grande nem muito pequeno).
A possibilidade de ocorrência destes tipos de erro levam a que a álgebra de precisão
finita seja diferente da álgebra ordinária. Por exemplo, a álgebra ordinária prevê as
propriedades de associatividade entre a soma e a subtração, tal que podemos escrever
associatividade: a + (b – c) = (a + b) – c
é uma relação sempre verdadeira, para todo 'a', 'b' e 'c'. No entanto esta relação não
prevalece para números de precisão finita, como, por exemplo:
800 + (400 – 300)  (800 + 400) – 300,
visto que, na segunda expressão, o termo (800 + 400) irá gerar um erro por excesso!
Também, a álgebra ordinária prevê a propriedade de distributividade do produto
sobre a soma (ou subtração), de modo que a expressão
distributividade: a x (b – c) = (a x b) – (a x c)
é uma relação sempre verdadeira, para todo 'a', 'b' e 'c'. No entanto esta relação não
prevalece para números de precisão finita, como, por exemplo:
050 x (400 – 390)  (050 x 400) – (050 x 390),
visto que, na segunda expressão, o termo (050 x 400), assim como (050 x 390), irá gerar
um erro por excesso!
Uma conclusão fundamental que podemos tirar desta análise é que a aritmética
computacional não consegue, em geral, nos fornecer resultados exatos, mas apenas
aproximações para estes, visto ser impossível se representar todos os valores que
encontramos no mundo real. Analisaremos em mais detalhes este problema quando
virmos a aritmética binária e os números de ponto-flutuante, mais adiante.

1.2. Bases Numéricas


Já sabemos que os computadores modernos utilizam apenas o sistema binário
(base 2, dois dígitos apenas) para representar informações, o que nos leva à necessidade
de conhecermos, entendermos e sermos capazes de converter números desta base para
outras, em particular a decimal, e o inverso, como ilustrado na figura 2.1 abaixo.
Figura 2.01: Necessidade de conversão decimal-binário-decimal.

Para nossa comodidade, tendo em vista estarmos acostumados com o sistema


decimal, preferimos utilizar este sistema para entrada de dados. Para que o processador
possa processar é necessário então que seja feita uma conversão dos dados, de decimal
para binário, no processo de entrada. Para nossa comodidade também, requeremos outra
conversão, na saída, passando do sistema binário, utilizado pelo processador, para o
sistema decimal, a nós conveniente.
Os sistemas numéricos surgiram basicamente da necessidade de contagem do
homem. Nem sempre o homem utilizou o sistema decimal e, ao longo da história, diversos
outros sistemas foram criados e utilizados. Você pode ver alguns detalhes destes outros
sistemas em (Monteiro, 2007, pg 427).
Na realidade nós podemos representar números em qualquer base b > 1, sendo
particularmente de interesse na computação a base 10, por ser a base em que estamos
acostumados a trabalhar, a base 2, em função de ser a base de trabalho dos
processadores digitais. Você encontrará uma boa discussão sobre este tópico em
(Monteiro, 2007, Cap. 3)
É interessante analisarmos a formação dos números decimais, a que estamos tão
acostumados, e que chegamos a nos esquecer o real significado dos mesmos. Para
representar um número decimal utilizamos 10 símbolos (dígitos), e, de uma forma geral,
podemos representar um número N como mostrado abaixo, na figura 2.02:

figura 2.02: Número decimal genérico.


Como exemplo, podemos escrever N = 1.234,567 como

N = 1x103 + 2x102 + 3x101 + 4x100 + 5x10-1 + 6x10-2 + 7x10-3


representando, efetivamente, um número composto por um milhar, duas centenas, três
dezenas, quatro unidades, cinco décimos, seis centésimos e sete milésimos. Números
decimais utilizam portanto a base 10, sendo representados por dígitos do conjunto
{0,1,2,3,4,5,6,7,8,9}, cujos valores são multiplicados por uma potência de 10 (a base),
potência esta que é função da posição (ou ordem) do dígito – dígitos à esquerda da
vírgula decimal são alterados por potências positivas, e dígitos à direita da vírgula são
alterados por potências negativas. Por isto, este tipo de representação é chamado de
notação posicional (o valor do dígito é alterado em função da sua posição na
representação).
Da mesma forma, é possível utilizarmos outras bases, digamos, uma base b, onde
os dígitos sejam representados pelos inteiros do conjunto {0,1,2, … , (b-1)}, onde estes
dígitos são multiplicados por uma potência da base em função de sua posição, na forma:
Nb = dn…d2d1d0,d-1d-2d-3…d-k = dnbn+...+d2b2+d1b1+d0b0+d-1b-1+d-2b-2+...+d-kb-k
Como exemplo, suponha que estamos utilizando a base b = 4. Então, o número N4
= 103,24 tem como valor (decimal) o número

N = 1x42 + 0x41 + 3x40 + 2x4-1 = 16 + 0 + 3 + 0,5 = 19,510


Observe que sempre indicamos a base de representação de um número através de um
subscrito, caso esta possa não ser evidente. Observe também que, para a base 4,
somente podemos utilizar os dígitos do conjunto {0,1,2,3}.
As bases 2, 8 e 16, denominadas, respectivamente, binária, octal e hexadecimal,
têm estreita relação entre elas. A título de mais um exemplo, vejamos como podemos
representar o número N = 201510 nas quatro bases mencionadas.
 decimal: b = 10; dígitos = {0,1,2,3,4,5,6,7,8,9}
N10 = 201510
= 2x103 + 0x102 + 1x101 + 5x100
= (2000 + 0 + 10 + 5)10
= 201510
 binário: b = 2; dígitos = {0,1}
N2 = 111110111112
= 1x210+1x29+1x28+1x27+1x26+0x25+1x24+1x23+1x22+1x21+1x20
= (1024 + 512 + 256 + 128 + 64 + 0 + 16 + 8 + 4 + 2 + 1)10
= 201510
 octal: b = 8; dígitos = {0,1,2,3,4,5,6,7}
N8 = 37368
= 3x83 + 7x82 + 3x81 + 7x80
= (1536 + 448 + 24 + 7)10
= 201510
 hexadecimal: b = 16; dígitos = {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
NH = 7DEH
= 7x162 + 13x161 + 14x160
= (1792 + 208 + 14)10
= 201510
Observe que, para não acarretar má interpretação, os valores correspondentes aos
dígitos '10', '11', '12', '13', '14' e '15', na base 16, foram representados pelas primeiras seis
letras do alfabeto, o que é uma padronização largamente utilizada. Muitas vezes se
denomina a representação hexadecimal simplesmente por Hex (ou hex) e, para o
subscrito utilizado para indicar a base pode-se utilizar H ou h, como, por exemplo, 17B3 H,
ao invés de 17B316, sendo ambas representações equivalentes e bem entendidas.
Você também pode observar que o fator multiplicativo do dígito nesta forma de
representação posicional é uma potência da base, ao estilo da forma como escrevemos
um polinômio na variável “b”, e por isto é também dita ser uma representação
polinomial.
Nem todo sistema numérico tem representação posicional e/ou polinomial, como,
por exemplo, o sistema de numeração romano. Se quiser conhecer um pouco mais sobre
o assunto, veja “O sistema de numeração romano. Qual deles?“
(http://www.mat.ufrgs.br/~portosil/histo2e.html).
Vejamos a correspondência entre as representações decimal, binária, octal e
hexadecimal. Como o sistema hexadecimal é o que tem mais dígitos disponíveis, 16
dígitos, vamos montar uma tabela com os inteiros de 0 a 15, representando-os nestes
quatro sistemas, conforme a tabela 2.1 abaixo:

Tabela 2.1: Correspondência decimal-binário-octal-hexadecimal.


Decimal Binário Octal Hexadecimal
00 0000 00 0
01 0001 01 1
02 0010 02 2
03 0011 03 3
04 0100 04 4
05 0101 05 5
06 0110 06 6
07 0111 07 7
08 1000 10 8
09 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

Observe na tabela, como exemplo, que a contagem em qualquer sistema de


numeração de representação polinomial é semelhante: incrementa-se primeiro a ordem
das unidades, quando excedemos a capacidade desta ordem incrementamos a ordem
superior ( o “vai-um”), “zerando” a unidade. E assim por diante para todas as ordens
seguintes. Verifique como as contagens em decimal, binário e octal assim ocorrem na
tabela 2.1. Hexadecimal também é assim mas, nesta tabela, somente temos a posição da
unidade, e por isto não temos oportunidade de ver o “vai-um” ocorrer.
Um dígito hexadecimal pode assumir um entre 16 valores possíveis. Ora, para
representarmos algo que tenha 16 valores possíveis, em binário, vamos necessitar de 4
bits, pois 24 = 16 é a quantidade de combinações de 4 bits (2 valores possíveis em cada
bit) que podemos escrever. Assim, para convertermos um número binário em hexadecimal
basta tomarmos este de 4-em-4 bits e escrevermos o dígito corresponde ao valor binário
lido. Deve-se ter o cuidado de iniciar o grupamento a partir da vírgula que separa a parte
inteira da parte fracionária, e a parte fracionária, se houver, deve prosseguir da esquerda
para a direita, a partir da vírgula.
De forma semelhante, para fazermos a correspondência entre octal e binário,
usaremos grupamentos de 3 bits para representar um dígito octal, já que 3 bits nos
permitem representar 23 = 8 objetos.
A conversão de hexadecimal para binário pode ser facilmente obtida representando-
se cada dígito hexadecimal por seu respectivo valor em binário, com 4 bits, da mesma
forma em que podemos converter um número octal para binário representado cada um de
seus dígitos através de seus valores em binário, com 3 bits.
Veja, como exemplo, na figura 2.03 abaixo, uma ilustração da correspondência binário-
octal-hex para um dado número.

Figura 2.03: Correspondência binário-octal-hexadecimal.

O interesse especial nas bases octal e hexadecimal é que, pela facilidade de


conversão entre elas, podemos considerar o hexadecimal e o octal como representações
“compactas” do binário. Por usarem bem menos dígitos, e facilitar para nós, humanos,
sua leitura.
Para convertermos um número de uma outra base qualquer para decimal,
simplesmente aplicamos diretamente a definição da representação polinomial, efetuando
os cálculos na base 10. Por exemplo, o número 9C H = 9x16 + 11 = 156, assim como 234 8
= 2x82+3x8+4 = 156.
No caso da base 2, para realizarmos este tipo de conversão, é de interesse
conhecermos, de cor, pelo menos os valores das primeiras potências de 2, digamos, até
12, como mostrado na tabela 2.2:

Tabela 2.2: Primeiras potências de 2.


Potência Valor exponencial Valor decimal
0 20 1
1 21 2
2 22 4
3 23 8
4 16
24
5 25 32
6 26 64
7 27 128
8 28 256
9 29 512
10 210 1024
11 211 2048
12 212 4096

Para convertermos um número inteiro de uma base qualquer para qualquer outra
base, podemos utilizar um processo de divisões sucessivas. Todas as operações devem
ser efetuadas na base de origem. Este último fato leva a que, para nós, é bem mais
simples converter da base-10 para outra base (as operações serão na base-10) do que
em outro caso, porém o algoritmo é válido para qualquer base.
Suponha que você quer converter o número decimal N 10, para uma outra base B
qualquer. N10, será nosso dividendo inicial, D, e B será nosso divisor. O algoritmo é como
segue:
Algoritmo para Conversão de Inteiros Decimais para a Base B:
1. realize a divisão inteira de D por B, obtendo um quociente Q e um resto R;
2. faça D = Q e anote R;
3. se D > 0, retorne ao passo '1';
4. os restos obtidos são os dígitos na nova base, tomados na ordem inversa, ou
seja, o último resto obtido corresponde ao dígito de maior ordem, e o primeiro
resto obtido corresponde ao dígito de ordem '0'. Observe que os restos obtidos
sempre corresponderão a dígitos válidos na nova base B, uma vez que o
processo de divisão assegura que R < B.
Exemplo: Converter 16310 para a base 2 (binário). Vamos representar as divisões
na forma D = QxB + R, onde D é o dividendo, B é o divisor, Q o quociente e R o
resto.
163 = 2x81 + 1 → d0 = 1;
81 = 2x40 + 1 → d1 = 1;
40 = 2x20 + 0 → d2 = 0;
20 = 2x10 + 0 → d3 = 0;
10 = 2x5 + 0 → d4 = 0;
5 = 2x2 + 1 → d5 = 1;
2 = 2x1 + 0 → d6 = 0;
1 = 2x0 + 1 → d7 = 1.
Então, N10 = 16310 = N2 = 101000112.
Para conferir, fazemos a conversão inversa: 101000112 = 27+25+21+20 =
128+32+2+1 = 16310.
Para a conversão de números fracionários, o processo é semelhante ao utilizado
para inteiros, só que usando a multiplicação. Tomando-se apenas a parte fracionária,
multiplica-se sucessivamente seu valor pela nova base, extraindo-se a parte inteira a cada
passo, que representará cada dígito da parte fracionária na nova base. Um exemplo para
a conversão de um número decimal fracionário ilustrará o processo.
Exemplo: converter 0,687510 para binário …
0,6875 x2 = 1,375 d-1 = 1;
0,375 x2 = 0,75 d-2 = 0;
0,75 x2 = 1,5 d-3 = 1;
0,5 x2 = 1,0 d-4 = 1;
0,0
Então, N10 = 0,687510 = N2 = 0,10112 = 1x2-1+0x2-2+1x2-3+1x2-4 = 0,5 + 0,125 +
0,0625 = 0,687510, conferindo o resultado.
Quando o resultado de uma das multiplicações parciais der zero, podemos encerrar
o processo pois, daí em diante, obteremos apenas dígitos zero, não significativos. Nem
sempre isto ocorre e poderá ser preciso se interromper o processo em algum ponto,
dependendo da precisão desejada. Experimente converter 0,3 10 para binário. Pare a
conversão após obter 10 dígitos fracionários em binário. Você deve obter N 2 =
0,01001100112. = 0,299804687 (o valor da conversão de volta não é o original porque
obtivemos apenas uma aproximação do valor decimal em binário).
1.3. Números Negativos e Aritmética Binária
Para se aprofundar um pouco mais e obter mais exemplos sobre este tópico, você
pode recorrer à seção “Tipo Numérico”, em (Monteiro, 2007, Cap. 7, pp 219-266).
Até o momento não consideramos o problema de sinal, ou seja, a possibilidade de
representarmos números negativos. O problema da representação de sinal na aritmética
computacional é que o computador tem apenas dois símbolos para utilizar, e assim não é
possível simplesmente acrescentarmos um “sinal gráfico” como o '+' e o '-' para indicar se
um número é negativo ou não. Podemos conceber diversos sistemas para fazer a
representação de sinal na aritmética computacional, sendo os mais utilizados os
seguintes:
 Sinal e Magnitude – o bit mais à esquerda do número representa o sinal (0 é ‘+’ e
1 é ‘-’), os bits restantes representam a magnitude em valor absoluto;
 Complemento de 1 – também o bit mais à esquerda representa o sinal (0 é ‘+’ e 1
é ‘-’), os bits restantes representam a magnitude. Para achar o negativo de um
número, substitua todos os bits, inclusive o de sinal, pelo seu complemento lógico (0
→ 1, 1 → 0);
 Complemento de 2 - também tem o bit de sinal (0 é ‘+’ e 1 é ‘-’). Para achar o
negativo de um número, substitua todos os bits, inclusive o de sinal, pelo seu
complemento lógico (0 → 1, 1 → 0) e em seguida adicione 1 ao resultado. Se ocorrer
“vai um” do bit da extrema esquerda ele é descartado;
 Excesso de q – simplesmente adiciona-se (excesso de) q ao valor do número.
Usualmente, para representação de inteiros com m bits, tomamos q = 2m-1.
Toda representação numérica com sinal requer que o número de bits da
representação seja fixado, para se poder determinar qual bit representa o sinal (ou o
excesso, no caso desta representação em particular).
Exemplo: representar em binário com 8 bits os números 8410 e -8410 nos formatos binário puro (sem
sinal), sinal/magnitude, complemento de 1, complemento de 2, e excesso de 128 (28-1 = 27 = 128):
8410 -8410
binário (sem sinal) 01010100 (não existe)
sinal/magnitude 01010100 11010100
complemento de 1 01010100 10101011
complemento de 2 01010100 10101100
excesso de 128 11010100 00101100
Um mal-entendido comum nesta área de representação de números negativos é
achar que complemento diga respeito apenas a números negativos. Complemento, no
entanto, diz respeito a uma forma de representação numérica onde o sinal do número é
levado em consideração, seja ele positivo ou negativo. Podemos achar o complemento de
um número positivo ou negativo. O complemento de um número positivo resultará em um
número negativo e vice-versa, e, para tal, ambos precisam estar representados na forma
de complemento considerada.
Um fato interessante que você pode observar é que podemos determinar o
complemento de um número em excesso de 2 m-1 simplesmente computando-se o
complemento de 2 do mesmo e adicionando-se o excesso (2 m-1), seja ele positivo ou
negativo, descartando eventual “vai 1” do bit mais à esquerda, se houver. Teste este fato
para o exemplo dado acima e para outros valores.
A tabela 2.3 resume a representação de números de 4 bits com sinal. Observe na
tabela que as representações em sinal/magnitude e complemento de 1 utilizam
representações distintas para um mesmo valor, '0' e '-0', desperdiçando, portanto, uma
das codificação dos 16 códigos possíveis com 4 bits. As casas em vermelho indicam
codificações inexistentes, em amarelo, a dupla codificação para um mesmo valor (zero) ,
em em azul, realçado o uso da mesma codificação para o zero, positivo ou negativo.

Tabela 2.3: Representação de números binários com sinal.


decimal binário puro sinal/magnit. Complem. 1 Complem. 2 excesso de 8

7 0111 0111 0111 0111 1111


6 0110 0110 0110 0110 1110
5 0101 0101 0101 0101 1101
4 0100 0100 0100 0100 1100
3 0011 0011 0011 0011 1011
2 0010 0010 0010 0010 1010
1 0001 0001 0001 0001 1001
0 0000 0000 0000 0000 1000
-0 ---- 1000 1111 0000 1000
-1 ---- 1001 1110 1111 0111
-2 ---- 1010 1101 1110 0110
-3 ---- 1011 1100 1101 0101
-4 ---- 1100 1011 1100 0100
-5 ---- 1101 1010 1011 0011
-6 ---- 1110 1001 1010 0010
-7 ---- 1111 1000 1001 0001
-8 ---- ---- ---- 1000 0000
O formato mais utilizado para representação de números com sinal é o
'complemento de 2', uma vez que este facilita as operações aritméticas, como veremos.
A aritmética binária não é diferente da aritmética decimal, ou em qualquer outra
base, seguindo as mesmas regras gerais. Na realidade, podemos até dizer que é bem
mais simples, pois os dígitos estão limitados a apenas dois valores. Examinemos então as
quatro operações aritméticas como ficam, em binário.

Adição (ou Soma):


0+0=0
0+1=1
1+0=1
1+1=0 e “vai 1” (em inglês, “carry”)
Exemplo:
binário decimal
1111 11 1 ← “vai 1”
101101001 361
+ 1011011 91
111000100 452

Subtração:
0–0=0
0–1=1 e “pede 1 emprestado” (em inglês, “borrow”)
1–0=1
1–1=0
Exemplo:
binário decimal
1111 1 ← “1 emprestado”
101101001 361
- 1011011 91
100001110 270

Compare a tabela da soma com a tabela da subtração. Observe que são idênticas, a
menos das condições de carry/borrow!
Em qualquer aritmética que utilize complemento (representação de números
negativos) sempre podemos escrever que A – B = A + (–B), ou seja, para fazer uma
subtração, podemos simplesmente somar o complemento do subtraendo. Em binário não
é diferente, e, assim podemos realizar a subtração fazendo uma operação de soma.
Embora seja possível utilizar qualquer formato de complemento, o complemento de 2,
aqui, é vantajoso, porque resulta efetivamente em simplesmente realizar a soma do
complemento, sem qualquer necessidade de ajustes na representação, e teremos um
resultado correto, também expresso em complemento de 2.
Exemplo:
Repetindo o exemplo anterior, em binário, precisamos acrescentar um zero à
esquerda do minuendo, para representar o bit de sinal, e da mesma forma, ajustar o
subtraendo para conter o mesmo número de bits:
minuendo: 0101101001
subtraendo: 0001011011
e, computando o complemento de 2 do subtraendo
-subtraendo: 1110100101
e nossa operação fica então como
binário decimal
11111 1 11 ← “vai 1”
0101101001 0361
+ 1110100101 9909
10100001110 10270
Observe que utilizamos a mesma técnica para fazer a subtração em decimal,
utilizando a soma do “complemento de 10” do subtraendo. O complemento de 10,como
em qualquer outra base, é semelhante ao complemento de 2, em binário: ache o
complemento de 9 (ou seja, subtraia de 9) de cada dígito, e some 1 ao valor final
encontrado.
Verifique que os resultados de soma e subtração são sempre corretos, quando
utilizamos representação em complemento de dois, quaisquer que sejam os sinais dos
operandos.

Multiplicação:
0x0=0
0x1=0
1x0=0
1x1=1
Multiplicação em binário, em nível de bit, não poderia ser mais fácil. O resultado é
sempre zero, exceto quando os dois operandos são um, quando o resultado também é
um. O método básico para efetuar a multiplicação é tal qual na aritmética decimal:

Podemos simplificar a operação simplesmente eliminando as linhas dos produtos


parciais correspondentes a bits zero no multiplicador, pois em nada contribuirão para a
soma. É só não esquecer de deslocar apropriadamente para a esquerda as linhas
correspondentes aos bits um.
Exemplo:
binário decimal
101101 45
x 10101 x 21
101101 45
000000 90
101101 945
000000
+ 101101
1110110001 = 945
O que vimos aqui se aplica à multiplicação de inteiros sem sinal. Para realizarmos a
multiplicação de números representados em complemento de dois o processo mais
simples, para nós, é tomarmos o valor absoluto dos números e corrigirmos o resultado
conforme a combinação dos sinais, sabendo-se que o produto de dois números de
mesmo sinal dá um resultado positivo e para dois números de sinais contrários o
resultado será negativo. Existem contudo algoritmos que implementam diretamente a
multiplicação em complemento de 2, como você pode encontrar em (Stallings, 2010, Cap.
9), porém são mais complexos.

Divisão:
Para a divisão, é difícil criarmos uma “tabuada de um bit” que seja útil, pois a divisão
por zero, como em qualquer sistema de numeração, não é permitida. O melhor é
simplesmente seguir as mesmas regras básicas para a divisão decimal, separando tantas
casas no dividendo quanto necessário para obtermos um dividendo parcial maior ou igual
ao divisor. Faça a divisão, obtendo um dígito do quociente. Multiplicamos este pelo divisor
e calculamos a diferença para o dividendo parcial, obtendo um resto parcial. Repetimos o
processo até que o divisor restante seja menor que o divisor, obtendo um quociente e
resto final.

1101101 10101 1101101 = 101 x 10101 + 100


10101 101 10910 = 5 x 21 + 4
001100
00000
011001
10101
00100

Tal qual para a multiplicação, este algoritmo de divisão não se aplica a números em
complemento de 2, mas podemos também efetuar a divisão, neste caso, tomando o valor
absoluto dos operandos e ajustando o resultado conforme os sinais dos mesmos.
Também em (Stallings, 2010, Cap. 9) pode ser encontrado um algoritmo que implementa
diretamente a divisão em complemento de 2.
Por estarmos trabalhando com números de precisão finita, um problema que temos
são as situações de erro. Em operações aritméticas com inteiros, a principal ocorrência é
a de uma condição de overflow (transbordo). Uma condição de overflow ocorre quando
não é possível representar o resultado da operação com o número de bits disponível –
normalmente o tamanho da palavra do processador. A detecção de uma condição de
overflow depende da operação que está sendo efetuada e da forma de representação dos
operandos:
Operação de Soma/Subtração
 Sem sinal ou sinal/magnitude: uma condição de overflow é indicada pela
ocorrência de um carry (ou borrow) do bit mais significativo (mais à esquerda).
exemplos:
111 1 11 ← vai 1/1 emprestado
1011 0110
+ 0110 - 1011
10001 11011
(11+6 = 17 > 24-1 = 15) (6-11 = -5 < 0)
 Em complemento: somente é possível ocorrer uma condição de overflow se os
números forem de mesmo sinal, situação esta que será indicada por termos o
resultado com o sinal trocado.
exemplos:
1 1 1 ← vai 1
0101 5 1011 -5
+ 0110 + 6 + 1010 -6
1011 11 > 7 10101 -11 < -8
= -5 = +5
Operação de Multiplicação
 Multiplicação sofre do mesmo problema da soma de números de mesmo sinal.
Multiplicar equivale a somar o valor absoluto do multiplicando o número de vezes
indicado pelo valor absoluto do multiplicador e ajustar o sinal do resultado!

Operação de Divisão
 Não tem problema de overflow, pois o resultado será, em valor absoluto, sempre
menor ou igual ao dividendo, exceção feita para o caso singular do divisor ser zero,
quando deve ser sinalizada esta situação particular de erro.
1.4. Números de Ponto-Flutuante
Considere as seguintes situações numéricas do mundo real:
a) a massa do nosso sol é estimada em 2x1033g;
b) a massa do elétron é estimada em 9x10-28g.
Para acomodar a representação de ambos estes números, um muito grande e outro
muito pequeno, utilizando notação decimal de ponto-fixo, onde a vírgula (ou ponto
decimal) separa, de forma fixa, uma parte inteira de outra fracionária, precisaríamos de 62
dígitos decimais (em binário isto corresponderia a cerca de 206 bits):
Sol
2000000000000000000000000000000000,0000000000000000000000000000g
Elétron
0000000000000000000000000000000000,0000000000000000000000000009g
Deve-se observar que a maioria dos dígitos em ambos os números são zero, e,
dificilmente se precisa realizar cálculos com esta precisão. Em nosso mundo cotidiano a
solução é a utilização da notação científica onde separamos o número em duas partes:
uma responsável por estabelecer a faixa de valores que iremos cobrir, e outra
responsável pela precisão com que iremos cobrir esta faixa. Representamos então um
número real, decimal, como
 n = f x 10e

onde f é a fração, ou mantissa, um número fracionário, positivo ou negativo, e e é o


expoente da base, um número inteiro, positivo ou negativo. Por exemplo, considere as
seguintes representações de números reais em notação científica:
 3,14159 = 31,4159 x 10-1 = 0,314159 x 101
 0,000001 = 1,0 x 10-6 = 0,1 x 10-5
 2014 = 2,014 x 103 = 0,2014 x 104

Observe acima que um mesmo número pode ter diferentes representações em


notação científica. Quando restringimos a mantissa a ser o maior valor menor que zero
para a representação do número, com os devidos ajustes do expoente, dizemos que o
número está normalizado. Esta é a situação da terceira representação em cada um dos
três exemplos acima.
Números de ponto-flutuante são a forma encontrada para representar números reais
em computador. Na realidade é apenas uma aproximação, tendo em vista que
utilizaremos um número finito e fixo de bits para representar a mantissa e o expoente da
base. Temos portanto limitações tanto no tamanho dos números – um maior e um menor
valor representáveis, assim como, dentro da faixa dos representáveis, nem todo real terá
uma representação exata e será necessário fazer um arredondamento do valor. Você
encontrará a descrição de várias destas técnicas de arredondamento em (Stallings, 2010,
Seção 9.4).
Os números de ponto-flutuante geralmente utilizam um modo misto para
representação de sinal: a mantissa é representada na forma sinal/magnitude, e o
expoente é representado em excesso de q. Um modelo básico para a representação de
números de ponto flutuante é como mostrado na figura 2.4.

figura 2.4: Formato básico para um número de Ponto Flutuante.

Este formato contém:


 1 bit de sinal (da mantissa) à esquerda, onde '0' representará um valor positivo e '1'
um valor negativo;
 m bits para a representação do expoente em notação 'excesso de q', sendo q
usualmente escolhido como 2m-1, de forma que haverá uma simetria para a
representação de valores positivos e negativos do expoente, além de o bit mais à
esquerda também ser um indicador de sinal.
 seguem-se m bits que representam o valor absoluto da mantissa, sendo somente
presente a parte fracionária, chamada significando, uma vez que, pela normalização,
a parte inteira será sempre zero e não precisa ser representada. A mantissa, f, deve
ser tal que 1 > f  0,510, de forma a não somente normalizar a representação, fazendo
com que cada valor representável tenha apenas uma única representação, como
também assegurando o máximo de precisão para estas representações (número de
bits significativos na mantissa).
Como exemplo, considere a representação do real 1,25 em ponto flutuante (PF) com
m = 3 bits para o expoente e n = 4 bits para a mantissa. Precisamos primeiro converter o
número para binário:
 parte inteira: 110 = 12;
 parte fracionária: 0,2510 = 0,012.
e temos então

n = 1,2510 = 1,012 e, normalizando, obtemos, n = 0,101 x 21
colocando dentro do padrão estabelecido:

sinal: s = 0 (número positivo);

expoente: e = 1, que, representado em excesso de q = 4 = 23-1 = 1002, nos dá E
= 510 = 1012 (observe que 1012 = 0012 + 1002);

significando: M = 1010 (a parte fracionária normalizada, com 4 bits);
resultando então na representação
n = 1,2510 → PF = 0 1 0 1 1 0 1 0
Vejamos agora um exemplo de conversão de um número PF para decimal. Vamos
considerar o mesmo padrão acima e supor que seja dado
PF = 10101100
Separando o número de ponto flutuante em seus componentes temos:

PF = 10101100: sinal = '-', o número é negativo;

PF = 10101100: expoente E = 2, e portanto e = E – 4, ou e = -2;

PF = 10101100: significando M = 1100, fornecendo f = 0,11002;
temos então que
n = - 0,112 x 2-2 = - 0,00112 = - (2-3+2-4) = - (0,12510+0,062510) = - 0,187510

Existe um padrão para representação de Ponto Flutuante e operações aritméticas muito


utilizado que é o padrão IEEE-754. Em (Stallings, 2010, Seção 9.4) você pode encontrar uma
boa descrição deste padrão. As diferenças básicas do padrão IEEE para o que vimos aqui é que
ele padroniza variadas faixas e precisão, assim como estabelece várias situações de exceção
(representações não-normalizadas) para indicar situações particulares, como por exemplo, a
representação do zero e infinito. Para permitir estas exceções, ele utiliza um expoente na forma
excesso de (2m-1-1), ao invés de 2m-1.
AULA 2 – Conceito de Memória
2.1. O que é Memória
Como vimos, na unidade 1, a memória é o elemento de um sistema computacional
onde são armazenadas informações, sejam estas dados ou instruções. Iremos agora aqui
olhar em mais detalhe como é realmente a estrutura de uma memória, os princípios de
sua operação, e as propriedades dos diversos tipos de memória disponíveis. (Monteiro.
2007, Cap 4)
O armazenamento de informações em uma memória é feito associado a posições
internas específicas da memória, às quais são atribuídos endereços únicos, que são nada
mais que códigos identificadores destas posições, de uma forma semelhante ao que
utilizamos em um sistema de escaninhos para armazenar correspondência comum em um
condomínio, como ilustrado na figura 2.5 abaixo.

Figura 2.5: Caixa Postal vista como um Sistema de Memória.

Observe as duas operações possíveis que temos: a escrita, que na caixa de


correios corresponde ao carteiro colocar “informação” em um dos escaninhos, ou seja, em
um “endereço”, e a leitura, correspondente ao morador abrir o escaninho e recuperar a
informação armazenada.
Deve-se, contudo, estar atento a uma diferença fundamental nesta comparação da
memória do computador com uma caixa de correio – quando um morador retira (lê) sua
correspondência, o escaninho ficará vazio, ao passo que, na memória computacional,
nenhum escaninho (endereço) jamais fica vazio, você sempre será capaz de ler alguma
informação armazenada em um endereço qualquer, embora esta possa não ter qualquer
significado para você ou para o programa sendo executado no computador. Também,
diferentemente da caixa de correio, o armazenamento de uma nova informação em
determinado endereço de uma memória computacional automaticamente substitui a
informação anteriormente armazenada naquele endereço. Dizemos que a operação de
escrita é uma operação destrutiva, na memória computacional, pois elimina a informação
anterior, já a operação de leitura é não destrutiva, pois preserva a informação ali
armazenada.

2.2. Bits e seu Armazenamento


Nos computadores atuais, a informação é codificada na forma de sequências de bits
(códigos binários). Um bit, ou dígito binário, possui dois valores possíveis, aos quais
normalmente atribuímos os símbolos 0 (zero) e 1 (um), e, em outras situações, podemos
também considerar estes valores como falso e verdadeiro. O bit é a menor quantidade
de informação que um sistema computacional pode processar e, de acordo com a
tecnologia empregada, pode ser representado, entre outras, pelas seguintes grandezas
físicas:
 Nível de tensão elétrica – por exemplo, 0 Volts para representar o '0' e 5 Volts
para representar o '1', como nas memórias eletrônicas;
 Campo magnético – por exemplo, um dipolo magnético orientado em uma direção
para representar o '0', e na direção oposta para representar o '1', como em um
disco magnético.
 Ponto refletivo – por exemplo, um ponto com capacidade ou não de refletir bem a
luz, para representar os dois valores binários '0' e '1', como em um CD ou DVD.
Com um único bit podemos representar apenas dois valores possíveis, o que é de
pouca serventia para a maioria das situações. Se utilizarmos dois bits em conjunto,
passamos a poder representar 4 valores distintos: 00, 01, 10 e 11.
Assim fazendo, podemos verificar que, com n bits, teremos a capacidade de representar
2n valores distintos. Por exemplo, com 8 bits, teremos a capacidade de representar 256 =
28. Assim é normalmente feito no ambiente computacional, de tal forma que utilizamos
combinações de bits (códigos) para representar e armazenar qualquer tipo de informação,
como, por exemplo,
 valores numéricos;
 caracteres de um texto;
 imagens;
 sons;
 instruções para o processador;
 … e qualquer outra informação que se queira.
Teremos oportunidade de examinar várias destas situações ao longo deste nosso
curso.
2.3. Memória de 1-bit
Muito bem, já temos uma ideia do que é uma memória e de sua utilidade em um
sistema computacional. Mas como é realmente implementada uma memória? Para matar
sua curiosidade, vejamos um exemplo simples de uma memória de 1 bit.
Recorde-se dos conceitos de portas lógicas e circuitos sequenciais. Se necessário,
consulte (Monteiro, 2007, Apêndice B) sobre o assunto ou procure um bom tutorial na
Internet, como, por exemplo, “Lógica Combinacional” (http://tinyurl.com/l85odlg) e ”Lógica
Sequencial” (http://tinyurl.com/ka6roe7).
Uma porta lógica é uma implementação, geralmente na forma de um circuito
eletrônico, de uma das funções básicas da álgebra booleana, uma operação lógica.
Portas lógicas são a base para a construção de computadores e outros sistemas digitais.
Um Flip-Flop (FF) é um dispositivo eletrônico básico capaz de armazenar 1 bit de
informação. O FF mais simples possui duas entradas (S - Set e R - Reset) e uma saída
(Q), podendo possuir uma terceira entrada de sincronização (ou relógio) e uma segunda
saída que é a negação da primeira (Q). A figura 2.5 ilustra o diagrama lógico de um FF-SR
construído com portas lógicas OU (mais inversão) e a sua tabela de operação.

Figura 2.05: Flip-Flop Set/Reset.

Observe na figura que, efetivamente, temos apenas dois estados estáveis, quando
as duas entradas são mantidas em '0'. Uma com a saída Q = '0' (denominado estado
zero) e outro com a saída Q = '1' (denominado estado um). O bit armazenado no FF
corresponde ao estado de sua saída Q. Confira que quando levamos a entrada S para o
estado lógico '1' forçamos a que o novo estado do FF (Q t+1) passe para '1',
independentemente de seu estado anterior. Assim como quando levamos a entrada R
para o estado lógico '1' forçamos a que o novo estado do FF (Q t+1) passe para '0'. Assim,
o valor colocado em suas entradas é armazenado, permanecendo neste estado até que
outra entrada seja comandada. A única restrição para este modelo de FF é que não
podemos comandar simultaneamente as entradas para levá-lo ao estado '1' e '0', ou seja
fazer S = R = '1', o que causará uma indeterminação lógica do estado seguinte do FF.
Outros modelos de FF podem eliminar esta indeterminação, como, por exemplo, forçando
o FF a “mudar de estado”.
Este é um exemplo de uma memória de 1 bit, a partir do qual podemos construir
memórias maiores, conforme a necessidade de armazenamento. Analisaremos estas
possibilidades em nossa tópico 4, quando veremos a estrutura do sistema de memória.

2.4. Representação da Informação


Tendo-se os meios para armazenar informações, uma questão fundamental é como
codificar esta informação em cadeias de bits. O tipo de codificação vai depender
fortemente do tipo de informação e analisaremos alguns tipos básicos de informação e
suas formas mais comuns de codificação.

Representação de Textos
Você já viu que em nosso dia a dia utilizamos, para escrita, centenas de símbolos,
porém o computador só é capaz de manipular informação na forma binária.
Com o surgimento da computação e a comunicação digital surgiram diversos
códigos para representação binária de textos, já discutidos em nossa Unidade 1. O código
ASCII, apesar de ter sido um dos primeiros códigos binários criados para representação
de texto ainda é um código universalmente utilizado e tomaremos um exemplo deste
código para representação de um texto simples, conforme ilustrado na figura 2.06.

figura 2.6: Exemplo de texto codificado em ASCII.

Consulte a tabela ASCII (http://iris.sel.eesc.usp.br/sel337/ASCII.html) para verificar a


correspondência entre os símbolos gráficos (letras) e os códigos binários de 8 bits do
exemplo.
Temos portanto que um “texto”, em geral, pode ser codificado simplesmente por uma
sequência de Bytes em determinado código apropriado, como o código ASCII do exemplo.
Estando este texto armazenado na memória, os Bytes vão ocupar posições (endereços)
consecutivos desta memória.
Representação Numérica
Na aula anterior você teve a oportunidade de ver diversas formas de representação
numérica para números inteiros e reais, todas sendo constituídas por algum esquema de
codificação binária. Da mesma forma que vimos no exemplo anterior a codificação de um
texto disposto em Bytes. O mesmo podemos fazer para qualquer representação binária
de números, bastando separar o código de 8 em 8 bits e podemos armazenar a
informação assim codificada na memória (que usa o Byte como o elemento básico de
endereçamento e armazenamento).
Considere o exemplo da primeira aula da representação do número n = 1,2510 como
um número de ponto flutuante com 1 bit de sinal, 3 bits de expoente e 4 bits de mantissa:
PF = 01011010. Não por acaso, o total de bits utilizado é 8, correspondendo exatamente a
1 Byte. De uma forma geral, embora não estritamente necessário, os padrões de
representação numérica em computadores adotam sempre múltiplos de 8 bits como
código, de forma a simplificar e otimizar o armazenamento dos mesmos.
Suponha agora que temos um inteiro representado com 12 bits. Embora possamos
assim fazer, não é comum escolher um número de bits que não seja múltiplo de 8,
conforme comentado, mas este é só um exemplo ilustrativo. Seja N = 101100010101 2 o
nosso número. Então, se vamos armazenar este número em Bytes da memória, o que
precisamos fazer é separar os bits de 8 em 8, assim: N = 101100010101. Como vemos,
pudemos separar os 8 bits da parte menos significativa do número, mas para a parte mais
significativa só temos 4 bits! A solução é preencher a parte que contém menos de 8 bits
com zeros, completando 1 Byte, sem alterar o valor do número, que fica então como: N =
0000101100010101. Agora podemos armazenar N sem problemas, em 2 Bytes da
memória. Obviamente estaremos desperdiçando memória, pois dos 16 bits utilizados,
neste caso, apenas 12 são significativos. E este é o motivo de se dar preferência por
múltiplos de oito bits em qualquer codificação em binário.

Representação de Imagens:
Uma forma muito utilizada para representação de imagens é através uma coleção de
pixels (do inglês, picture element). Um pixel é um elemento da imagem, um “ponto”. Cada
pixel é codificado individualmente na forma de um código binário que representa a sua
cor, em uma coleção denominada bitmap (mapa de bits). Um bitmap é nada mais que um
arranjo retangular, uma matriz, correspondendo às linhas e colunas dos pixels da imagem.
A quantidade de bits utilizada para representar cada pixel é denominada a profundidade
de cor da imagem, indicando quantas cores distintas podem ser expressas por um pixel.
Portanto, uma imagem em que cada pixel é representado por um byte em memória tem
uma profundidade de cor de 8 bits, cada pixel podendo assumir uma entre 256 cores
possíveis. O padrão mais utilizado hoje em dia é o denominado true color, onde um pixel
é definido pela combinação das três cores primárias (vermelho, verde e azul), cada cor
primária sendo codificado em um byte, totalizando uma profundidade de cor de 3x8 = 24
bits.
Este método é popular porque a maioria dos dispositivos de apresentação, tais como
impressoras e telas, operam sob o conceito de pixels. Uma desvantagem das imagens em
bitmap é que elas não podem ser ampliadas arbitrariamente sem comprometer a
qualidade da imagem, como ilustrado na figura 2.7 abaixo, onde cada “quadradinho” da
imagem ampliada corresponde a exatamente um pixel da imagem original.

Figura 2.7: Imagem Bitmap.

Uma imagem bitmap é então armazenada em memória na forma de uma matriz de


pixels, sendo o espaço de memória ocupado por cada pixel uma função da profundidade
de cor escolhida, ou seja, de quantos bits são necessários para representar cada pixel.
Como exemplo, se tivermos uma imagem de 800 x 600 pixels, cada pixel representado
por 24 bits (3 Bytes), esta imagem vai ocupar em memória 80003 = 1.440..000 Bytes,
ou cerca de 1,4 MiBytes.
Como alternativa ao bitmap pode-se utilizar uma descrição das imagens como uma
coleção de objetos geométricos (linhas, polígonos, círculos, etc.), de tal sorte que o
sistema de apresentação tem apenas que “redesenhar” a imagem, ao invés de manipular
os pixels individualmente, o que se denomina
vector graphics (gráfico vetorial). A ilustração na figura 2.8 compara esta característica
do vector graphics com o bitmap. Imagem na figura foi obtida de
(http://en.wikipedia.org/wiki/File:VectorBitmapExample.svg) estando sujeita a uma licença
tipo Creative Commons, permissão CC-BY-SA-3.0-MIGRATED.

figura 2.7: Comparação de Vector Graphics com bitmap.

Formatos de Arquivos para Imagens:


Imagens geradas no padrão bitmap tendem a ser muito grandes. Diversos formatos
de arquivo empregando técnicas variadas de compressão de dados foram criados para
reduzir o espaço de armazenamento ou tempo de transmissão das mesmas. Discorremos
a seguir sobre alguns desses formatos
 GIF (Graphic Interchange Format) - Codifica cada pixel em um byte apenas (256 cores
distintas), sendo este byte um índice para uma tabela de 256 cores (a paleta)
armazenada junto com a imagem, onde cada cor da paleta é um código de 24 bits, ou
seja uma em ~16 milhões de cores. Além do esquema de paleta, que ajuda a reduzir o
tamanho da imagem, o formato GIF também comprime os dados através do algoritmo
LZW (Lempel-Ziv-Welch), que, embora seja um excelente algoritmo de compressão de
uso geral, não foi projetado especificamente para compressão de imagens, porém
realiza uma compressão sem perdas, o que significa que nada se perde da imagem
original. Você encontra uma descrição deste algoritmo em “O algoritmo LZW”
(http://www2.ic.uff.br/ ~aconci/LZW.pdf). Dependendo do tipo de imagem, um GIF pode
reduzir consideravelmente o tamanho da mesma, podendo chegar a 10% do tamanho
original, ou menos, principalmente em se tratando de desenhos, onde temos extensas
áreas de uma mesma cor.
 JPEG (Joint Photographic Experts Group ) - Utiliza um método de compressão com
perdas, codificando cada pixel através 24 bits (true color). É possível selecionar o grau
de compressão, obtendo-se razoável redução de espaço sem perda muito significativa.
JPEG é um padrão mais adequado para imagens reais (fotografias) do que para
desenhos. O fato da compressão ser com perdas leva a que não se deve utilizar este
padrão enquanto a imagem estiver em uma fase de edição, onde cada operação de
“salvar” a imagem vai gerar um certo nível de perda de qualidade, pois atenua as
transições de cores, tornando a imagem mais “suave”. É um dos padrões mais
populares para publicação de imagens na Internet.
 TIFF (Tagged Image Format) – Utiliza também true color, com possibilidade de realizar
uma compressão sem perdas. É um formato muito utilizado no mundo da fotografia
profissional pois, além de você poder armazenar suas imagens sem perdas, dispõe
ainda de uma profundidade de cor excelente.
 PNG (Portable Network Graphics) - Sucessor do GIF, permite salvar em formato
comprimido, com ou sem perdas, utilizando 24 bits/pixel (true color). Tem se
popularizado atualmente, já sendo aceito pela maioria dos programas de edição de
imagens. O formato PNG permite a você definir uma cor de transparência, à
semelhança do GIF, porém você pode também definir o percentual de transparência
que será aplicado. O PNG é um padrão aberto, que não tem qualquer restrição de
implementação ou uso.
 SVG (Scalable Vector Graphics) – O SVG é um padrão de descrição de imagens onde,
ao invés dos pixels das imagens no padrão bitmap, a imagem é descrita através uma
definição matemática de objetos usando vetores, tais como “pontos”, “triângulos”,
“retângulos”, etc. SVG também é um padrão aberto, sem restrições, sendo
corretamente interpretado, na prática, por todos os navegadores da Internet modernos.
O arquivo correspondente a uma imagem SVG é na realidade um arquivo texto padrão
XML (http://www.gta.ufrj.br/grad/00_1/miguel/). Hoje já existem alguns editores com
suporte ao SVG tais como o GIMP, Inkscape, Adobe Ilustrator e Corel Draw. Muito
embora suas vantagens, este é um padrão mais destinado à geração de imagens
gráficas, como em publicidade, uma vez que a totalidade dos dispositivos de captura
de imagens (câmaras fotográficas) operam com base no padrão bitmap, mantendo
este padrão, bitmap, como de muita utilidade para o manuseio destas imagens.

Representação de Sons:
A forma mais genérica de codificar áudio é se amostrar a amplitude da forma de
onda do som a intervalos regulares e se armazenar a sequência de valores assim obtido,
digitalizados em binário. Esta é uma técnica chamada PCM (Pulse Code Modulation) em
que o áudio analógico é armazenado como uma sequência de códigos, cada código
correspondendo a um pulso com a mesma amplitude (aproximadamente) da onda no
momento da amostragem. Dadas certas condições de contorno (a frequência máxima do
sinal analógico e a taxa de amostragem) é possível se recuperar totalmente o sinal
original a partir das amostras digitais, a menos de erros de amostragem/digitalização, que
podem ser feitos tão pequenos quanto se queira.
A figura 2.8 ilustra este processo de amostragem de um sinal analógico, para
digitalização.

Figura 2.8: Processo de amostragem de um sinal analógico.

Os arquivos no padrão WAV (de WAVeform Audio Format), fora um cabeçalho, nada
mais são que uma sequência de tais amostras digitalizadas. Este é o formato que permite
a melhor qualidade de reprodução, e é utilizado para a gravação de música em CDs. A
gravação de música com a qualidade de um CD padrão requer 44.100 amostras/s, com
16 bits por amostra, por canal. Portanto, uma gravação estéreo de 1 segundo irá consumir
176.400 bytes, ou 1.411.200 bits.
O padrão WAV é um padrão de armazenamento desenvolvido pela Microsoft e é utilizado
principalmente para armazenamento das amostras PCM de um sinal de áudio, sem
compressão, com qualidade de CD. Corresponde a um volume de dados de
aproximadamente 10 MiB/minuto.
O fato de o padrão PCM puro consumir muita memória para armazenamento de áudio levou à
criação de diversos métodos de compressão específicos para áudio. Entre estes destacamos:
 MP3 (MPEG Layer 3 Audio) - É o formato mais popular hoje em dia, embora seja
proprietário. Utiliza um esquema de compressão baseado no fato de que certas partes
de um som geralmente estão além do limite de percepção da maioria das pessoas,
reduzindo drasticamente o tamanho do arquivo, comparado com PCM puro.
 OGG - É um contêiner para diversos tipos de mídia, incluindo vídeo, áudio, legendas e
metadados. Na parte de áudio, o padrão é o Vorbis (outros modelos de codificação
podem ser utilizados), um padrão aberto, que adota um esquema de compressão com
perdas com desempenho similar ao MP3, em relação à compactação, porém de
qualidade superior.
 WMA (Windows Media Audio) - É um padrão proprietário da Microsoft que oferece,
como base, uma compressão com perdas, similar ao MP3.
 MIDI (Musical Instrument Digital Interface) é uma outra técnica, especial para música
instrumental, onde o que é codificado é o instrumento, a nota musical, a duração da
nota, e outros parâmetros, para ser tocado por um sintetizador musical, e não o áudio
propriamente dito. Um arquivo MIDI é um arquivo texto contendo todas estas
informações. Para gravar e reproduzir música em MIDI, contudo, você precisa de
software e hardware especial.
AULA 3 – Hierarquia da Memória
3.1. Memória interna, externa e off-line
Você já viu que a menor unidade processada em um sistema de computação é o bit.
Foi visto também que o bit sozinho tem pouco poder de representação. Quando estamos
tratando da memória de um computador, o usual é não armazenar os bits individualmente,
cada um ocupando um endereço específico. Uma memória é então normalmente dividida
no que se denomina de células, onde cada célula corresponde a um único endereço da
memória, e é a unidade de armazenamento da memória, ou seja, quando lemos ou
escrevemos na memória, vamos ler ou escrever em uma determinada célula, conforme o
endereço especificado.
Uma célula contém um determinado número de bits, definido no projeto da memória,
sendo usual se utilizar 8 bits por célula, de modo que uma célula geralmente armazena
um Byte de informação.
O termo célula, contudo, costuma ser utilizado apenas para denotar a unidade de
armazenamento da memória principal pois, dependendo do tipo de dispositivo de
armazenamento, a “célula” pode possuir outras denominações, tais como bloco, setor,
cluster e etc., e ter tamanhos distintos, como veremos adiante quando analisarmos os
discos e outros dispositivos de armazenamento.
Os endereços da memória são numerados consecutivamente, de zero até N-1, onde
N é a quantidade de células (endereços) disponível. Um endereço é apenas uma entidade
lógica, um código, que permite ao sistema de memória identificar a célula associada
àquele endereço.
Você já viu que temos duas operações básicas associadas a um sistema de
memória:
 Escrita - O ato de guardar ou armazenar um dado é realizado através da operação de
escrita ou armazenamento (write). A operação de escrita é destrutiva, pois ao se
armazenar um dado o conteúdo anterior, contido naquele endereço, é perdido.
 Leitura - O ato de retirar ou recuperar um dado armazenado é realizado através da
operação de leitura (read). A operação de leitura não é destrutiva, pois o valor lido é
apenas copiado para outro local, preservando o valor original armazenado naquele
endereço.

O sistema de memória de um computador é normalmente composto de vários tipos


de memórias, formando subsistemas, interligados de uma forma bem estruturada. A
existência de diversos tipos de memória vem do fato de ter ocorrido um desenvolvimento
assimétrico dos processadores e memórias. Os processadores se tornaram muito mais
rápidos e passaram a requerer muita quantidade de memória para o armazenamento de
diversos tipos de informação. As memórias evoluíram de forma tal que, para obter maior
velocidade, as memórias encarecm muito, exigindo que se as utilize em pequenas
quantidades, enquanto que, para termos grandes quantidades de memória, estas têm que
ser relativamente lentas, para permitir um custo economicamente viável. Quando estamos
falando aqui de velocidade, estamos tratando comparativamente um tipo de memória com
outro.

Assim, os sistemas de memórias possuem hoje uma estrutura hierarquizada, onde as


memórias acessadas diretamente pelo processador são mais rápidas, mais caras, e em
menor quantidade, e memórias mais lentas, mais baratas, e em maior quantidade,
utilizadas para armazenamento de massa, são acessadas apenas indiretamente pelo
processador. A figura 2.9 ilustra esta disposição hierárquica de um sistema computacional
moderno típico.

 Memória Interna (MI): registradores internos da UCP, cache,


memória principal;
 Memória Externa (ME): HD, CD-RW, DVD-RW;
 Memória Off-line(MO): CD, DVD, fita magnética.
Figura 2.9: Hierarquia da memória.

A memória interna (MI) é constituída pelos elementos de memória diretamente


conectados à UCP. Fazem parte da memória interna os registradores internos da UCP,
que servem para armazenar temporariamente dados que estão sendo processados,
sendo o tipo de memória mais cara, mais veloz e em menor quantidade disponível,
estando no topo da hierarquia mostrada na figura 2.9; a memória cache (MC), que, como
veremos adiante, é uma memória relativamente rápida, serve para acelerar o processo de
acesso aos dados contidos na memória principal; e a própria memória principal (MP), a
memória definida no modelo de von Neumam, onde estão os programas e dados que
estão sendo utilizados pelo processador. A MP é a única memória no sistema reconhecida
como tal pelo processador.
A memória externa (ME), também chamada de memória secundária, é constituída
por dispositivos auxiliares de memória, como um disco rígido (HD), que funcionam como
uma memória onde as informações são guardadas por um tempo indeterminado, sendo
ali buscadas e transferidas para a MP, através operações de entrada/saída, quando
necessárias para uso pelo processador. São memórias lentas, de alta-capacidade e baixo
custo.
A memória off-line (MO) é constituída por aqueles dispositivos que não estão
permanentemente conectados ao sistema, sendo eventualmente conectadas para que
seu conteúdo seja lido ou gravado. São normalmente utilizadas para backup.
Para uma melhor compreensão destas características dos diversos tipos de
memória, apresentamos abaixo, na tabela 2.4, um quadro comparativo da velocidade e
capacidade de armazenamento para alguns tipos de memória.

Tabela 2.4: Comparativo entre alguns tipos de memória.


Tipo Tempo de Acesso Capacidade
Registradores 3 ns 128 Bytes
Memória Cache 10 ns 512 KiBytes
Memória Principal 70 ns 1 GiBytes
HD 10 ms 100 GiBytes
CD 160 ms 650 MiBytes
DVD 170 ms 4,7 GiBytes
Blu-Ray Disc 210 ms 50 GiBytes

3.2. Parâmetros das memórias


Diversos parâmetros caracterizam os diferentes tipos de memória. Estes parâmetros
servem para se poder escolher o tipo de memória mais adequado para cada aplicação.
Como é comum em certas decisões que se tem que tomar, muitas vezes temos que
aceitar uma solução de compromisso, em que não se comprometa demasiadamente nem
uma nem outra destas característica. Por exemplo, você não pode obter uma memória
extremamente veloz, por baixo custo, a menos que se contente com muito pouca
capacidade. Se precisar de maior capacidade terá que abrir mão ou da velocidade, ou do
custo.
Os principais parâmetros aplicáveis aos diversos tipos de memória são:
 Tempo de Acesso (tA): É uma das principais medidas de desempenho de memórias e
mede o tempo gasto para efetuar uma operação de leitura ou escrita. O t A não é
necessariamente o mesmo para leitura e escrita, assim podemos ter um t AR, tempo de
acesso para leitura, diferente de um tAW, tempo de acesso para escrita.
O tempo de acesso é fortemente dependente da tecnologia de fabricação da memória.
Nas memórias eletrônicas, ele não depende do endereço sendo acessado, nem do
endereço anterior, sendo constante para qualquer acesso. Podem entretanto requerer
um tempo extra entre dois acessos consecutivos, o que nos leva a definir um tempo
de ciclo, que mede o intervalo mínimo entre dois acessos consecutivos, de leitura, ou
de escrita.
Nos dispositivos eletromecânicos, como os discos, o tempo de acesso depende da
distância física entre os dois endereços consecutivos acessados, por envolver um
movimento mecânico para se chegar ao endereço, como, por exemplo, a
movimentação de um braço mecânico onde está posicionada uma cabeça de
leitura/escrita.
 Capacidade: É a quantidade de informação que pode ser armazenada em uma
memória. A unidade comum de medida de capacidade é o byte, independente do
tamanho da unidade de armazenamento (célula). Isto permite se comparar
capacidades mesmo entre dispositivos completamente distintos como a memória
principal e um disco rígido.
 Volatilidade: É a propriedade da memória em manter ou não uma informação
armazenada, mesmo quando a energia é desligada. Diz-se que uma memória é volátil
quando ela perde a informação ao ser desligada (e.g. RAM), e diz-se que é não volátil
quando a informação é mantida mesmo quando a energia é desligada (e.g. HD).
Como o processador apenas executa instruções contidas na memória principal, é
necessário que pelo menos uma parte desta memória seja do tipo não volátil, onde
estarão as instruções iniciais para a máquina (e.g. a chamada área do BIOS nos
sistemas de computadores pessoais).
 Tecnologia de Fabricação: As memórias mais comumente empregadas nos dias atuais são
normalmente de um entre três tipos básicos de tecnologia:
 Semicondutor: São memórias fabricadas com circuitos eletrônicos baseados em
semicondutores, como os transistores. Em geral são memórias voláteis, relativamente
rápidas e caras, como os registradores da UCP, a memória principal e a memória cache. Se
você quiser conhecer um pouco mais sobre a fabricação de chips de circuito integrado,
assista ao vídeo “From Sand to Chip”, da AMD (http://youtu.be/YhsKCnDD3F8);
 Magnética: Este tipo de memória armazena a informação na forma de dipolos magnéticos
induzidos em uma camada de material ferromagnético colocada na superfície do dispositivo,
como um disco (HD) ou uma fita (Fita Magnética). Entre as propriedades obtidas por este
processo estão uma elevada capacidade de armazenamento a um custo relativamente muito
barato. As memórias magnéticas são memórias não voláteis, por natureza.
 Óptica: Memórias ópticas se utilizam da propriedade de reflexão da luz, alterando esta
propriedade em uma superfície altamente polida e refletiva, de forma que pontos
determinados se tornem não refletivos, enquanto outros mantenham alta refletividade. São
exemplos desta tecnologia os discos ópticos como o CD e DVD. A gravação e leitura dos
dados é feita utilizando raios laser.
 Temporariedade: Esta propriedade não é propriamente particular do tipo de memória em si, mas
do uso que é feito dela. Diz respeito ao tempo de permanência dos dados em uma memória
qualquer. Por exemplo, pelo longo tempo que uma informação pode permanecer armazenada em um
HD, este dispositivo é considerado como uma memória permanente. Por outro lado, os registradores
internos da UCP somente armazenam dados pelo tempo suficiente para seu processamento,
constituindo memórias com alto grau de transitoriedade.
 Custo: Esta é uma característica altamente dependente da tecnologia do dispositivo. O custo é
normalmente avaliado em preço por byte, também como uma forma de favorecer a comparação
entre memória de tecnologias distintas.

3.3. Tipos e Nomenclatura de memórias


Examinemos agora os principais tipos de memória e suas características.
Registradores
Os registradores são internos à UCP, e, portanto, são fabricados com a mesma
tecnologia de semicondutor. São as memórias mais rápidas disponíveis no sistema,
com tempos de acesso da ordem de 1 a 5ns. A capacidade dos registradores é
medida em bits, e normalmente têm a capacidade de armazenar uma palavra do
processador (8, 16, 32, 64 bits). São memórias voláteis, necessitando do
fornecimento de energia para funcionarem. Normalmente os processadores têm, no
máximo, algumas poucas dezenas de registradores de dados. É a memória mais
cara do sistema, situando-se no topo da pirâmide hierárquica.
Memória Cache - MC
A MC se encontra logo abaixo dos registradores na pirâmide hierárquica. Podem
estar localizadas fora da UCP, ou ter uma parte dentro da UCP, se valendo da
tecnologia da própria UCP, e outra fora desta. Neste último caso, é comum se
denominar de cache L1 o cache interno e cache L2 o cache externo. Alguns
processadores podem chegar a ter dois caches internos, quando são então
designados por L1 e L2 (internos) e L3 (externo). A MC é fabricada com circuitos
eletrônicos de alta velocidade, possuindo também um alto custo. A capacidade do
cache está na faixa de 64KiB a 2MiB, com tempos de acesso da ordem de 5 a 15ns.
Memória Principal - MP
É a memória que atende pelo preceito de “Programa Armazenado” estabelecido por
von Neuman. É a memória básica de um sistema computacional e, sem ela, não é
possível a operação do mesmo.
A MP é uma memória cerca de dez vezes mais lenta que o cache, com tempos de
acesso na faixa de 60 a 90ns, porém com uma capacidade bem maior, na faixa de
128MiB a 1GiB. Geralmente são fabricadas com tecnologia de circuitos eletrônicos
que lhes confere uma velocidade, embora inferior à MC, mas muitas ordens de
grandeza acima das memórias externas ou secundárias.
Memória Secundária (ou de Massa)
A memória secundária localiza-se na base da pirâmide, servindo principalmente ao
armazenamento permanente de dados e programas do usuário. É normalmente uma
memória de grande capacidade, alcançando a faixa de TiB (Tera Bytes), embora bem
mais lenta que os demais tipos de memória, pois são geralmente construídas com
uma parcela de tecnologia mecânica - muito embora já estejam no mercado os
chamados “discos de estado sólido”, que são totalmente eletrônicos.
São variados os tipos de dispositivos que encontramos como memória secundária,
tais como o HD, o CD/DVD, fita magnética, e outros. Têm todos em comum o fato de
serem memórias do tipo não volátil.

AULA 4 – O Sistema de Memória


4.1. Organização do Sistema de Memória
Como você já viu, o sistema de memória de um sistema computacional é
normalmente dividido em três categorias de memórias: a memória interna ao sistema, ou
seja, conectada diretamente ao processador e formada por seus registradores, a memória
cache (se houver) e a memória principal, a memória externa e a memória off-line. Estes
dois últimos tipos se diferenciando apenas em que a memória denominada off-line estará
disponível apenas quando necessário e não permanentemente. A figura 2.10 a seguir
ilustra a organização básica de um sistema de memória.

Figura 2.10:
Organização básica de um sistema de Memória.

 Um programa, para ser executado, tem que ter suas instruções armazenadas
na memória principal, que é a única que o processador entende como sendo a
memória acessível como tal. Quando a capacidade da MP não comporta o
programa a ser executado (ou o conjunto de programas a serem executados), pode
ser utilizado um esquema denominado de “memória virtual” onde uma parte
reservada da memória secundária (HD) trabalha como uma extensão da MP, a
memória física. Então, necessariamente o programa precisa estar totalmente
contido na MP, estando contido na memória virtual (HD), dividido em “páginas”, que
são blocos de memória contígua atribuídos normalmente pelo sistema operacional
(SO) do computador, e o SO transfere um determinado número destas páginas
para a MP sempre que necessário, removendo outras páginas da MP, que não se
façam necessárias naquele momento, e armazenando-as de volta na memória
virtual (HD).
Sempre que o processador necessitar de uma instrução (ou um dado), ele irá
realizar uma operação de leitura encaminhada a um endereço específico da MP. Pode
então entrar em ação um complexo controle do sistema de memória que, em linhas
gerais, tomará as seguintes ações:
 Verificará se o conteúdo da MP no endereço especificado já está armazenado ou não
no cache (MC). Se sim, a leitura será feita diretamente do cache, que é uma operação
muito mais rápida que ler da MP. Se não, um bloco de dados da MP englobando o
conteúdo solicitado será transferido para a MC, na expectativa que as próximas
solicitações da UCP já estarão na MC, acelerando o processo de acesso à memória.
 Caso o conteúdo solicitado não esteja, em primeira instância, na memória física, a
página da memória virtual que contenha estes dados será transferida para a MP, e o
processo anterior é então realizado.
Note-se que o processo de verificação do cache tem que ser muito rápido, para ser
eficiente. Este controle é realizado então por hardware. Já o controle da memória virtual,
por lidar com dispositivos relativamente lentos, é normalmente realizado por software, na
realidade, pelo SO da máquina, se existir.

4.2. Memória Principal


A MP, como ilustrado na figura 2.11 ao lado,
pode ser vista como um depósito de informações
organizado em um arranjo de N células, cada
célula podendo armazenar m bits. As células são
identificadas individualmente e sequencialmente
por um identificador único – seu endereço, que,
para N células, vai de '0' a 'N-1'. Além disso, o
total de células endereçável é normalmente uma
potência de 2, ou seja, podemos escrever N = 2 n,
e precisamos de n bits para representar um
endereço da memória.
Teoricamente o ideal seria que uma célula figura 2.11: Estrutura da MP.

tivesse o tamanho da palavra do processador porém o usual é que uma célula seja
constituída por 1 byte, ou seja, m = 8 bits, como mencionado anteriormente. Mesmo
assim, a unidade de transferência de dados em uma operação de leitura/escrita pode
ser maior que a célula, sendo geralmente um múltiplo desta e, preferivelmente, igual ao
tamanho da palavra do processador. Assim, um processador de 32 bits com a MP
organizada em células de 8 bits, como usual, é capaz de acessar 4 células contíguas em
uma única operação de leitura/escrita, especificando apenas o endereço da primeira
célula do grupo. Ainda assim, sempre que necessário, será possível se acessar qualquer
célula, individualmente.
Na figura 2.12 a seguir ilustramos o processo de leitura/escrita na MP pelo
processador.
A MP é constituída por um tipo de memória popularmente chamada de RAM. As
memórias RAM (Random Access Memory, ou, em português, Memória de Acesso
Aleatório) têm o seu nome devido ao fato de que o tempo de acesso a qualquer célula é
independente de seu endereço, ou seja, podemos acessar aleatoriamente qualquer
endereço gastando sempre o mesmo tempo. Elas evoluíram com o tempo, resultando em
diversos tipos de memória, que podemos classificar, de uma forma ampla, em dois tipos:
Figura 2.12: Processo de leitura/escrita na MP pelo processador.

 RAM R/W (Read/Write Memory, ou, Memória de Leitura/Escrita): são memórias


em que os dados podem ser lidos ou escritos com igual facilidade, utilizando os
procedimentos básicos de um processador para realizar estas operações. Têm
aplicação na construção da MP e da MC, sendo memórias voláteis. Hoje podemos
subdividir as memórias RAM R/W em dois subgrupos:
 RAM Estática (SRAM = Static RAM): este foi o primeiro tipo de memória eletrônica
desenvolvido, sendo baseadas em Flip-Flops para o armazenamento de bits,
permanecendo a informação armazenada, estaticamente, até que nova informação
seja ali colocada ou a energia seja desligada. São memórias rápidas e caras,
sendo hoje utilizadas, principalmente, para a construção de memórias cache.
 RAM Dinâmica (DRAM = Dynamic RAM): o elemento básico de memória é um
diminuto capacitor, que, ocupando muito menos espaço que os transistores usados
para construir um Flip-Flop permite uma densidade de armazenamento muito
maior, reduzindo os custos e aumentando a capacidade das mesmas. A principal
aplicação das DRAMs hoje é na construção da memória principal. O nome
“dinâmica” vem do fato de que um capacitor, para manter sua carga, necessita de
uma recarga frequente, chamada de “ciclo de refresh”, para poder ser útil como
memória. Este refresh é normalmente realizado pelo próprio sistema de controle da
memória que periodicamente lê o conteúdo de cada célula e o reescreve de volta,
tornando-se transparente ao usuário.
As memórias DRAM, por sua vez, também evoluíram, levando a diversas
denominações, que se distinguem basicamente pela forma como o acesso é
realizado e pela velocidade de acesso resultante.
 ROM (Read Only Memory, ou, Memória só de Leitura): são memórias que, em
operação normal no sistema, podem apenas ser lidas. Obviamente necessitam de
algum procedimento especial para gravação de dados. As ROMs também evoluíram,
de forma que podemos distinguir os seguintes tipos:
 ROM – a designação simples por ROM é dada ao modelo original, a qual somente
é “gravável” no processo de sua fabricação e, como este é feito através de
máscaras fotográficas, receberam a designação de Mask Programmable ROM, ou
ROM programável por máscara, como você pode perceber no vídeo “From Sand to
Chip”, referenciado anteriormente. Para ter uma ROM com os seus dados, você
necessita solicitar a um fabricante para produzir uma especialmente para você.
Como o processo de projeto é relativamente caro, só se justifica o uso de uma
ROM para produções em larga escala.
 PROM (Programmable ROM, ou, ROM Programável) – este foi um avanço da
ROM, permitindo que se adquirisse uma ROM “virgem” e, através de um processo
especial, semelhante à queima de fusíveis, você poderia programá-la, uma única
vez.
 EPROM (Erasable PROM, ou PROM Apagável) – este foi o próximo passo dado,
onde você tem uma PROM cujo conteúdo pode ser completamente apagado
através da incidência de luz ultra-violeta sobre o chip. Foi um grande avanço para o
desenvolvimento de projetos com ROMs, pois você não precisa se descartar dos
chips que, porventura, não tenham dado certo. Basta apagar e regravar. O
processo de apagar, no entanto era muito lento e tinha que ser feito utilizando um
aparato especial, contendo uma fonte de boa intensidade de raios ultra-violetas.
Deixar o chip exposto à luz solar também era uma opção, porém mais lenta ainda.
 EEPROM (Electrically Erasable PROM, ou PROM Apagável Eletricamente) – esta é
uma PROM que pode ser apagada eletricamente. Embora também requeira um
procedimento especial para apagar, é um processo relativamente mais rápido que
o das EPROMs.
 Flash ROM – este foi o último avanço nas memórias ROM. Uma memória Flash
ROM, ou simplesmente Flash, é na realidade uma EEPROM cujo processo de
apagamento pode ser realizado por blocos (e não toda a memória) e de uma forma
muito rápida (comparando-se com uma EEPROM). É contudo também um
procedimento especial, distinto do procedimento de leitura/escrita de uma RAM ou
mesmo o procedimento de leitura da ROM, que pode ser feito normalmente
utilizando-se os barramentos do processador. Este é o tipo de memória que integra
os Pen Drives, os dispositivos SSD (Solid State Disc, ou, Disco de Estado Sólido),
e praticamente a totalidade dos dispositivos portáteis como câmeras digitais e
telefones celulares.
Vale notar que toda ROM regravável tem um limite de ciclos de gravação, o que torna
sua vida útil relativamente curta, comparada com outros tipos de memória. A
tecnologia tem procurado estender esta capacidade nas memórias flash, chegando
hoje a até 100.000 ciclos de regravação. Veja mais detalhes sobre a memória flash em
“Memória flash: o que o futuro reserva para nossos computadores?”
(http://tinyurl.com/lmpqtnq).

4.3. Memória Cache


A memória cache (MP) é um pequeno bloco de memória rápida que se situa entre o
processador e a MP. Pelas características que se espera do cache, de acelerador do
acesso à MP, a escolha recai sobre memórias do tipo SRAM. Na figura 22.13 a seguir
temos uma ilustração do contexto de operação do cache.

Figura 2.13: Contexto de operação da memória cache.

A operação com o cache se efetua como se segue:


 O cache é constituído de “blocos” de 'K' palavras;
 UCP solicita o conteúdo de determinado endereço em memória (MP);
 A requisição é passada para o cache que verifica existência dos dados em um de seus
blocos;
 Se presente (denomina-se a este fato de hit, ou acerto), entrega o dado para a UCP,
de forma rápida;
 Se o dado não estiver presente no cache (denomina-se a este fato de miss, ou falha), o bloco
correspondente na memória principal é lido para o cache;
 É feita então a entrega do dado solicitado, do cache para a UCP;
 O cache inclui rótulos (labels em inglês) para identificar quais blocos da MP estão presentes em
cada um dos seus blocos
 Embora efetivamente a UCP nunca acesse a MP diretamente, o operação do cache é
totalmente transparente para ela, que julga estar sempre acessando a memória
principal.
A necessidade do uso da MC se faz presente por dois motivos.
O primeiro é a disparidade de velocidade de operação entre a UCP e a memória
principal. Mesmo utilizando-se na MP DRAMs rápidas, que operem de forma síncrona
com o barramento de dados da UCP, ainda assim a UCP gasta muito menos tempo para
processar um dado do que para lê-lo diretamente da MP. Uma UCP de 1 GHz deve ser
capaz de realizar uma soma em não mais que uns poucos nanosegundos, enquanto a
leitura de uma palavra da MP pode levar da ordem de 100 ns ou mais. Assim, quanto
mais rápido se puder entregar dados da memória para a UCP, melhor será seu
desempenho global.
O outro fator se deve a características estatísticas dos programas, denominado de
princípio da localidade. O que se verifica, na prática é que, mesmo um longo programa
que esteja sendo executado (armazenado na MP), normalmente executa instruções em
grupos sequenciais, às vezes repetindo rapidamente um mesmo grupo diversas vezes,
como em um loop. Isto leva a que, uma vez solicitado um determinado endereço na MP, é
muito provável que, subsequentemente, aquele endereço ou outro próximo a ele deverá
ser solicitado pela UCP. É por este motivo que, quando um endereço solicitado pela UCP
não tem seu conteúdo presente no cache (miss), é transferido todo um bloco de dados da
memória, contíguo, que contenha este dado, para um bloco equivalente na MC, na
expectativa de que, nas próximas solicitações da UCP ocorram mais hits do que misses.
O projeto do sistema de cache leva em consideração estas características dos programas
para definir todos os parâmetros do cache, como o tamanho do bloco e como se faz a
associação entre endereços e blocos, como veremos adiante.
Fatores importantes a considerar são que quanto mais memória se desejar colocar
na MC muito mais caro fica o sistema de memória. Além disso, usar mais cache pode e
melhorar o desempenho somente até certo ponto, pois, quanto mais cache houver, mais
tempo será tomado na operação de verificar se determinado conteúdo está presente ou
não.
Uma memória cache, então, é uma memória rápida (SRAM) organizada em blocos
de K células do tamanho das células da MP. A cada bloco está associado um rótulo que
vai conter um identificador (uma sequência de bits) que permitirá ao sistema de memória
saber se o conteúdo de determinado endereço da MP está armazenado naquele bloco ou
não. Este conjunto rótulo-bloco é denominado uma linha do cache.
Para fins de associação entre a MP e a MC, consideramos que a MP também está
dividida em blocos do mesmo tamanho que os da MC. Esta visão da MC e MP está
expressa na figura 2.14 a seguir, onde temos uma MC com L linhas e uma MP de 2 n
células (bytes).

Figura 2.14: Estrutura da MC e MP associada.


Um dos principais problemas a resolver em um sistema de cache é como alocar os
blocos da MP em blocos da MC. Isto significa como, a partir do endereço de uma célula
da MP, vamos determinar aonde ela poderá ser armazenado no cache, se lá ainda não
estiver. Aonde procurar no cache para verificar se ela lá está, e como gerar o rótulo que
permitirá fazer esta verificação. Este problema é o que se chama de função de
mapeamento do cache. Normalmente a função de mapeamento do cache é classificada
em três tipos: mapeamento direto, associativo, e associativo por conjunto. Na
realidade, podemos sintetizar todos estes modos no modo associativo por conjunto,
obtendo os outros dois como situações particulares deste. É assim que faremos.
Como as células da MP são invariavelmente constituídas de 1 Byte, usualmente se
utiliza indistintamente os termos célula e Byte, para se referir a uma posição da memória,
sabendo-se que célula é o agrupamento de bits que corresponde a um endereço, a qual
contém um Byte de informação.
Mapeamento Associativo por Conjunto
Recapitulando, nossa memória cache contém C = 2 m células, divididas em blocos de
K células, com K = 2w. Dispomos então de L = 2r = C/K linhas, e portanto r = m – w.
Neste modo de mapeamento, dividimos as linhas do cache em conjuntos de J = 2 l
linhas, resultando que ficaremos com B = L/J = 2 v conjuntos no cache, com v = r - l. Para
identificarmos uma célula dentro de um bloco, precisaremos de w bits, tal que K = 2 w.
Considerando ainda que a MP é constituída de 2 n células, um endereço da MP é
constituído de n bits.
Agora, fornecido um endereço da MP, com n bits, vamos dividi-lo da seguinte forma:
 os w bits menos significativos formam o endereço de célula, que aponta para uma
célula específica dentro de um bloco na MP;
 os v bits seguintes serão tomados como o endereço do conjunto na MC ao qual o
correspondente bloco da MP estará associado;
 os  bits restantes no endereço completo da célula na MP,  = n – w – v, constituirão o
rótulo associado aquele bloco.
A figura 2.15 a seguir ilustra esta divisão de um endereço da MP definindo o
mapeamento associativo por conjunto.

Figura 2.15: Estrutura de endereço do mapeamento associativo por conjuntos.

Este esquema de mapeamento funciona da seguinte forma:


i. a UCP fornece um endereço de n bits que deseja acessar na MP;
ii. o controle do cache intercepta este endereço, identificando o conjunto do cache
a que ele diz respeito e o rótulo correspondente;
iii. o controle do cache procura em todas as linhas do conjunto identificado se
algum dos blocos do conjunto possui um rótulo idêntico ao definido pelo
endereço fornecido;
iv. se encontrou o rótulo, então o conteúdo desejado está naquele bloco, e basta
pegar a palavra (célula) especificada, dentro do bloco, e entregá-la para a
UCP;
v. se o rótulo não foi identificado, o controle do cache lê o bloco correspondente
na MP e o armazena em qualquer uma das linhas do conjunto associado
no cache, substituindo o conteúdo lá contido. Qual das linha possíveis dentro
do conjunto será utilizada é um problema para um algoritmo de substituição,
que veremos adiante.
Um exemplo numérico facilitará a compreensão deste esquema. Vamos supor que
temos o seguinte sistema:
 Memória principal de 16 MiBytes (com células de 1 Byte)
 n = 24 bits de endereço (16 Mi = 224)
 Cache de 64 KiCélulas (ou 64 KiBytes, já que as células do cache devem ter o
mesmo tamanho que a célula da MP)
 Blocos de 4 células (4 Bytes)
 w = 2 bits, para identificação de uma célula no cache;
 cache contém L = 16 KiLinhas (64 Ki / 4) = 214 linhas, e temos r = 14;
 Organização em conjuntos de J = 4 = 22 linhas, com l = 2
 B = L/J = 2v = 4 KiConjuntos, com v = r – l = 12
 Rótulo com  = n – v – w = 10 bits.
Agora, dado o endereço 3A725B H = 0011101001110010010110112, podemos
mapear todos os elementos necessários para a operação do cache. A divisão do
endereço, seguindo o modelo da figura 2.15, está apresentada na figura 2.16 abaixo.
Figura 2.16: Exemplo de Mapeamento Associativo por Conjunto.

Temos então que o endereço da célula procurada é 112 = 3H, a qual poderá estar em
alguma das 4 linhas do conjunto cujo endereço é 1100100101102 = C96H, devendo ter um
rótulo igual a 00111010012 = 0E9H. Agora, basta procurar nos rótulos das 4 linhas do
conjunto C96H pelo rótulo 0E9H. Se for encontrado, leia a célula de endereço 3 no bloco e
repasse o valor para a UCP. Se o rótulo não for encontrado em nenhum dos blocos do
conjunto, leia o bloco da MP e armazene em qualquer uma das linhas do conjunto na MC
(de acordo com um algoritmo de substituição a ser especificado), e repasse a célula
solicitada para a UCP.

Mapeamento Direto
O mapeamento direto é o modo mais simples de se mapear os blocos da MP na MC.
Ele se resume a estabelecer que os conjuntos de linhas na MC serão formados por
apenas uma única linha. Em outras palavras, teremos tantos conjuntos quanto linhas no
cache, de modo que temos J = 1 linha por conjunto, e portanto l = 0 bits, v = r bits, e
temos B = L = 2r Linhas (Conjuntos), como mostrado na figura 2.17.

figura 2.17: Mapeamento Direto do Cache.

Tomando-se o exemplo anterior e convertendo para Mapeamento direto, ficamos


então com:
 MP: 16 MiBytes, n = 24 bits;
 MC: 64 KiBytes / Blocos de 4 Bytes
 K = 4 = 22, w = 2 bits para endereçamento de palavra;
 L = 16 KiLinhas = 214 Linhas, r = 14 bits para endereçamento de linha;
 l = n – w – r = 8 bits para o rótulo.
Considerando o mesmo endereço anterior fornecido pela UCP, ficaremos com o
mapeamento conforme a figura 2.18 que se segue.

Figura 2.18: Exemplo de Mapeamento Direto do cache.


Neste caso temos que o endereço da célula (no bloco) procurada continua sendo 11 2
= 3H, agora temos a especificação de uma única linha do cache, de endereço
011100100101102 = 1C96H, com um rótulo igual a 001110102 = 3AH.

Mapeamento Associativo
O mapeamento associativo representa o outro extremo da organização da MC, onde
adotamos um único conjunto, contendo todas as linhas do cache.
O esquema geral para o mapeamento associativo pode então ser visto como na
figura 2.19. Observem que, tirando-se os bits para indicação da palavra dentro de um
bloco, todos os demais bits do endereço global serão utilizados como rótulo.

figura 2.19: Mapeamento Associativo do Cache.


Agora ficamos então com:
 MP: 16 MiBytes, n = 24 bits;
 MC: 64 KiBytes / Blocos de 4 Bytes
 K = 4 = 22, w = 2 bits para endereçamento de palavra;
 L = 16 KiLinhas = 2 14 Linhas, todas contidas em um único conjunto, de modo que J
= L = 16 KiLinhas por bloco;
 B = 1 = 20 Blocos, de forma que v = 0 bits são necessários para endereçar um
bloco (como só existe um único bloco, nenhum bit é necessário para o
endereçamento deste bloco);
  = n – w – v = = n – w = 22 bits para o rótulo;
que resulta, para o endereço fornecido anteriormente, no mapeamento apresentado na
figura 2.20 a seguir,

Figura 2.20: Exemplo de Mapeamento Associativo do cache.

de modo que podemos escrever que o endereço da palavra buscada no bloco é 11 2 = 3H e


o rótulo associado é 00111010011100100101102 = 0E9C6H.
A mecânica do mapeamento associativo é então de procurar o rótulo correspondente
ao endereço fornecido em todas as linhas do cache, e ver se ocorre um hit. Se ocorrer,
basta entregar a célula especificada no bloco da linha onde ocorreu o hit e entregar para a
UCP. Se o rótulo não foi encontrado em nenhuma linha, temos um miss, e o controle do
sistema deve buscar o bloco correspondente na MP e transferir para a MC, colocando-o
em qualquer uma das linhas do cache (de acordo com um algoritmo de substituição),
substituindo os dados ali presentes.

Considerações sobre os modelos de mapeamento:


Como vimos, o esquema de mapeamento de blocos da MP no Cache pode ser
descrito por um modelo geral, denominado Mapeamento Associativo por Conjuntos. No
caso em que temos conjuntos de uma linha apenas, chamamos de Mapeamento Direto. A
vantagem do mapeamento direto é que ele é muito simples, sob dois aspectos: primeiro,
não é necessário procurar em várias linhas do cache para verificar um hit ou miss – basta
ir direto à linha correspondente ao endereço fornecido e comparar o rótulo com o
indicado no endereço. Esta operação pode ser muito rápida. Da mesma forma, se for
necessário substituir um bloco do cache com novo conteúdo lido da MP, a escolha
também é simples – não há escolha, substitua o bloco da linha indicada no endereço da
MP. No entanto, esta última “vantagem” pode também ser uma desvantagem do
mapeamento direto – não tendo escolhas para substituição de bloco, você poderá estar
substituindo um bloco que contém informação que o processador poderá precisar logo em
seguida, quando então terá que fazer nova substituição.
O mapeamento associativo é o que oferece maiores vantagens do ponto de vista de
substituição de blocos – você pode escolher qualquer uma das linhas do cache, adotando
alguma política (algoritmo) que assegure uma maior probabilidade de, o que está sendo
substituído, não ser requisitado pelo processador em pouco tempo. No entanto, como
para verificar um hit/miss todas as linhas do cache precisam ser pesquisadas, este é um
processo custoso, requerendo uma lógica muito elaborada para ser feito em um tempo
que permita ainda se ter uma vantagem razoável de velocidade no uso do cache.
O mapeamento associativo por conjuntos é um meio termo, que pode não penalizar
em demasia a verificação do cache e ao mesmo tempo oferecendo alguma flexibilidade
na escolha de uma linha para substituição, se necessário.
Os algoritmos de substituição, quando aplicáveis, podem ser de diversos tipos,
como:
 Menos Recentemente utilizado (Least Recently Used – LRU): substitua o bloco
utilizado menos recentemente;
 Primeiro a entrar é o primeiro a sair (First In First Out – FIFO): substitua o bloco há
mais tempo no cache;
 Menos Frequentemente utilizado (Least Frequently Used – LFU): substitua o bloco que
gerou menos acertos (hits);
 Aleatório (Random): substitua aleatoriamente qualquer uma das linhas. Embora seja
um procedimento simples, apresenta boa eficiência.

4.4. Memória Secundária


A chamada memória secundária, como você já viu, é aquela que se situa na base da
pirâmide hierárquica do sistema de memória, prestando-se a um armazenamento
“permanente” de dados e programas. São as memórias que têm o mais baixo custo por
byte, alta-capacidade de armazenamento, mas, em compensação, possuem um tempo de
acesso muitas ordens de grandeza acima das memórias eletrônicas.
Dispositivos típicos nesta categoria são:
 discos magnéticos;
 discos ópticos;
 fita magnética;
 e também o pendrive, embora este seja uma memória eletrônica.

Discos Magnéticos
Um disco magnético é comumente feito a partir de um disco de metal ou plástico,
cuja superfície é recoberto por um material magnético (óxido de ferro). Os discos
magnéticos foram ou são fabricados em diversos estilos, sendo de nota os seguintes:
 Disco Flexível, ou Floppy Disc;
 Disco Rígido (HD);
 Disco Rígido Removível.
Todo tipo de disco magnético tem a mesma
organização básica, conforme a figura 2.21. Os
discos são divididos em anéis concêntricos,
denominados trilhas, havendo um espaço separador
(gap) entre as trilhas. Cada trilha é dividida, por sua
vez, em setores, também separados por gaps entre
eles. Um setor é a menor unidade de armazena-
Figura 2.21: Trilhas e Setores de um disco
mento no disco, e usualmente tem uma capacidade magnético. (imagem original)
de 512 Bytes. A menor unidade de transferência é
denominada de um Bloco (ou Cluster), que pode ser constituído de um ou mais setores,
conforme o tamanho (capacidade) do disco e a capacidade do SO do computador de
“endereçar” objetos no disco.
Embora as trilhas e setores tenham tamanhos físicos distintos, proporcionais à
distância do centro em que se encontram, como a velocidade de rotação é constante,
todos comportam a mesma quantidade de informação e têm uma taxa de leitura/escrita
fixa. As trilhas internas, portanto, terão uma densidade de gravação maior que as
externas.
Algumas das principais características que encontramos nos discos magnéticos são:
 Cabeças de leitura/escrita: podem ser
 Fixas, o que requer uma cabeça por trilha (não muito usado atualmente);
 Móveis, tendo-se uma cabeça por face que pode se mover para ser posicionada
sobre qualquer trilha.
 Posicionamento do Cabeçote de leitura/escrita: pode ser
 Por contato, em que a cabeça de leitura/escrita fica em contato com a superfície
do disco, levando à necessidade de uma velocidade de rotação mais lenta
(usada nos discos flexíveis);
 Espaço fixo, em que as cabeças estão a uma pequena distância da superfície
do disco, mecanicamente fixada, mas sem tocá-la (discos rígidos em geral);
 Flutuantes, onde a cabeça “flutua” em um colchão de ar, formado pela alta
velocidade de rotação do disco, que está em uma unidade selada (caso dos
discos Winchester, atualmente conhecidos simplesmente por HD, por ser a
tecnologia dominante).
 Transportabilidade:
 Removível, permite a retirado do disco para substituição por outro, gerando
uma capacidade virtual de armazenamento ilimitada;
 Fixo, com o disco permanentemente montado no drive.
 Faces (ou Lados):
 Simples, onde apenas uma das faces do disco é utilizada para armazenamento;
 Dupla, onde as duas faces são utilizadas.
 Pratos (ou Discos):
 Prato único, onde o drive contém somente um único disco físico;
 Pratos Múltiplos, quando o drive contém vários discos acoplados ao mesmo
eixo de rotação.

Discos Flexíveis (ou Floppy)


Os discos flexíveis hoje caíram em desuso, tendo sua principal função, de
transferência de dados entre sistemas, sido suplantada pelo surgimento dos pen drives.
Os floppies, como eram chamados, surgiram com um diâmetro de 8”, passando
depois para 5¼”, e posteriormente, para 3½”, estes dois últimos também chamados de
“disquetes”, pelo seu tamanho reduzido. Muito embora o diâmetro físico fosse reduzindo,
a tecnologia de gravação permitiu o aumento da capacidade de armazenamento, que
passou de 80 KiBytes do primeiro floppy de 8”, até atingir 1,44 MiBytes no floppy de 3½”.
Apesar de serem dispositivos lentos, pelos padrões de hoje, eram um meio de
armazenamento extremamente barato para a época, e universal – praticamente qualquer
sistema computacional dispunha de um ou dois drives de disquetes.

Disco Rígido tipo Winchester


O disco tipo Winchester foi o primeiro sistema de disco rígido selado que surgiu.
Desenvolvido pela IBM em 1973, com a identificação de IBM-3340, possuía dois pratos de
30 MiBytes cada, ficando conhecido, então como o IBM- 3030, “o disco mais rápido do
oeste”. Foi natural a associação com o rifle Winchester 30-30, que era conhecido como “o
rifle mais rápido do oeste”, e se passou a designar a tecnologia recém-criada como
tecnologia Winchester. Hoje em dia praticamente todo sistema de disco magnético rígido
utiliza a tecnologia Winchester, e passou-se a utilizar simplesmente a identificação de HD
(do inglês Hard Disk) para estes sistemas de disco.
A grande vantagem do HD é ser uma
unidade selada (não troca ar com o meio
externo) permitindo que o disco interno
trabalhe em um ambiente sem poeira ou
outros tipos de partículas em suspensão.
Este “encapsulamento do disco
possibilitou se utilizar maiores velocidades
de rotação, com maior densidade de Figura 2.22: HD aberto (imagem original).
gravação, e uma cabeça de leitura/escrita
que fica situada acima da superfície a apenas uns poucos nanômetros de distância, nos
HDs mais modernos, “flutuando” sobre um colchão de ar provocado pela rotação do disco.
A figura 2.22 ilustra com uma fotografia um HD aberto, enquanto a figura 2.23 ilustra
graficamente um sistema HD de dois pratos com seus braços e cabeças de leitura/escrita.
Diversos fatores influenciam o tempo de acesso e a taxa de leitura/escrita em um
sistema de disco magnético:
 Tempo de Busca, ou Seek Time – é o tempo
necessário para se posicionar a cabeça de
leitura/escrita sobre uma determinada trilha;
 Atraso (ou Latência) Rotacional – é o tempo que
é necessário se esperar para que um determinado
setor esteja sob a cabeça de leitura/ escrita, após já
estar posicionada sobre a trilha desejada;
 Tempo de Transferência – é função da densidade
de gravação e da velocidade de rotação do disco,
assim como da quantidade de setores que se vai Figura 2.23: HD de 2 pratos.
transferir.
(imagem original).

Discos Ópticos - CD-ROM


O CD-ROM foi originalmente criado em 1983 pela Philips e Sony para armazenar
áudio (músicas) em formato digital, em substituição às antigas fitas cassete de gravação
de áudio, não por acaso também criadas pela Philips, 20 anos antes. Inicialmente com
uma capacidade 650MiBytes, disponibilizando mais de 70 minutos de áudio, os CDs estão
também disponíveis hoje com 700, 800 e 900MiB.
Um CD original (de fábrica) é construído sobre uma base de policarbonato (um tipo
de plástico) coberta com uma película altamente refletiva, usualmente de alumínio. Por
cima do alumínio é aplicada uma camada de um verniz protetor, e por cima desta pode vir
um rótulo. Os dados são armazenados como indentações no alumínio, obtidas através da
“queima” com um laser de alta potência, e posterior confecção de uma matriz para
prensagem, que será utilizada para confeccionar cópias. A leitura é realizada com um
laser de baixa intensidade, detectando-se a luz refletida.
Diferentemente dos discos magnéticos, o CD possui uma única trilha em espiral,
com 5,27 Km de comprimento, e utiliza densidade de gravação constante, obtida pela
manutenção de uma velocidade linear constante e velocidade angular variável, conforme
o raio da trilha no ponto em que está sendo lida/escrita. A trilha do CD também é dividida
em blocos, com 2.352 Bytes cada um.
Na figura 2.24 ilustramos o formato da
trilha em um CD, e na figura 2.25 apresentamos
uma fotografia por microscópio eletrônico mos-
trando as “marcas” na superfície do alumínio
deixadas pela gravação a laser.
Os “buracos” feitos pelo laser, chamados
de “pits”, se tornam pouco refletivos, ou, pelo
menos, espalham a luz incidente, sinalizando
um “zero”, enquanto onde não há um pit, cha-
mado de “land”, a luz incidente é bem refletida, Figura 2.24: Ilustração da trilha de um CD.

sinalizando um “um”. Na leitura, um foto diodo capta a luz refletida de um laser,


detectando-se assim a informação em binário gravada na superfície do alumínio.

Na reprodução de áudio, requer-se uma taxa de


leitura constante, correspondendo a uma velocidade
linear de 1,2 m/s. A trilha fornece 4.391 segundos, ou
73,2 minutos, de áudio, a uma taxa de 1,1444 Mbps.
Esta é a velocidade chamada de “1x” do CD, outras
velocidades de leitura e gravação sendo possíveis e
disponíveis, cotadas como múltiplos desta. Por exemplo,
um drive de CD pode indicar uma capacidade “20x”,
significando que a velocidade máxima que ele pode Figura 2.25: Pits & Lands gravados
em um CD (imagem original).
ler/gravar é de 24 m/s ou 22,888 Mbps.
Outros Discos Ópticos
CD-R
O CD-R é um CD Gravável (Recordable), semelhante a uma PROM, e podendo ser
gravado pelo usuário uma única vez. Para obter esta característica, por sobre a camada
refletiva é colocada uma fina camada de um corante orgânico, que tem sua refletividade
alterada na gravação de dados com um laser de relativa baixa-potência, passível de ser
utilizado em equipamentos domésticos.
CD-RW
Tal como em uma EPROM, é um CD Regravável (ReWritable). Possui por sobre o
alumínio uma camada de uma liga que pode mudar de um estado cristalizado para um
estado amorfo, e vice-versa, dependendo da quantidade de calor fornecido. A gravação é

feita “derretendo-se” esta camada a 400 oC, passando-a do estado cristalino para um
estado amorfo, e alterando assim sua refletividade. Para apagar, esquenta-se esta
camada a temperaturas mais baixas, e ela retorna ao estado cristalino.
DVD
O DVD, ou Digital Vídeo Disc ou ainda Digital Versatile Disc, é semelhante a um CD,
porém utiliza um laser de menor comprimento de onda (650nm, o CD usa 780nm), e uma
taxa de transferência maior (10,55Mbps). Um DVD pode ser single-side (face simples) ou
dual-side (face dupla) e single-layer (uma camada) ou dual-layer (dupla camada), em
qualquer combinação. Cada layer oferece uma capacidade de 4,7GiBytes. Uma segunda
camada é obtida na forma de uma camada semi-transparente, de ouro, que permite
acesso à camada por trás variando o comprimento de onda do laser. A finalidade do DVD
é o armazenamento de vídeo digital, mas, como o CD, pode também ser utilizado para
dados. Também como o CD, pode ser encontrado em versões ROM, R e RW.
Blu-Ray Disc
Um disco tipo Blu-Ray é semelhante ao DVD, utilizando um laser de comprimento de
onda (450nm), ainda menor que o utilizado no DVD. Pode ser single-layer ou dual-layer, e
cada layer oferece uma capacidade de 25 GiBytes. É voltado para o armazenamento de
vídeo de alta definição (HD- High Definition), mas, como o CD/DVD, pode também ser
utilizado para dados.

Fita Magnética:
A tecnologia do uso de fitas magnéticas como sistema de armazenamento de massa
em computação é uma das mais antigas nessa área, existindo há mais de 50 anos. Utiliza
o princípio básico de uma fita de áudio, porém grava, normalmente, várias trilhas em
paralelo (8 ou 9), normalmente utilizando o mesmo número de cabeças fixas de
leitura/escrita. Os métodos de gravação comuns são lineares (gravação no sentido
longitudinal da fita) ou helicoidal (diagonalmente, como nas antigas fitas de vídeo – Vídeo
K7).
Oferece grandes capacidades de armazenamento, hoje em formato de cassetes, de
até 800GiBytes. A grande desvantagem das fitas magnéticas é o acesso totalmente
sequencial, o que o torna uma operação bem mais lenta que nos discos magnéticos, que
têm acesso semi-sequencial.
Apesar de estarem caindo em desuso, ainda encontram aplicação como meio de
backup, particularmente para servidores.

Pen Drive:
Um Pen Drive é um dispositivo de armazenamento de dados que utiliza a tecnologia
de memórias flash. Usualmente utiliza uma interface USB (através um controlador interno)
para comunicação com um computador, onde o sistema operacional visualiza o
dispositivo como se fosse um drive de disco.
Além da função genérica de um drive de estado sólido, este dispositivo também é a base
para players de áudio digital, armazenamento de imagens/vídeo em câmeras digitais e em
telefones celulares.
Hoje são comumente disponíveis dispositivos com capacidade desde 64 MiB até 250 GiB.
REFERÊNCIAS
Monteiro, Mário A. Introdução à Organização de Computadores. 5.ed. Rio de Janeiro:
LTC, 2007.

Stallings, William. Arquitetura e Organização de Organização de Computadores. 8.ed.


São Paulo: Pearson Pratice Hall, 2010.

Wikipedia. Sistema Binário. Disponível em:


<http://pt.wikipedia.org/wiki/Sistema_de_numeração_binário#História>. Acesso em: 29
dez. 2013.
GLOSSÁRIO

Número irracional
Um número irracional é um número real que não pode ser obtido pela divisão de dois
inteiros.

Número complexo
Um número complexo é um número que pode ser escrito como z = a + bi, onde a é dita

ser a parte real, b é a parte imaginária, e i= √−1 , sendo denominado a unidade


imaginária.

Metadados
Dados sobre outros dados – são informações, geralmente adicionadas a um arquivo de
dados, fornecendo informações sobre estes dados. Por exemplo, um arquivo de música
pode conter o “nome do artista”, “nome da música”, “nome do álbum”, e assim por diante.
Estes são metadados associados aos “dados” constituídos pela música em si.

Backup
Uma operação de backup, em computação, é a realização de uma cópia de segurança de
dados que ficará guardada, fora do sistema computacional, para uma possível
restauração destes na ocorrência de alguma falha e/ou corrupção dos dados presentes no
sistema.

Drive
Drive ou acionador geralmente se referencia a um dispositivo eletromecânico que permite
a leitura/gravação de informações em um ou vários discos magnéticos ou ópticos.

Minuendo e Subtraendo
Em uma operação de subtração, toma-se um valor, o minuendo, e dele se retira, se
subtrai, outro valor. O resultado é o resto, ou diferença.

Digitalizar
Digitalizar é a operação de converter um sinal analógico, como um sinal de áudio, em
valores digitais, normalmente binários.

Sintetizador Musical
Um sintetizador digital é um equipamento capaz de gerar sons a partir de códigos digitais.
Por exemplo, um sintetizador pode gerar uma determinada nota musical a partir de um
código que a identifique.

Contêiner
Palavra derivada do inglês, container, que em seu significado original diz respeito um tipo
de caixa para o transporte de cargas. Por extensão, em computação e comunicação de
dados se denomina também de contêiner qualquer tipo de disposição especial para
armazenar ou transportar dados de natureza distinta contidos em um único objeto, o
contêiner.

Dipolo Magnético
Materiais magnéticos, como um ímã, têm elementos da sua estrutura com dois polos, um
denominado Norte, e o outro denominado Sul. Estes elementos são denominados “dipolos
magnéticos”, e têm a propriedade de que o polo sul de um dipolo atrai o polo norte de
outro, enquanto polos iguais se repelem.

Sistema operacional
Um sistema operacional é uma coleção de programas que gerenciam o hardware e o
próprio software de um computador e oferecem uma série de funções básicas, como
escrever na impressora ou ler o teclado, que podem ser utilizadas por um programa do
usuário.

Compressão de dados
Compressão de dados diz respeito a técnicas especiais de codificação da informação de
forma a reduzir a quantidade de bits necessária para representá-la. È particularmente útil
para armazenamento de arquivos, assim como em comunicação, para reduzir o tempo de
transmissão.

Você também pode gostar