Você está na página 1de 17

Organização da Memória Primária

A memória é a parte do computador na qual os programas e dados são a


rmazenados. Ela é formada por um conjunto de células endereçáveis cap
azes de armazenar bits de informação.

Cada célula tem um número associado a ela, conhecido como endereço


da célula, por meio do qual os programas podem referenciar a célula.

Para acessar um dado ( seja para leitura ou escrita ), o endereço deve s


er enviado do processador para a memória.
Através do endereço o dado é localizado e selecionado para uma transfer
ência.
Só é possível ler um dado, ou escrever um dado na memória, se o seu e
ndereço houver sido informado antes. Porque é o endereço que selecion
a uma única célula na memória.

A célula é a menor unidade endereçável de um computador.


Nos últimos anos quase todos os fabricantes de computadores padroniza
ram o tamanho da célula em 8 bits, chamando essa célula de byte. Os b
ytes são agrupados em palavras.
O computador com palavra de 32 bits tem 4bytes/palavra enquanto que
um computador com palavra de 64 bits tem 8 bytes/palavra.
A maioria das instruções de uma máquina opera sobre a palavra que a
CPU pode processar.
Quando dizemos que um processador é de 64 ou 32 bits, estamos dizen
do que esse é o tamanho da palavra do processador.
Geralmente a palavra do processador é igual ao número de bits dos seus
registradores e ao número de vias dos seus barramentos internos.
Palavras compostas por mais de um byte são denominadas da seguinte f
orma:

Byte : 8 bits

Word : 16 bits ou 2 bytes.

Dword : ( double word ) 32 bits ou 4 bytes.

Qword: ( quad word ) 64 bits ou 8 bytes.

Temos 3 tipos de sinais nas vias de barramentos que conectam o proce


ssador à memória:
- vias de dados

- vias de endereço

- vias de controle.

As vias de dados movimentam os dados que importam. Os dados que


são provenientes da memória ( em caso de uma operação de leitura ), o
u que são provenientes do processador para a memória ( em caso de op
eração de escrita ).

As vias de endereço envia sinais digitais do processador para a memór


ia, já é o processador que seleciona o endereço a ser acessado. Durante
a execução de uma instrução de um programa, o endereço pode, por ex
emplo estar contido no código da instrução, ou ser calculado durante a e
xecução do programa.

As vias de controle enviam sinais do processador para a memória ou vi


ce-
versa. Definem, por exemplo, se o processo a ser executado será uma le
itura ou uma escrita na memória. Também podem informar se a memóri
a ( ou um outro dispositivo ), está pronta ou não para iniciar uma comun
icação com o processador.

Memória primária

A memória é a parte do computador onde são armazenados programas e


dados. A memória primária também é chamada de memória principal o
u RAM ( sigla de Random Access Memory, ou Memória de Acesso Aleatór
io) . Ela possui esse nome porque células de endereços muito diferentes
podem ser acessados de forma consecutiva consumindo o mesmo tempo
que células de endereços vizinhos. Essa denominação foi estabelecida p
ara diferenciar a RAM das memórias de disco e fita, cujo acesso é seque
ncial ( principalmente no caso de uma fita, o acesso a conteúdos com en
dereços consecutivos é muito mais rápido, por não haver a necessidade
de rebobinar a fita ).

A memória RAM depende de fornecimento de energia para manter os da


dos, portanto é uma memória volátil. Na ausência de alimentação, todo
o conteúdo é perdido. Já uma memória não volátil é aquela que retém d
ados mesmo na ausência de alimentação, como é o caso da ROM, EEPRO
M e memória Flash. Mesmo apesar de todas essas memórias serem na r
ealidade de acesso aleatório, a sigla RAM é utilizada apenas para referen
ciar memórias voláteis.

A memória principal é utilizada para armazenar os programas em execuç


ão e os dados em uso por estes programas.

A memória principal é costumeiramente volátil, ou seja, mantém os dad


os armazenados apenas enquanto o equipamento está energizado.

Bits, bytes e terabytes

