A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

4. A Memória do Computador

Sab

26

Mai

2007


11:21

(32 votos, média 4.22 de 5) 


Nível avançado MÓDULO 4 do SO Numaboa

A memória do computador é uma área de armazenamento temporário onde as informações em uso - dos programas e dados - são mantidas enquanto são utilizadas. A memória da máquina é composta por uma porção fixa, que faz parte da placa-mãe, sobre a qual falaremos neste tutorial. Além disto existe a memória RAM (Random Access Memomry - Memória de Acesso Randômico), que é uma (ou mais) plaquinha com chips que pode ser encaixada em soquetes especiais da placa-mãe.

Nos processadores mais novos que os 8086/8088, a memória é capaz de guardar uma fileira de bits muito longa. Nas máquinas citadas, o máximo eram 8.388.608 bits.

A organização dos bits na memória

Vamos fazer algumas contas: se os chips de memória (ROM + RAM) podem guardar até 8.388.608 bits e se 1 byte corresponde a 8 bits, então... os chips podem armazenar 1.048.576 bytes, o mesmo que dizer 1 megabyte. Mas porque estes números quebrados?

Acontece que o computador é essencialmente binário. Kilo no sistema decimal representa 1000 (10 elevado a 3 é igual a 1000), mas convencionou-se que kilo no sistema binário corresponda a 1024 (2 elevado a 10 é igual a 1024). Só para refrescar a memória, veja a tabela abaixo:

Termo PotênciaValorValor aproximado
1 kilobyte (Kb) 2^101.024mil
1 megabyte (Mb) 2^201.048.576milhão
1 gigabyte (Gb) 2^301.073.741.824bilhão
1 terabyte (Tb) 2^401.099.511.627.776trilhão

Mas vamos voltar ao assunto principal. A área da memória, a partir dos processadores 8086 e 8088 (os jurássicos XT), tinha capacidade de armazenar 1 megabyte e a posição de cada byte (um conjunto de 8 bits) dentro da memória podia ser identificada: convencionou-se que seria de 0 a 1.048.575, o que dá o total de 1.048.576 posições. Acontece que os processadores possuíam apenas registradores de 16 bits e os 16 bits fornecem, no máximo, o número 65.535 (1111 1111 1111 1111 binário = 65.535 decimal). Era pouco número para muito espaço de memória. A solução foi usar dois registradores.

Dois registradores de 16 bits dão um total de 32 bits. Agora era bit demais para para pouca memória porque 1 megabyte pode ser expresso com apenas 20 bits. A tabela acima mostra que 2 elevado a 20 corresponde a 1 megabyte, o que é o mesmo que dizer que o binário 1111 1111 1111 1111 1111 é igual a 1.048.575. O circo estava montado - como referenciar os endereços da memória?

Blocos de memória

Como já foi explicado no Curso relâmpago de Assembly, o jeito encontrado foi "lotear" a memória em blocos, cada um deles com 64 Kb (ou 65.536 posições numeradas de 0 a 65.535). Agora, para indicar a posição de um byte na memória, precisava-se de duas referências: o bloco e a posição dentro do bloco.

Fazendo mais algumas contas, verifica-se que 1 Mb pode ser dividido em 16 blocos de 64 Kb. Veja como a continha é fácil:

   1 Mb => 1.048.576 bytes
   64 Kb => 64 x 1.024 = 65.536 bytes
   1 Mb / 64 Kb => 1.048.576 / 65.536 = 16 Blocos

Já que a memória estava toda arrumadinha em blocos, resolveram botar ordem na casa: cada bloco deveria conter dados com uma função definida. A tabela ao lado mostra o que foi convencionado para ser usado pelo sistema operacional DOS:

Bloco Dados
01 Área de memória para o usuário (64 Kb)
02 Área de memória para o usuário (128 Kb)
03 Área de memória para o usuário (192 Kb)
04 Área de memória para o usuário (256 Kb)
05 Área de memória para o usuário (320 Kb)
06 Área de memória para o usuário (384 Kb)
07 Área de memória para o usuário (448 Kb)
08 Área de memória para o usuário (512 Kb)
09 Área de memória para o usuário (576 Kb)
10 Área de memória para o usuário (640 Kb)
11 Memória de Vídeo
12 Memória de Vídeo
13 Área de Extensão da ROM
14 Área de Extensão da ROM
15 ROM-BIOS do sistema
16 ROM-BIOS do sistema e ROM-BASIC

É preciso ficar claro que não existe uma barreira física entre os blocos. A memória continua sendo uma fileira contínua de bytes - são apenas os endereços que delimitam as áreas. Os blocos superiores são os da memória para os usuários e os blocos inferiores são os da memória ROM, somente para leitura e onde o usuário não mexe (ou não deveria mexer smile ).

Informações adicionais