Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
26/04/1993

< O FINAL DO COMEÇO >


Vamos, afinal, discutir as últimas características que nos interessam nos microprocessadores. Começando pelo conjunto de instruções, ou "Instruction Set". E vamos fazê-lo de forma superficial para não ficar maçantemente técnico. Tudo o que nossa máquina faz pode ser reduzido a um conjunto de instruções elementares que a CPU "sabe" executar. Desde coisas tão singelas quanto incrementar o valor de um registro até tão complexas como verificar se os índices de um vetor estão contidos em determinados limites. Mas no fundo tudo é muito simples: as instruções são armazenadas em uma região da memória (um "programa" nada mais é que uma série de instruções na memória) e um registro especial, o "ponteiro de instruções", aponta para elas. A CPU lê uma instrução, a executa e move o ponteiro para a próxima. E assim sucessivamente.

Até aí, tudo bem. Mas ocorre que, enquanto os microprocessadores evoluíam, evoluía igualmente o conjunto de instruções: afinal, espera-se que uma CPU de 32 bits faça coisas que uma de oito bits não faz. Mas o contrário não pode acontecer, senão um programa que roda em uma CPU antiga correria o risco de não rodar em uma moderna. Então, por questões de compatibilidade, todas as instruções dos modelos antigos foram mantidas. Mas algumas foram otimizadas. Por exemplo: todas as CPU da linha PC, desde o velho 8088 até o novo Pentium, conhecem a instrução LODSB. Que serve para ler um byte de uma posição da memória e carregá-lo em um determinado registrador. Só que, para isso, os velhos 8088 e 8086 gastam doze ciclos de máquina, enquanto um 286 ou 386 gasta apenas cinco. Resultado: rodando na mesma freqüência de operação, um 286 é capaz de executar a instrução em menos da metade do tempo que o velho 8086. Portanto, o conjunto de instruções das CPU mais recentes não somente é mais poderoso como também mais eficiente.

Outro ponto de interesse é a capacidade de manejar a memória virtual. Que consiste em "fingir" que a máquina dispõe de muito mais memória do que realmente existe. Vejamos como essa mágica é possível. Imagine que você está executando um programa de editoração eletrônica. E está editando um livro muito grande. Imagine ainda que a máquina tem 4Mb de memória RAM, dos quais o código executável do programa ocupa 500K. E o texto e figuras de seu livro ocupam mais 6Mb. Impossível? Não, se a CPU "souber" manejar memória virtual. Ela carrega na memória o programa e mais o tanto que couber dos dados. Quando se esgota a memória RAM, a CPU copia "pedaços" de memória para o disco e enche os trechos assim liberados com o resto dos dados, até que todo o livro seja carregado. É como se "retratos" da memória fossem transcritos para o disco. O que é possível, já que tanto na memória quanto no disco o que se tem é um conjunto de bytes em uma determinada ordem. A diferença essencial é que a CPU só pode "rodar" o que está na memória: no disco, tudo fica "congelado". O programa precisa acessar um trecho que está no disco? Sem problema: a CPU rapidamente "troca" o trecho do disco com um trecho da memória RAM que não está sendo usado naquele momento, sem que o programa sequer tome conhecimento. A tramóia é tão bem feita que até mesmo código executável pode ser jogado da memória para disco e vice-versa. Evidentemente, na hora de executar a CPU precisa trazê-lo de volta para a memória. É por isso que algumas vezes, quando se está rodando Windows, por exemplo, a luz do disco rígido acende repentinamente mesmo quando não se espera nenhum acesso à disco: é a CPU executando sua silenciosa faina de trocar código e dados da memória real (RAM) para a virtual (disco). E é também por isso que em máquinas com pouca memória RAM, por vezes tudo fica muito lento: afinal, acesso à memória RAM é muito mais rápido que a disco.

Algumas CPU são capazes de fazer isso, outras não. E, das que o fazem, umas podem usar muito mais espaço em disco que outras. Então, no que toca à memória virtual, interessa não somente o fato da CPU poder manejá-la, mas também que "tamanho" a memória virtual pode ocupar em disco. Quando examinarmos as CPU, veremos ambas as características de cada uma.

Finalmente, o último ponto: os "modos" de execução. E aqui não há jeito de descer a detalhes sem ser excessivamente técnico, Portanto serei sucinto. Os modos são três: o modo real, típico das antigas CPU como o 8088 e 8086, que só "enxergam" 1Mb de RAM. O protegido, que consegue acessar um campo de memória mais extenso, além de permitir que trechos de memória sejam "propriedade" de certos programas sem que um possa interferir com o outro. E o chamado "modo 8086 virtual" que permite simular um número ilimitado de CPUs independentes, cada uma igual a um 8086. Não dá para ir muito além disso, mas somente para constar: é o modo protegido que permite que diversos programas possam estar carregados na memória sem que um interfira com o campo de memória acessado pelos demais, enquanto o "modo 8086 virtual" é quem capacita alguns sistemas operacionais a rodar diversos programas DOS ao mesmo tempo, como se cada um deles ocupasse uma máquina independente. E enfim chegamos ao final do começo. Agora estamos prontos a examinar, a partir da semana que vem, a primeira geração de microprocessadores da linha PC.

PS: O CentroIn BBS acaba de abrir uma "conferência" sobre OS/2. Lá você pode trocar mensagens, dirimir dúvidas e saber novidades sobre este interessante sistema operacional de 32 bits. Os telefones do CentroIn são 225-2125 e 205-0281. Apareça por lá para batermos um papo.

B. Piropo