A unidade básica de memória é o dígito binário ou bit. Um bit consegue


armazenar apenas o valor 0 ou 1, e é o bloco básico de informações.
Um dos agrupamentos mais comuns de bits é o byte, que tem 8 bits de
comprimento.

Quando se trata de bits e bytes, existe certa confusão quanto aos múlti
plos que podem ser usadas para expressar estas quantidades.

Como o bit é um valor binário, os múltiplos são potências de 2.

Um kilobyte, portanto não são exatamente 1.000 bytes (103), mas 1.02
4 (210). De modo semelhante 1 MB contém 1.048.576 bytes (220) e nã
o 1.000.000 de bytes (106).

Os outros sufixos mais comuns em se tratando de memória são Giga: 1


GB equivale a 230 – 1.073.741.824 bytes e Tera: 1 TB equivale a 240 –
1.099.511.627.776 bytes.
Na tabela abaixo temos os prefixos decimais mais comuns, lembrando q
ue em se tratando de memória, devemos usar a base binária ao invés da
base 10.

Os principais sufixos métricos

Endereços de memória

Para que seja possível utilizar a memória, deve ser possível gravar e ler
informações nela.

E para que isto seja possível, a memória deve ser organizada de modo
que cada unidade utilizável de memória tenha um endereço único.

Os bits de memória são organizados em células, e cada célula tem um e


ndereço único.

O tamanho da célula varia de acordo com o sistema, mas o mais comum


é que a célula tenha 8 bits (1 byte) de comprimento.

A célula é a menor unidade endereçável de memória.


Três formas de organizar 96 bits de memória

Outro conceito importante é a palavra. Uma palavra é o tamanho da uni


dade de dados que é transferida da memória para o processador. Quand
o falamos que um computador é de 32bits ou 64bits, estamos nos referi
ndo ao tamanho da palavra deste processador.

Ou seja, um computador de 32 bits consegue transmitir 4 bytes entre a


memória e o processador, enquanto que um computador de 64 bytes tra
nsmite 8 bytes.

Este conceito é importante, por que se o processador recebe um valor d


e 8 bytes da memória, todos os seus registradores tem que ter no mínim
o este comprimento.

Isso implica também na quantidade de memória que um computador po


de suportar.

Se o registrador dedicado a tratar endereços de memória tem 1 bit de co


mprimento, o computador só suportará 2 endereços ou duas células (0 e
1).

Se este registrador tiver 32bits, a quantidade de células endereçáveis se


rá de 4.294.967.295. Em um computador com células de 1 byte, isso eq
uivale a 4GB de memória.

Por outro lado, se esse registrador tiver 64bits, a quantidade de endereç


os possíveis sobe para 18.446.744.073.709.551.615, ou aproximadame
nte 18,45 Exabytes, uma quantidade de memória impensável nos padrõ
es tecnológicos atuais.
Memória Cache

A localização lógica da memória cache

Existem várias formas de implementar a memória cache de processador,


cache específicos para instruções e dados, cache de múltiplos níveis, ma
s o conceito básico é o mesmo: ao deparar com uma necessidade de um
a informação da memória principal, o cache será consultado antes, se a i
nformação estiver lá ela já é devolvida para o processador (cache hit). S
e a informação não estiver no cache (cache miss), ela é trazida da mem
ória principal para o cache e de lá para o processador.

A memória cache, assim como a memória principal, também é volátil. En


tretanto, a tecnologia empregada em uma memória cache é, a nível de
microeletrônica, diferente da tecnologia da memória principal.

