Micro Cosmo
Volte
01/07/96

< Um Estouro >


Quando um carro ultrapassa a capacidade do odômetro, rodando mais de cem mil quilômetros, seu odômetro “estoura” e volta a marcar zero. O carro continua rodando numa boa, mas a quilometragem começa a contar novamente de zero.

Pois no velho XT e sua CPU 8088, quando se tentava ultrapassar o limite do primeiro mega, acontecia algo semelhante. Vamos a um exemplo prático para entender melhor: suponhamos que estivessem sendo executadas instruções armazenadas lá no final do campo de endereçamento. Digamos: dez posições abaixo do último endereço. Pois bem: se as instruções fossem executadas sequencialmente, depois da décima o ponteiro de instruções (uma espécie de “odômetro” interno usado pela CPU para registrar o endereço da próxima instrução a ser executada) “estouraria” e voltaria a apontar para o zero. Este “estouro”, em jargão técnico, denomina-se “overflow” - um termo que costuma aparecer em mensagens de erro pavorosas e incompreensíveis sempre que a máquina trava por estouro de memória.

Mas no micro, ao contrário do carro que prossegue como se nada houvesse ocorrido, o desastre é certo. Porque nos endereços iniciais do campo de memória estão armazenados dados, não instruções. Dados tão importantes para o funcionamento do sistema que ficam nos endereços mais nobres (pouco importa quais sejam, mas só para satisfazer sua curiosidade: são os chamados “vetores de interrupção”). A questão é que depois de um “estouro” de memória a CPU não “percebe” que voltou aos endereços iniciais. Como tudo o que fez foi somar um a um endereço alto, ela presume que continua na faixa de endereços próximas a 1Mb e interpreta os dados como se fossem instruções. Não precisa ser um guru em informática para perceber que um troço destes não pode dar certo. Por isto fazem-se todos os esforços para evitar estouros de memória. E quando eles ocorrem, a máquina trava imediatamente.

Bem, isto ocorre em um XT, que não pode ter mais de 1Mb de memória na placa mãe e por isso mesmo tem apenas vinte linhas no barramento de endereços (você ainda lembra que 1Mb corresponde a um número binário expresso em vinte bits, pois não?). Mas será que ocorreria também em um AT, que tinha um barramento de endereços de vinte e três linhas capaz de “enxergar” um campo de memória de 16Mb e geralmente vinha com mais de 1Mb de memória na placa mãe? Será que ainda assim ele estouraria quando se tentasse acessar os endereços acima de 1Mb?

Rodando DOS, sem dúvida que sim. Porque, como sabemos, o DOS exige que a CPU rode no modo real. E no modo real, para todos os efeitos práticos, um 286 se comporta como se fosse um 8088. Passou do primeiro mega, o estouro é certo.

A menos que...

B. Piropo