Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
09/01/1995

<Acessos em 32 bits - >
< Parte V: O Modo 86 Virtual>


Como vimos, o 386 é uma CPU extraordinariamente avançada se comparada ao 8088 que equipava o primeiro PC, para a qual o DOS foi desenvolvido. Que por sua vez era uma simplificação do 8086 (na verdade, um 8086 é quase idêntico a um 8088; a diferença bàsica é o barramento de acesso à memória, que usa dezesseis linhas ao invés das oito usadas pelo 8088). O 386 acessa um campo contínuo de memória de até 4Mb ("memória plana") e simula a existência de mais memória do que a máquina realmente contém, trocando trechos de memória com o disco ("memória virtual"), além de poder funcionar em tres modos distintos: o real, o protegido e o "86 virtual".

No modo protegido o 386 exibe todo seu esplendor: usa memória plana, virtual e permite que diversos programas (ou "tarefas") sejam executados simultaneamente, impedindo que qualquer um deles interfira com os demais. Já no modo real, o 386 se transforma em um 8086, com todas as suas limitações: é irremediavelmente monotarefa, não usa proteção de memória, adota o esquema de endereçamento segmentado e está limitado a 1Mb. Em suma: no modo real, o 386 transforma a máquina em um mísero XT. Provavelmente você está se perguntando para que serve um negócio desses, já que quem tem uma Ferrari dificilmente se acostumaria novamente a usar uma carroça. A resposta é simples: compatibilidade. Uma das grandes preocupações da Intel foi fazer com que seus chips fossem compatíveis com os membros mais velhos da família. Por isso existe o modo real. Na verdade, ao ser ligado, o 386 parte no modo real e somente passa para o modo protegido (ou para o modo 86 virtual, que veremos adiante) se receber o comando correspondente.

O DOS, como vimos, foi desenvolvido para o 8088, um chip funcionalmente idêntico ao 8086. E só sabe funcionar com ele. Não tem a menor idéia do que seja multitarefa e endereça memória em um esquema segmentado. Em suma: um programa DOS não poderia rodar no modo protegido do 386.

Mas no mundo da informática, o que conta são programas. Pouco adianta dispor de um micro com uma incrível CPU e um sistema operacional fantástico se não há programas que rodem nessa maravilha - e aí está o OS/2, que não me deixa mentir: somente agora ele começa a se popularizar e mesmo assim jamais alcançará a liderança do mercado se a IBM não conseguir convencer as softhouses a desenvolverem aplicativos para ele.

Quando a Intel lançou o 386, o que havia eram programas DOS. E havia a dar com o pau: bilhões de dólares investidos em todo o mundo em aplicativos DOS. E se não rodasse esses programas, o 386 estaria fadado ao fracasso. A Intel então estava diante do que parecia o classico problema do bicho: ficando, come, correndo, pega. Pois programas DOS não rodavam no modo protegido, e para rodá-los no modo real não era preciso um 386. A solução foi criar um terceiro modo, o "modo 86 virtual", no qual um 386 simula o 8086, mas garante a proteção da memória. Um negócio danado de engenhoso.

Quando o 386 recebe o comando para passar para o modo 86 virtual, a CPU cria, na memória da máquina, uma "cópia" de um 8086. Com todas as suas características e limitações: monotarefa, memória segmentada e limitada a 1Mb. Cria até mesmo cópias internas dos registradores do 8086. Em suma: tudo se passa como se, dali em diante a CPU fosse um 8086 até receber um comando para sair do modo 86 virtual e voltar ao modo protegido ou real. Ora, direis, a mágica parece um tanto besta. Afinal, para que criar um novo modo para isso? Pois não é exatamente que faz o modo real?

Não mesmo! No modo real, o 386 "vira" um 8086 e temos conversado. Já no modo 86 virtual, ele simula um 8086 em um trecho de memória totalmente protegido do restante. Portanto, outros programas (ou tarefas) podem estar rodando ao mesmo tempo no modo protegido sem interferir com (nem sofrer interferência de) qualquer coisa que rode no modo 86 virtual. Melhor que isso: o 386 pode simular, simultaneamente, diversos 8086, ou seja, pode criar na memória mais de uma área (protegida das demais) na qual, em cada uma, é simulada a existência de um 8086. Quer dizer: um 386 pode se comportar como se dentro dele houvesse diversos 8086. O micro, então, se multiplica em diversas "máquinas", cada uma equipada com um 8086, todas rodando ao mesmo tempo. Essas "máquinas" não existem de fato, exceto por sua imagem na memória. Ou seja: não são máquinas reais, são máquinas virtuais. Por isso o nome: modo 86 virtual.

Quando entra no modo 86 virtual, a CPU permite que o sistema operacional controle as interfaces com o mundo exterior, como vídeo e teclado, interceptando as interrupções e tratando-as de acordo. Quer dizer: cada máquina virtual tem seu teclado virtual, vídeo virtual, portas seriais e paralelas virtuais e assim por diante (e nem poderia deixar de ser assim, senão seria impossível implementar multitarefa usando máquinas virtuais - basta pensar um pouco para perceber porque).

O modo 86 virtual foi o responsável pelo imenso sucesso do 386. Pois, antes dele, a Intel lançou o 286, um chip muito semelhante ao 386, capaz de rodar nos modos real e protegido e usar memória virtual, porém de apenas dezesseis bits e sem o modo 86 virtual. E que, como o 386, era capaz de passar do modo real para o protegido, mas ao contrário deste, não permitia voltar ao modo real. Por isso o 286 fracassou: sempre foi considerado um mau passo da Intel e foi usado a vida toda como um 8086 mais rápido.

Com o modo 86 virtual e sua capacidade de simular diversas máquinas virtuais 8086 simultâneas e coexistindo com processos no modo protegido, a Intel garantiu o sucesso do 386 através de uma coisa relativamente simples, mas de extraordinária importância: abriu para os programas DOS as tão sonhadas portas da multitarefa. Ou seja: enquanto dava tempo às softhouses de desenvolver as interfaces e aplicativos que rodassem no modo protegido, permitia que a multidão de programas DOS continuassem em uso. E todos ao mesmo tempo, se o freguês assim o desejasse. Cada um em uma máquina virtual independente.

Agora, só falta discutir a maneira engenhosa pela qual conseguiram fazer com que o DOS rompesse os umbrais do primeiro megabyte e provasse as delícias do modo protegido, para afinal entender os acessos em 32 bits.

PS: amanhã, terça-feira dia 10, no Rio, e depois de amanhã, quarta-feira dia 11, em São Paulo, as primeiras reuniões do Grupo de Usuários OS/2 de 95. Como sempre, a do Rio será no RDC da PUC, na Gávea, e a de São Paulo no prédio da IBM da Rua Tutóia. Ambas começam às 19 hs e não é necessário inscrição prévia. Apareçam.

B. Piropo