A cache é composta por uma memória mais rápida ( de menor tempo de


acesso ), constituída por portas lógicas compondo circuitos digitais com
realimentação denominados flip-
flops. Essa tecnologia é denominada memória RAM estática ou SRAM ( S
tatic Random Acess Memory ). Já a memória principal, emprega uma tec
nologia mais lenta, conhecida como DRAM ( Dynamic Random Access Me
mory ). A DRAM é mais lenta, entretanto possui um custo por bit muito
menor do que a SRAM. Sendo assim, a DRAM está disponível em maior q
uantidade. A DRAM é composta por microcapacitores que retêm carga el
étrica para representar bits ( cada capacitor pode estar carregado ou des
carregado, armazenando, portanto 0 ou 1 ). Como os capacitores tende
m a descarregar, a DRAM necessita de uma varredura periódica para ref
orçar os dados armazenados, denominada refresh. Como capacitores pos
suem um transiente ( tempo mínimo para carregar ou descarregar ) o te
mpo de acesso à DRAM é muito maior do que a uma SRAM.

Pelo fato de a SRAM ser composta por flip-


flops para armazenar cada bit, sendo que cada flip-
flop necessíta de um número maior de transistores do que a DRAM, esta
possui uma maior densidade ( maior capacidade de armazenamento com
menor número de transistores ), o que reduz a sua complexidade, seu c
usto e o espaço físico em um chip.

Entretanto, a DRAM funciona numa velocidade muito inferior à do proces


sador, por que os circuitos internos de um microprocessador são compos
tos por portas lógicas e flip-
flops. De nada adianta ter uma memória DRAM de alta capacidade de ar
mazenamento, e um microprocessador rápido, se este ficar a maior part
e do tempo ocioso esperando a memória DRAM responder em uma opera
ção de escrita ou de leitura. Nesse caso, pode-
se dizer que a DRAM funciona como um gargalo, porque é o componente
que reduz o fluxo de processamento.

Usar apenas uma SRAM, por outro lado, eleva o desempenho de um com
putador. Entretanto, o custo de uma SRAM de alta capacidade é inviável.

A solução criada pelos projetistas foi criar uma hierarquia de memórias.


Imagine a seguinte situação: Dados ou instruções de programas que são
acessados com maior frequência são armazenados na maior parte do te
mpo em uma SRAM. Enquanto a maior parte dos dados e instruções, qu
e são acessados com menor probabilidade ficam a maior parte do tempo
em umaDRAM mais lenta, embora de maior capacidade e menor custo,
Nesse caso, é fácil perceber que o tempo médio de acesso pode ser bem
menor do que usando apenas uma DRAM, e o custo é bem menor do qu
e utilizando apenas uma SRAM. Se tal sistema for bem balanceado, tem-
se o desempenho próximo à de uma SRAM, com custo próximo à de um
a DRAM.
A memória SRAM, ligada ao processador, e com velocidade compatível,
é denominada memória cache.

Inicialmente, a memória cache era colocada em um microchip separado


do microprocessador. Posteriormente, a cache foi incorporada ao chip do
processador, porque utilizando o barramento interno para a comunicaçã
o entre o processador e a cache, o desempenho aumenta.

Os dados acessados são copiados da memória principal para a cache, em


bora nessa situação, a memória principal ainda precise ser acessa, atras
ando o sistema. Embora isso aconteça com menor frequência.

Uma solução para aumentar ainda mais o desempenho é incorporar uma


segunda memória cache em um chip próximo a um microprocessador q
ue já possui uma memória cache interna. Esse arranjo é denominado me
mória cache em níveis. A memória cache interna, ou L1 é menor, e mais
rápida, porque utiliza os barramentos internos do chip para se comunica
r com o núcleo do microprocessador. Já a cache externa, ou L2 é maior,
embora mais lenta que a L1 e mais rápida que a DRAM da memória princ
ipal. Entretanto um terceiro nível de cache, L3, pode ser adicionado. Cad
a novo nível é maior e mais lento do que o anterior. Principalmente porq
ue se comunica com uma outra memória ainda mais lenta. Quanto meno
r a diferença de velocidade entre duas memórias que se comunicam, me
nor tende a ser o tempo ocioso da memória mais rápida. E mais toleráve
l torna-
se o gargalo das memórias mais lentas. Daí o fato de haver mais de um
nível de memória cache.

A viabilidade das memórias caches se devem ao fato de a probabilidade


