PCF-3

Questões comentadas, artigos e notícias

Software Illustrated: Chipsets de Placa-mãe e Mapeamento de Memória

Posted by papacharliefox3 em 03/02/2009

Este post trata-se de tradução parcial e livre de um dos artigos da série “Software Illustrated”, publicada no blog do Gustavo Duarte. Erros e comentários são bem vindos!

A idéia do primeiro post da série é descrever o layout das placas-mães baseadas em plataforma Intel, como a CPU acessa a memória e o mapa de memória de sistema.

Para começar, olhemos como um computador Intel é é interligado internamente (principais componentes):

As pontes Norte e Sul compõem o Chipset

Olhando para a imagem, é crucial saber que a CPU não faz idéia do que está conectada a ela. O processador ‘conversa’ com o mundo externo através de seus pinos, sem se importar com o que existe externamente. Não importa o tipo de dispositivo que irá se comunicar com a CPU, seja uma torradeira ou um roteador; só existem 3 maneiras de comunicação com o exterior: espaço de endereçamento de memória, espaço de endereçamento de entrada/saída (I/O) e interrupções. O escopo deeste artigo resume-se apenas à placa-mãe e memória.

Na placa-mãe, o front-side bus (FSB) é o gateway que liga a CPU ao mundo através da ponte Norte. Toda vez que a CPU necessita ler ou escrever dados em memória isto é feito através desse caminho (barramento). Utiliza-se alguns pinos para transmitir o endereço físico de memória o qual deseja-se ler ou escrever enquanto outros pinos enviam o valor para ser escrito ou recebem valor para ser lido.

Um processador Intel Core 2 QX6600 possui 33 pinos para transmitir endereços de memória física (2^33 localizações de memória) e 64 pinos para enviar ou receber dados (um caminho de dados em blocos de 8 bytes). Isso permite o endereçamento físico de até 64 GB de endereços de memória (233 localizações * 8 bytes) ainda que a maioria dos chipsets só tratam até 8GB de RAM.

Agora começam os problemas. Costumamos apenas pensar em RAM quando falamos de memória, programas leem e escrevem a todo instante. De fato a maioria das requisições do processador são direcionadas aos módulos de memória RAM utilizando a ponte Norte. Mas não são todas. Os endereços de memória física também são utilizados para comunicação vários dispositivos na placa-mãe (entrada e saída mapeada em memória). Esses dispositivos podem ser placas PCI ou mesmo a memória flash que armazena a BIOS.

Quando a ponte Norte recebe uma requisição de memória física ela decide qual caminho será utilizado: deve essa requisição ir para a RAM? Para a placa de vídeo? Essa decisão (caminho) é tomada através do mapa de memória. Para cada região de endereços de memória física, o mapa de memória sabe a que dispositivo pertence determinada região. O bloco de endereços são mapeados para a RAM, mas quando esses não são, o mapa de memória informa ao chipset qual dispositivo deve responder ao endereço requisitado. Esse mapeamento de endereços de memória fora da RAM causam o clássico buraco em memória entre 640KB e 1MB. Um buraco maior ainda instala-se quando endereços são reservados para placas de vídeo e outros dispositivos PCI. É por isso que SO’s 32bits possuem problemas para endereçar 4GB de memória RAM. No Linux, o arquivo /proc/iomem mostra perfeitamente o range disponível para os mapeamentos. Coloquei um exemplo abaixo que não contém no artigo original para facilitar o entendimento dos leitores pouco familiarizados com Linux:

[inode@testbox~]$ cat /proc/iomem
00000000-0009f7ff : System RAM
00000000-00000000 : Crash kernel
0009f800-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000ca000-000cafff : Adapter ROM
000cb000-000cbfff : Adapter ROM
000f0000-000fffff : System ROM
00100000-0feeffff : System RAM
00400000-0060bebb : Kernel code
0060bebc-006e69db : Kernel data
0fef0000-0fefefff : ACPI Tables
0feff000-0fefffff : ACPI Non-volatile Storage
0ff00000-0fffffff : System RAM
20000000-2000ffff : 0000:00:11.0
20010000-2001ffff : 0000:00:12.0
20020000-20027fff : 0000:00:0f.0
20028000-2002bfff : 0000:00:10.0
e8000000-ebffffff : 0000:00:00.0
ec000000-ec7fffff : 0000:00:0f.0
ec800000-ec800fff : 0000:00:10.0
f0000000-f7ffffff : 0000:00:0f.0
fec00000-fec0ffff : reserved
fee00000-fee00fff : reserved
fffe0000-ffffffff : reserved

O diagrama abaixo mostra um mapeamento típico dos primeiros 4Gb de memória física encontrado em um PC Intel:

Layout dos primeiros 4GB de memória

Layout dos primeiros 4GB de memória

Os reais endereços e intervalos dependem da placa-mãe e dispositivos conectados a ela, mas a maioria dos sistemas com Core 2 parecem com esta figura. Todos os endereços em marron não são mapeados como memória RAM. Lembre-se que esses endereços físicos são utilizados em barramentos da placa-mãe. Dentro da CPU, os endereços de memória são lógicos e precisam ser traduzidos pela CPU em endereços físicos antes da memória ser acessada no barramento.

As regras para esta tradução de endereços são complexas e dependem do modo em que a CPU está rodando (modo real ou protegido[32 ou 64 bits]). Independente do mecanismo de tradução, a CPU determina quanto de memória poderá ser acessado. Por exemplo, no caso de 32 bits, somente 4GB poderá ser fisicamente endereçado (existe a extensão PAE, ignorada por enquanto). Visto que mais ou menos 1Gb superior é mapeado para dispositivos da placa-mãe, a CPU pode, efetivamente, utilizar em tornode 3GB de RAM (no Windows Vista isso pode ser até menos). Se em modo real, apenas 1MB poderá ser mapeado (o modo real era o único disponível nos modelos mais antigos da Intel). Por outro lado, máquinas 64bits podem endereçar fisicamente até 64GB de RAM apesar de poucos chipsets suportarem isso. No modo de 64bits é possível utilizar endereços físicos acima do total de memória RAM disponível no sistema, incluindo as regiões ‘roubadas’ pelos dispositivos da placa-mãe, isso é feito com a ajuda do chipset.

Isso é o suficiente para entender o próximo artigo que explicará o processo de boot em detalhes.

Uma resposta to “Software Illustrated: Chipsets de Placa-mãe e Mapeamento de Memória”

  1. […] por papacharliefox3 em 06/03/2009 No post anterior da série, fiz uma tradução livre do artigo do Gustavo Duarte sobre chipset de placa-mãe e […]

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: