Computadores XLIII: Localizando a MP A9 – Texto 7 Sítio Fórum PCs /Colunas Coluna: B. Piropo – Publicada em 08/10/2007 http://www.forumpcs.com.br/viewtopic.php?t=221949 Autor: B.Piropo No ponto em que estamos já dispomos de conhecimento suficiente para descobrir onde (em que local da placa-mãe ou das placas controladoras) se situa cada “chip” de memória que ocupa determinados endereços. Ou seja: já podemos unir os conceitos de memória física e memória lógica. Porém, como dissemos no final da < http://www.forumpcs.com.br/viewtopic.php?t=221359 > coluna anterior, certamente a coisa ficará mais clara se dermos nomes aos bois, ou melhor, se dermos números aos endereços. Vejamos então um exemplo prático “montando” o mapa da memória principal de um micro do tipo PC equipado com, digamos, 512 KB de memória DRAM, uma placa controladora de vídeo obedecendo ao padrão CGA e uma placa controladora de disco flexível. Além delas, o micro disporá também de duas placas controladoras adicionais, uma para controle de uma “porta paralela” e a outra para controle de uma “porta serial”, uma configuração bastante comum no início dos anos 80. Veja, na Figura 1, uma foto (obtida no sítio < http://www.yesterpc.com/ > “Yesterpc.com”) que exibe o gabinete aberto deste micro, onde se vê a placa-mãe e, encaixadas nos slots, as cinco placas controladoras acima mencionadas. Figura 1: Placa-mãe e placas controladoras de um IBM PC O que nos interessa saber é: de que tipo são os “chips” que constituem a MP desta máquina? onde (fisicamente) estão situados? (Para acompanhar melhor o raciocínio desenvolvido adiante, consulte o diagrama esquemático exibido na Figura 2, mais abaixo). Comecemos pelo início, como convém: os primeiros endereços, a partir de zero na base do espaço de endereçamento até o endereço 640 K, fazem parte dos primeiros dez segmentos (destinados aos programas) portanto as posições de memória que recebem estes endereços devem, obrigatoriamente, estar situadas em “chips” de memória volátil do tipo RAM (senão, como os programas poderiam escrever neles?). Mas acontece que nosso PC tem 512 KB de memória instalada e nas primeiras placas-mãe de PCs só havia soquetes para receber 256 KB de memória RAM. Onde ficariam os 256 KB restantes? Ora, em uma placa controladora encaixada em um “slot” (reiterando para tornar mais claro: isso não pode acontecer nos micros modernos onde a memória deve necessariamente estar ligada eletricamente ao barramento frontal e os “slots” destinados às placas controladoras estão ligados ao barramento de E/S; mas lembre que nos primeiros PCs havia apenas um barramento onde se conectava tanto a memória quanto os slots das placas controladoras). Então, no nosso exemplo, teríamos que somar a memória RAM instalada na placa-mãe com aquela instalada na placa controladora para, assim, preencher (“povoar”) com “chips” de memória RAM os endereços que vão de zero a 512 K (para ser exato: de zero a [512 K – 1]; pense e descubra o porquê disso). Acima do endereço 512 K somente teremos memória instalada a partir do endereço 640 K, o início da memória de vídeo. Portanto, no mapa da memória, teríamos um “buraco” (um trecho vazio no espaço de endereçamento), correspondente aos endereços de 512 K até [640 K - 1], cujos endereços lógicos existem, mas cujas posições de memória (física) correspondentes não, já que não há “chips” ocupando estes endereços. A partir do endereço 640 K situa-se a memória de vídeo. Placas controladoras de vídeo no padrão CGA eram fornecidas geralmente com somente 16 KB de memória (bons tempos, aqueles...) que ocupavam apenas um pequeno trecho do primeiro dos dois segmentos de 64 KB reservados à memória de vídeo, cujos endereços começam em 640 K (uma imposição do sistema operacional DOS do velho PC). Portanto, acima do endereço 656 K (640 K + 16 KB) haverá outro “buraco” de pelo menos 112 K no espaço de endereçamento (de 656 K até [768 K -1]). Os próximos 128 KB a partir do endereço 768 K são reservados para as rotinas que controlam os periféricos. Elas vinham gravadas de fábrica em um chip de memória não volátil (na verdade, de memória permanente do tipo ROM) localizado na própria placa controladora do periférico. Neste trecho do espaço de endereçamento alguns endereços podem ser ocupados por rotinas de controle de periféricos gravadas em “chips” de memória permanente situados na placa controladora de cada periférico. No nosso exemplo, como o micro não dispõe de nenhum periférico além do acionador de disquetes, estes endereços permanecem vagos. Portanto os endereços do trecho 800 K até [896 K -1], totalizando 96 KB, permanecem vazios já que não há outra placa controladora contendo memória (as rotinas de controle das duas placas adicionais, serial e paralela, fazem parte do BIOS e estão gravadas no chip de ROM BIOS que será discutido adiante). Chegamos, finalmente, aos dois últimos segmentos, reservados egoisticamente pelo sistema operacional para seu uso exclusivo e cujos endereços começam em 896 K. Como nos demais segmentos da memória superior, grande parte deste espaço de endereçamento permanece ocioso. Os primeiros endereços ocupados correspondiam aos chips de memória permanente (memória ROM) que continham as rotinas da linguagem de programação BASIC fornecida com o sistema e ocupavam 64 KB (geralmente vinham em quatro chips de memória ROM de 16 KB cada) correspondentes aos endereços 944 K até [1008 K -1], deixando mais um “buraco” vazio de 48 K no início do trecho final de 128 K. Restam os últimos 16 KB do espaço de endereçamento de memória do PC. Por determinação dos desenvolvedores do sistema operacional DOS, eles devem ser obrigatoriamente ocupados pelas rotinas do BIOS (que incluem as rotinas controladoras das portas paralela e serial) e algumas outras rotinas auxiliares cujo papel é extremamente importante para o processo de inicialização da máquina, sendo responsáveis pelo aparente milagre do “boot”. A peculiaridade é que todas elas (BIOS e rotinas auxiliares) vêm gravadas em um chip de memória permanente do tipo ROM soldado diretamente na placa-mãe (nos micros modernos este chip não é mais do tipo ROM, contém muito mais que as rotinas do BIOS mas, por tradição, ainda é designado como “ROM BIOS”). Bem, se você conseguiu chegar até aqui, parabéns. Tentei explicar as coisas da forma mais elementar possível, mas reconheço que o tema é árido, tem números demais para atrapalhar e a compreensão não é fácil. Mas seu entendimento é crucial para que se possa compreender não apenas o papel (geralmente mal entendido) daquilo que se convencionou chamar de memória principal como também do próprio funcionamento do computador. Com o que vimos até agora podemos unir o “mapa da memória” (lógica) com a localização (física) dos CIs que contêm memória em nosso PC tomado como exemplo. Figura 2: PC – Memória lógica e física Figura 2 exibe uma visão panorâmica da memória, tanto lógica quanto física, do IBM PC. Á esquerda aparece um diagrama esquemático do “mapa da memória principal”, com os trechos “povoados” (ocupados por “chips” que contêm posições de memória) e não “povoados” (marcados como “vagos”). Seria interessante comparar este diagrama com o mostrado na Figura 1 da < http://www.forumpcs.com.br/viewtopic.php?t=221359 > coluna anterior, que exibe os trechos reservados do espaço de endereçamento do PC. À direita da figura aparece o interior do PC usado como exemplo, mostrando sua placamãe e placas controladoras com a localização dos diversos CIs (“chips”) de memória, tanto na placa-mãe quanto nas placas controladoras que os contêm. Note as linhas coloridas que unem os trechos ocupados (preenchidos por chips) do espaço de endereçamento do PC com os chips correspondentes, seja na placa-mãe ou em uma das placas controladoras. E repare na localização e no tipo dos chips que a compõem. Neste ponto já conhecemos razoavelmente a memória principal de nossos computadores e podemos ressaltar os pontos mais importantes deste conhecimento. O primeiro é que, embora o espaço de endereçamento seja um contínuo que se estende desde o endereço zero até o maior suportado pela máquina (aquele expresso no maior número binário que cabe nas linhas de endereço do barramento frontal, no caso do IBM PC de nosso exemplo, o endereço [1024 K -1]), nem todo ele está preenchido por memória física (na verdade quase nunca está), havendo intervalos vagos, cujos endereços não correspondem a posições de memória física. Quando o controlador de memória tenta acesso a um destes endereços, o sistema emite uma mensagem de erro e segue adiante. O segundo ponto importante é que, ao contrário do que muita gente pensa (a ponto de usar indiferentemente as expressões “memória principal” e “memória RAM” como se tivessem o mesmo significado), nem toda a memória principal é constituída por “chips” de memória volátil do tipo RAM. Como vimos, alguns trechos do mapa de endereços são preenchidos por “chips” de memória não volátil (EPROM, EEPROM ou “flash” sobre as quais falaremos adiante) ou de memória permanente ou semi-permanente (ROM ou PROM). Quando o controlador da memória tenta ler o conteúdo de um destes endereços, o dado é fornecido sem retardo já que todas estas memórias permitem leitura do tipo acesso aleatório. Mas quando tenta escrever em um deles, uma mensagem de erro é emitida e o processamento prossegue, já que o conteúdo destes CIs não pode ser alterado. Pronto. Agora já podemos esclarecer o mistério do boot. Na próxima coluna, naturalmente. Coluna anterior: < http://www.forumpcs.com.br/viewtopic.php?t=221359 > Computadores XLII: Placas controladoras do PC Próxima coluna: Em breve