de um dado ser acessado aumenta se esse dado foi acessado recenteme
nte, ou se um dado com endereço vizinho também foi acessado. Esse é
o conhecido princípio da localidade. O primeiro caso é a localidade no te
mpo, e o segundo, a localidade no espaço.

Quando o processador acessa um conteúdo da memória principal, todo u


m bloco de memória, contendo aquele dado, é copiado para a memória c
ache. Esse bloco é denominado uma linha da cache. O processador não
acessa a memória principal diretamente. Apenas a cache.
Aí reside um problema, quando o processador altera um dado presente n
a cache. Como esse dado é o espelho de um endereço presente na mem
ória principal, esta deve ser atualizada. Existem basicamente duas polític
as de atualização da memória principal: A política write-
throught atualiza a memória principal sempre que a cache é atualizada.
Portanto ela pode representar um novo gargalo. Jà a política write-
back apenas atualiza a memória principal quando o bloco presente na ca
che for substituído por outro. Apesar de a política write-
back apresentar melhor desempenho, em sistemas muti-
processadores com caches individuais, há o risco de um processador ace
ssar um dado de um endereço, cujo correspondente foi alterado na cach
e de outro processador. E, portanto, o valor acessado na memória princi
pal estaria desatualizado.

Quanto à arquitetura, a cache pode empregar mapeamento direto ou ma


peamento associativo. O mapeamento direto é mais simples, e consiste
em fixar as faixas de endereços correspondentes a cada linha da memóri
a cache. Embora mais simples, essa tecnologia é pouco flexível. Porque
há a possibilidade de dados cujos endereços correspondem a uma mesm
a linha da cache, embora de faixas de endereços diferentes serem acess
ados frequentemente. Nesse caso, a memória principal, mais lenta, sem
pre fica sendo acessada. Já empregando um mapeamento associativo, a
s faixas de endereços correspondentes a uma linha podem mudar dinami
camente, o que aumenta a eficiência. O mapeamento associativo por co
njuntos combina as duas formas de mapeamento.

Quando um dado cujo endereço não está referenciado na memória cache


, faz-
se necessária a substituição de uma linha da cache. No caso do mapeam
ento associativo, uma linha deve ser escolhida para ser substituída. Um
algoritmo muito utilizado para realizar tal substituição é o LRU ( Least Re
cently Used ), no qual a linha que foi acessada menos recentemente é su
bstituída. Geralmente ela possui uma menor probabilidade de ser acessa
da novamente, se nos últimos acessos ela não o foi. Outro algoritmo de
substituição é retirar a linha acessada com menor frequência, ou a que f
oi copiada na cache a mais tempo.
Ordenação de Bytes

Os bytes de uma palavra podem ser numerados da esquerda para a di


reita ou da direita para a esquerda. A escolha acarreta implicações muito
sérias e importantes.

Melhor dizendo, a memória de um computador pode estar organizada


de tal maneira que cada palavra pode ser armazenada com o byte mais
significativo no endereço mais alto ou no endereço mais baixo.
O primeiro caso é denominado little endian e o segundo big endian.

A figura1 mostra parte de uma memória de um computador de 32


bits cujos bytes são numerados da esquerda para a direita. A fig. 2 mos
tra a representação da memória de um computador de 32 bits cujos byt
es de uma palavra são numerados da direita para a esquerda. O comput
ador da fig. 1 é chamado big endian, enquanto que o computador da fig.
2 é denominado little endian.

Endereço Big endian Little endian


0 0 1 2 3 3 2 1
4 4 5 6 7 7 6 5
8 8 9 10 11 11 10 9
12 12 13 14 15 15 14 13
16 16 17 18 19 19 18 17
Palavra de 32 bits Palavra de 32 bits
Fig. 1 Fig. 2

Consideramos nas figuras acima, que o número dentro de cada


célula da tabela corresponde ao valor do endereço. No caso de uma pala
vra de 32 bits ser escrita na memória, no endereço 0, em um computad
or big endian, o byte menos significativo é escrito no byte de endereço
mais alto, ou seja, no endereço 3.

Jà no caso de uma palavra de 32 bits ser escrita na memória no endereç


