ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Aula 4 MEMÓRIA PRINCIPAL
1. INTRODUÇÃO
O papel do processador é pegar os dados, processá-los conforme uma pré-programação
e devolvê-los, não importando de onde vêm ou para vão. Por não existir uma área interna de
armazenamento muito grande, o processador busca programas de uma área, genericamente
chamada memória.
2. MEMÓRIA PRINCIPAL
A memória é a parte do computador onde os programas e os dados são armazenados.
Sem uma memória na qual os processadores possam ler ou escrever informações, o conceito de
computador digital com programa armazenado não pode ser implementado.
É um tipo de memória razoavelmente barata. Seu tempo de acesso está na ordem dos
nanosegundos, porém mais lenta que os registradores. Possui uma freqüência muito alta, é
volátil e qualquer posição pode ser acessada com o mesmo tempo de acesso.
2.1. Bits
A unidade básica de memória é o digito binário, conhecido como bit, que pode ter o
valor 1 ou 0. Para que seja possível implementar um sistema de memória é necessário um
mínimo de dois valores, para que se possam armazenar informações diferentes.
Os computadores usam a aritmética binária por causa de sua eficiência; isso significa
que um sistema de armazenamento de informação digital é baseado na distinção entre valores
diferentes de alguma grandeza física, como corrente ou tensão. O método de codificação em
binário é o mais confiável, pois há necessidade de identificar somente dois números.
Porém, nem todos os computadores utilizam o sistema de codificação binário; alguns
computadores, como os mainframes da IBM utilizam a aritmética decimal. Na verdade, as
operações decimais são possíveis porque nessas máquinas os dígitos decimais são armazenados
segundo um código de quatro bits chamado código BCD (Binary Coded Decimal1)
1
Decimal Codificado em Binário 2
Palavras ou Words: Podem ser consideradas seqüências de células. Os registradores são do tamanho das 1 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
2.2. Endereços de Memória
A memória é formada por um conjunto de células (ou posições), cada uma das quais
podendo guardar uma informação. Cada célula tem um número associado a ela, número esse
conhecido como endereço da célula. É por meio desse número que os programas podem
referenciar a célula. Todas as células de uma memória dispõem do mesmo número de bits.
A célula é a menor unidade endereçável em um computador. Atualmente, a
maioria dos fabricantes de computadores padronizou o tamanho da célula em 8 bits, chamando
essa célula de Byte. Os bytes são palavras2 e a maioria das instruções de uma máquina
opera sobre palavras. Um computador com uma palavra de 32 bits tem 4 bytes/palavra e
com palavra de 64 bits tem 8 bytes/palavra.
Uma instrução de soma muito provavelmente vai somar dois valores de 32 bits.
Portanto, uma máquina de 32 bits deverá ter registradores e instruções para tratar palavras de
32 bits. O mesmo ocorrerá caso a máquina seja de 64 bits.
Figura 1 -­‐ Memória
Ø
Elemento a ser manipulado: bit (armazena a informação na forma de bits)
Ø
Unidade de informação a ser armazenada, recuperada ou transferida (célula) - Grupo de
n bits (n = 8) ⇒ 1 Byte
Ø
ENDEREÇO: código de identificação da localização das células (informações).
2
Palavras ou Words: Podem ser consideradas seqüências de células. Os registradores são do tamanho das palavras. 2 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
2.3. Ordenação dos Bytes
Na criação dos computadores surgiram duas arquiteturas diferentes para tratamento de
armazenamento de memória baseados na ordenação dos bytes. Os bytes de uma palavra
podem ser numerados da esquerda para a direita ou da direita para a esquerda. Quando a
numeração dos bytes começa da esquerda para a direita da palavra, a ordenação dos bytes é
dita Big Endian. Quando a numeração dos bytes começa da direita para a esquerda da
palavra, a ordenação dos bytes é dita Little Endian.
O Windows NT, por exemplo, foi criado em torno de arquitetura little endian e não foi
projetado para ser compatível com big endian , pois a maioria dos programas são escritos com
alguma dependência em little endian.
Os termos Big Endian (maior valor primeiro) e Little Endian (menor valor primeiro)
foram inseridos no jargão da computação por um artigo publicado em 1981, citando o problema
e relacionando-o a um episódio mencionado no livro As Viagens de Gulliver – povo que foi à
guerra para decidir qual a melhor maneira de quebrar ovos, se pelo maior (big) lado ou se pelo
menor (little) lado.
Na ordenação Big Endian os bytes são numerados da esquerda para a direita (0, 1,
2,..., n-1) e é usado por sistemas Unix (arquiteturas SPARC, IBM Mainframe).
Exemplo numérico com 2 bytes:
0305H = 00000011 00000101
Na ordenação Little Endian os bytes são numerados da direita para esquerda (n-1, ...,
2, 1, 0) e é usado por IBM PCs (arquiteturas INTEL).
Exemplo numérico com 2 bytes:
0305H = 00000101 00000011
Outro Exemplo:
Um Computador com:
- Memória com células de 1 byte;
- Palavra de 32 bits;
- Número 266: 00000000 00000000 00000001 00001010;
- Armazenado na memória a partir da célula de endereço 0 (ocupa células de endereço
0, 1, 2, e 3);
3 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 2 -­‐ Ordenação dos bytes
2.3.1. Problemas causados pela falta de padronização do armazenamento em
memória:
- Interpretação de instruções e dados em redes;
- Softwares que rodam em várias plataformas devem tratar essas diferenças;
- Uso de plataformas de palavras de diferentes tamanhos;
Importante:
A solução para o problema não é trivial, em geral se baseia em inversão dos bytes. Isto
funciona para valores numéricos, mas não para cadeias de caracteres.
2.4. Códigos de correção
Os dados armazenados na memória dos computadores podem ocasionalmente ser
alterados em razão de oscilações na tensão de alimentação ou de outras causas. Para se
prevenir contra esses tipos de erro, algumas memórias armazenam as informações usando um
código que permita a correção ou a detecção de erros. Quando esses códigos são usados, há
necessidade de se acrescentarem bits extras a cada palavra de memória, de modo a permitir a
verificação da exatidão da informação armazenada. Quando uma palavra é lida da memória, os
bits armazenados permitem verificar a ocorrência eventual de erros que tenham corrompido a
informação armazenada.
4 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 3 -­‐ Processo Básico de Detecção/Correção de Erros
Dentre os diversos código ou algoritmos de correção de erros estão:
a. Código de Hamming (ou distância de Hamming): O número de bits correspondentes que
diferem em duas palavras de códigos quaisquer. As propriedades de detecção de erros e de
correção de erros dependem fundamentalmente da sua distância de Hamming.
Exemplo:
As palavras de código 10001001 e 10110001 distam 03 unidades de Hamming.
Assim, é necessário que ocorram 03 erros (inversões) nos bits em destaque da palavra 2
para que ela se transforme na palavra 1;
b. Bit de Paridade: Esse bit de paridade deve ser escolhido de modo a fazer com que a quantidade
de bits 1 na palavra de código seja sempre um número par (ou ímpar). Tal código tem distância
de Hamming igual a 2, portanto, a ocorrência de um único erro produz uma palavra de código
inválida. Neste caso o erro é somente detectado e não corrigido.
Como a probabilidade de erro nas memórias atuais é extremamente pequena (um em dez
anos), na prática, os fabricantes de computadores não fazem uso deste recurso.
3. MEMÓRIA CACHE
Ao longo do tempo, os processadores têm sido sempre mais rápidos que as memórias,
mesmo com o tempo de operação das memórias tendo melhorado bastante. À medida que se
5 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
torna tecnicamente possível a colocação de mais e mais circuitos dentro de um chip, os
projetistas vêm usando essas novas facilidades para implementar o processamento pipeline, o
processamento superescalar e processamento em múltiplos núcleos tornando-os mais rápidos.
Enquanto isso os projetistas de memórias têm usado as novas tecnologias para aumentar a
capacidade de armazenamento e não sua velocidade de operação. Na prática, isso significa que
um processador deve esperar vários ciclos de clock até que a memória atenda uma requisição
para leitura e escrita.
Existem duas maneiras de tratar essa questão:
- Na mais simples, as operações de leitura da memória devem ser iniciadas sempre que
o processador encontrar uma instrução de READ. Mesmo com a operação de leitura iniciada, o
processador deve continuar seu processamento, só parando se uma instrução tentar usar a
palavra requisitada.
- Outra solução é fazer com que o compilador gere seu código, evitando que instruções
usem os valores requisitados à memória antes que estes valores estejam disponíveis,
impedindo assim a parada do processador. Na verdade, no momento da carga (LOAD) o que é
feito é a geração de uma instrução NOP (no operation), instruções que nada fazem senão
gastar o tempo do processador, substituindo a parada do hardware.
Acontece que para resolver esse problema, as memórias precisam ser implementadas
dentro do chip do processador. Assim sendo, para não aumentar o tamanho do chip do
processador com a colocação de muita memória, que acarretaria um custo muito alto e
mudança em toda a arquitetura, a escolha foi colocar uma pequena quantidade de memória
rápida dentro do chip. Algumas técnicas combinaram memórias pequenas e rápidas com
memórias grandes e lentas para que o computador opere com velocidade a um custo razoável.
A memória pequena e rápida ficou conhecida como memória cache.
Este nome veio do Francês Cacher que quer dizer escondido/esconder. Seu princípio
básico é otimizar o tempo de resposta da memória RAM. As palavras de memória mais usadas
pelo processador devem permanecer armazenadas na cache. Quando o processador precisar de
uma palavra, ele primeiro busca essa palavra na cache. Somente se ela não estiver armazenada
na cache é que se dará a busca na memória principal.
6 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 4 -­‐ Funcionamento do Cache
A memória cache pode operar em dois modos:
a) Modo Exclusivo:
- Conteúdo da L1 não está na L2 que não está na L3.
- Aumento da capacidade de armazenamento.
- Permite leitura e escrita.
b) Modo Inclusivo:
- L1 está na L2 que está na L3.
- O conteúdo das caches mais internas está sempre nas caches mais externas.
- Dados somente leitura.
O sucesso desse esquema depende da fração de acessos satisfeitos pela cache.
Normalmente as operações acessam palavras consecutivas ou executam vários loops. A
constatação de que as referências à memória são satisfeitas deu origem a um princípio
conhecido como princípio da localidade de referência, que dá base teórica à operação dos
sistemas de memória modernos, orientados para o uso intenso de cache. Dessa forma é
comum observarmos quando uma palavra é trazida para a memória cache vir junto dela as
palavras vizinhas que com certeza serão usadas em breve.
O princípio da localidade de referencia pode ser:
- Temporal: Grande chance da informação ser usada novamente a seguir. Os
endereços acessados recentemente tem grande chance de serem acessados em um futuro
próximo.
7 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Espacial: Grande chance das informações próximas serem usadas. Endereços
próximos aos acessados recentemente tem grande probabilidade de serem acessados no futuro
próximo.
O projeto de memórias cache está se tornando um assunto de fundamental importância
para os processadores de alto desempenho. Uma das questões mais discutidas é o tamanho da
cache. Quanto maior ela for, melhor a sua performance e conseqüentemente mais alto seu
custo.
Outra questão a ser considerada no projeto de cache é se as instruções devem
permanecer em uma cache unificada. No entanto, a tendência atual é se utilizar cache
divididos, uma cache para instruções e outra para dados, conhecido com o arquitetura de
Harvard.
Figura 5 -­‐ Arquitetura de Harvard
3.1. Níveis de cache
Foram desenvolvidos em resposta à uma das consequências ao problema do gargalo de
Von Newmann.
A divisão em níveis decorre da demanda à memória por velocidade, altíssimas taxas de
transferência e baixa latências. Dessa forma, é muito difícil e caro construir memórias cache
com estas características, então elas são construídas em níveis que diferem na relação tamanho
x desempenho.
- L1: A menor delas, mais rápida e mais cara. Alguns projetos a dividem em dados e
instruções (Arquitetura de Harvard).
- L2: Supre as deficiências de tamanho da L1 e acabou por tornar-se um trunfo nas
arquiteturas modernas por mais desempenho.
8 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- L3: Proposta pela AMD, apresenta mais um nível de maior tamanho e menor
desempenho.
Segundo Stallings, 3 Mb oferece 98% do aumento de desempenho.
3.2. Mapeamento
3.2.1. MAPEAMENTO DIRETO
Cada bloco da memória principal tem uma linha previamente definida onde será
armazenado.
3.2.2. MÉTODO ASSOCIATIVO TOTAL
Oposto do mapeamento direto, não existe posição fixa para cada bloco de memória em
cache. É um hardware mais complexo com aumento do custo e complexidade.
3.2.3. MÉTODO ASSOCIATIVO EM GRUPO
Tenta resolve o problema de conflito de blocos na mesma linha e o problema de custo
da comparação do campo tag. Esta é uma solução hibrida.
3.1. Organização Típica de uma Memória Cache
Como o número de linhas de memória é menor que o número de blocos da memória
principal, é necessário um algoritmo para mapear os blocos da memória principal, em linhas da
memória cache. A escolha da função que efetua esse mapeamento determina como a memória
cache é organizada. Existem diversas técnicas usadas para esse mapeamento, sempre
utilizando como base uma estrutura geral mostrada a seguir.
9 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 6 – Estrutura do Cache
- A memória cache pode conter 64 Kbytes;
- Os dados são transferidos entre a memória principal e a memória cache em blocos de 4 bytes.
4. TIPOS DE MEMÓRIA
Até o início dos anos 1990, as memórias eram fabricadas em um único chip. A
densidade dos chips cresceu ao longo do tempo de 1 KBit para cerca de 1Mbit. Os primeiros
computadores tinham soquetes vazios onde o usuário podia plugar chips adicionais de
memória.
Atualmente, o sistema de memórias está organizado de maneira diferente. Um grupo de
chips é montado em uma placa de circuito impresso, e vendido como uma unidade de memória.
Essa unidade é chamada de SIMM (Single Inline Memory Module) ou de DIMM (Dual Inline
Memory Module), dependendo da existência de uma linha de conectores em um dos lados da
placa (SIMM) ou em ambos os lados da placa (DIMM).
Os notebooks usam uma DIMM fisicamente menor, chamada de SO-DIMM (Small Outline
DIMM). Tanto as memórias SIMM como as DIMM vêm com um bit de paridade ou com bits
para correção de erros. Porém, como as estatísticas mostram que a taxa de erro de um
10 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
desses módulos é muito baixo (1 erro a cada 10 anos), a grande maioria dos computadores não
implementa nem detecção de erros e muito menos correção de erros.
Figura 7 -­‐ Memória SIMM
Além dessas, outros tipos de memórias devem ser consideradas:
- SIMM/72 – Possui 72 conectores. Utilizada em processadores 486, Pentium e
superiores é um módulo SIMM de 32 bits, encontradas, por exemplo, nas versões de 4 MB, 8
MB, 16 MB e 32 MB. No caso de uma máquina definida como de 64 bits*, como o Pentium,
essas placas são usadas aos pares, cada uma delas acessando metade dos bits necessários a
uma operação com a memória.
- DIMM/168 – Possui 84 conectores banhados a ouro de cada lado, perfazendo um
total de 168 conectores. É um módulo de 64 bits. A capacidade está acima de 64 MB. Os
primeiros eram alimentados com 5V e usavam memórias como FPM e EDO. Os mais modernos
são alimentados com 3,3V e usam memórias SDRAM.
- RIMM (Rambus In Line Memory Module) - Esses módulos são padronizados pela
Rambus para a utilização de memórias RDRAM.
Figura 8 -­‐ Memória RIMM
- DDR (Double Data Rating) - é a tecnologia que substituiu as tradicionais memórias
DIMM de 168 pinos. É um tipo de memória baseado na tecnologia SDRAM. Podem realizar o
dobro de operações por ciclo de clock.
11 ARQUITETURA DE HARDWARE
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Exemplo:
Uma memória DDR de 266 MHz trabalha, na verdade, com 133 MHz. Como realiza duas
operações por vez, é como se trabalhasse a 266 MHz (o dobro).
- Dual DDR - Baseia-se na idéia: em vez de utilizar uma única controladora para
acessar todos os slots de memória da placa-mãe, por que não usar duas controladoras ao
mesmo tempo? Essa é a principal diferença do esquema Dual DDR.
- DDR 2 - É o acrônimo de Double Data Rate 2 Syncronous Dynamic Random Acess
Memory. Dual In-line Memory Module significa que os módulos fazem contatos pelos seus dois
lados, em contraste aos antigos módulos SIMM (Single In-line Memory Module). Syncronous
Dynamic Random Acess Memory significa que a memória possui acesso aleatório síncrono e
dinâmico. O termo sincronia é utilizado para indicar que a memória e processador possuem
clocks coincidentes, o que faz aumentar o desempenho em comparação com a antiga
tecnologia EDO em 25%. O termo dinâmico é uma referência à estrutura dos chips, que são
formados por uma matriz de capacitores que precisam ser recarregados constantemente.
Double Data Rate significa que o tráfego é de dois dados por pulso de clock. O número 2
simboliza o conjunto de melhorias do novo padrão Não é compatível com placas-mãe que
trabalham com memória DDR.
- DDR 3 - é uma melhoria sobre a tecnologia precedente DDR2 SDRAM. O primeiro
benefício da DDR3 é a taxa de transferência duas vezes maior que a taxa da DDR2, de modo
que permite taxas de barramento maiores, como também picos de transferência mais altos do
que as memórias anteriores. A memória DDR3 consome cerca de 30% menos energia, se
comparado aos módulos DDR2. Trabalha com voltagem de 1.5 V, menor que a 1.8 V da DDR2
ou os 2.5 V da DDR. O uso de voltagem 1.5 V funciona bem com a tecnologia de chips de 90
nanômetros da DDR3. O principal benefício da DDR3 vem da alta taxa de transferência, possível
graças ao buffer de 8 bits; diferente dos 4 bits da DDR2 ou dos poucos 2 bits de buffer da DDR.
Os módulos da DDR3 podem ainda transferir dados numa taxa entre 800 e 1600 MHz, usando
ambos estados de um clock de 400/800 MHz.
12 
Download

Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br