o 0 de um computador little endian, o byte menos significativo é escrito
no byte de endereço mais baixo, ou seja, no endereço 0.

Por exemplo, considere a palavra de 32 bits ( 4 bytes ) hexadeci


mal CADEAD0516. Se essa palavra for escrita no endereço 4 em ambas
as arquiteturas, teríamos:

Endereço Big endian Little endian


0
4 CA DE AD 05 CA DE AD
8
12
16
Palavra de 32 bits Palavra de 32 bits
Fig. 1 Fig. 2
Repare que o byte mais significativo, CA, é escrito no endereço 4 ( byte
menos significativo ) de um computador big endian; e no endereço 7 ( b
yte mais significativo ) de um computador little endian.

Já o byte menos significativo, 05, é escrito no endereço 07 ( mais


significativo ) de um computador big endian; e no endereço 04 ( menos
significativo ) de um computador little endian.

Se, depois de realizar essa escita, fosse realizado um dump da m


emória com um editor hexadecimal, os endereços sempre aumentam da
esquerda para a direita no programa editor. Assim, a ordem que você ve
ria em um computador little endian seria 05ADDECA. Ou seja:

endereço: 04 05 06 07

dado: 05 AD DE CA

Códigos de Correção de Erros

Os dados armazenados na memória dos computadores podem ocasional


mente ser alterados em razão de oscilações na tensão de alimentação ou
outras causas. Para se prevenir contra esses tipos de erro, algumas me
mórias armazenam informações usando um código que permita a correç
ão ou a detecção de erros. Quando esses códigos são usados, é necessár
io acrescentar bits extras a cada palavra de memória, de modo a permiti
r a verificação da exatidão da palavra 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.
Acrescentar bits extras à informação é aumentar a redundância da infor
mação. A informação redundante deve ser uma função da informação úti
l, de tal maneira que em caso de algum bit ser corrompido, a relação fun
cional deixa de existir e um erro é detectado.

Uma forma de se detectar erros é por meio de um bit de paridade adicio


nal. Essa técnica consiste em inserir um bit com valor tal que o número
de bits com valor 1 na sequência seja sempre par ( ou ímpar ). Dessa fo
rma, a mudança de um bit provocada por erro de transmissão leva a um
a alteração na paridade: O número de 1s na sequência passa a ser ímpa
r quando deveria ser par, por exemplo.
Essa forma de detecção de erros foi muito utilizada na transmissão serial
via protocolo RS-
232, utilizado em impressoras antes da tecnologia USB.

Por outro lado, uma forma de se detectar e corrigir o erro provocado pel
a inversão de um bit é o Código de Hamming.
No código de Hamming, para 4 bits de informação útil, por exemplo, out
ros 3 bits de redundância são inseridos na sequência.

O algoritmo de correção de Hamming pode ser melhor compreendido por


meio de uma representação por conjuntos.

Os 4 bits centrais da figura abaixo, constituem a informação útil. Os 3 bi


ts externos correspondem aos bits de redundância, cujo valor é determin
ado de tal maneira que o número de bits de valor 1 em cada círculo seja
sempre par.

Por exemplo, se temos os seguintes 4 bits com informação útil:


Então os 3 bits do código de correção de erro devem ser preenchidos da
seguinte maneira:
Exemplo: No código de Hamming descrito abaixo, descubra qual é o bit
com erro e o corrija:

Resolução: Podemos perceber na figura acima que o único círculo com n


úmero ímpar de bits de valor 1 é o da esquerda. Portanto, o bit com erro
é exclusivo desse círculo. Abaixo, esse bit é corrigido.
Um outro exemplo: Corrija o bit com erro no código de Hamming a segu
ir:
Resolução:

O círculo superior esquerdo possui paridade par, portanto, nenhum bit p


ertencente a ele possui erro.

Os outros dois círculos possuem paridade ímpar, portanto, o e


rro está em um bit na intersecção desses dois círculos, mas que não pert
ence ao círculo da esquerda, cuja paridade está correta.

Você também pode gostar