Modo Real x Modo Protegido

Operando em modo real, o processador funciona exatamente como um 8086, apenas trabalhando com uma velocidade maior. Não somente o 386, mas todos os processadores atuais podem alternar entre o modo real e o modo protegido
livremente, sempre que necessário. No modo real, rodamos o MS-DOS e outros aplicativos de modo real mais antigos, enquanto no modo protegido rodamos o Windows e seus programas.

Com certeza, alguma vez ao tentar rodar um programa antigo, você já se deparou com uma enigmática mensagem de falta de memória, apesar dos manuais do programa dizerem que ele precisa apenas de 500 ou 600 KB de memória e você
ter instalado bem mais do que isso. Estas mensagens surgem por que estes programas rodam com o processador operando em modo real onde, como o 8086, ele é capaz de reconhecer apenas o primeiro Megabyte da memória RAM. Este primeiro Megabyte por sua vez, é
subdividido em dois blocos, chamados de memória convencional e memória estendida.

A memória convencional corresponde aos primeiros 640 Kbytes da memória, e é a área de memória usada pelos programas que operam em modo real. Os 384 Kbytes restantes são chamados de memória superior, e são reservados para
armazenar uma cópia do BIOS, que passa a ser executado mais rapidamente, já que a memória RAM é muito mais rápida do que o chip de memória ROM ou Flash onde ele é originalmente armazenado. Esta cópia do BIOS é chamada de “Shadow”, ou sombra, e serve para
aumentar o desempenho geral do sistema. A memória superior também é usada para armazenar sombras dos BIOS de outros dispositivos, como placas de vídeo, aumentando também a velocidade de operação destes periféricos.

Apesar de existirem 640 Kbytes de memória convencional, protos para ser usada por qualquer programa que opere em modo real, nem toda esta memória fica disponível, já que parte dela é usada pelo MS-DOS e drivers de
dispositivos de modo real. É possível liberar mais memória convencional, editando os arquivos de inicialização do DOS, conseguindo assim rodar estes programas.

Quando o computador é ligado, o processador está operando em modo real. Quem dá o comando para que ele mude para o modo protegido é o sistema operacional. No caso do Windows, este comando é dado durante o carregamento do
sistema.

Em modo protegido, o processador é capaz de reconhecer toda a RAM instalada no sistema, além de incorporar recursos como a multitarefa e a memória virtual em disco. É neste modo que usamos a interface gráfica do Windows e
rodamos seus aplicativos.

Recursos do Modo Protegido: Apesar de, em nome da compatibilidade retroativa com programas desenvolvidos para micros PC XT e 286, tanto o 386 como todos os processadores atuais poderem operar em modo real, apenas no modo protegido eles
incorporam os recursos mais avançados, que permitem a existência dos softwares que temos atualmente.

A partir do 386, poucas funções novas foram incorporadas aos novos processadores. Basicamente, evoluímos apenas em termos de velocidade. Tanto que, com um simples 386, é possível rodar praticamente qualquer aplicativo mais
atual, apenas com uma velocidade menor.

O modo protegido traz basicamente quatro novos recursos: memória virtual, multitarefa, proteção de memória e o modo virtual 8086.

Memória Virtual: A capacidade do 386 de trabalhar com vários aplicativos ao mesmo tempo (multitarefa) é realmente muito útil, mas esta característica traz um pequeno problema: abrindo vários aplicativos
sucessivamente, logo a memória RAM do sistema se esgota. Para corrigir este problema, o modo protegido traz também a memória virtual, que permite criar um arquivo temporário no disco rígido, chamado de Swap File, ou arquivo de troca, que funciona como uma
extensão da memória RAM, permitindo abrir quantos aplicativos forem necessários, até que o espaço do disco rígido se esgote.

Por exemplo, só o Windows 2000 Professional, junto com os serviços básicos ocupa cerca de 40 MB de memória. Se você abrir o Word 97, serão necessários mais 10 Megabytes, um total de quase 50 MB. Caso o micro em questão
possua apenas 32 MB de memória, seria criado um arquivo temporário de 18 MB no disco rígido, que armazenaria os dados que não couberam na memória RAM.

O problema em usar memória virtual é que o disco rígido é centenas de vezes mais lento do que a memória RAM. Um disco rígido razoável possui um tempo de acesso em torno de 10 milessegundos (milésimos de segundo) enquanto um
módulo de memória PC-100 possui um tempo de acesso inferior a 10 nanossegundos (bilionésimos de segundo) ou seja, um tempo de acesso um milhão de vezes menor!Em termos de taxa de transferência, novamente temos um contraste marcante: 800 MB para o módulo
de memória e de 5 a 20 MB (dependendo do modelo) para o disco rígido.

Graças a este abismo, apesar dos programas funcionarem normalmente usando memória virtual, o sistema vai ficando cada vez mais lento. Experimente, por exemplo, tentar trabalhar em um PC com apenas 4 MB de RAM (seja qual for
o processador) rodando o Windows 95. A lentidão é insuportável.

No Windows 3.x, era necessário reservar uma quantidade espaço do disco rígido para a memória virtual, quantidade que podia ser configurada livremente através do Painel de Controle. O problema é que este espaço ficava
indisponível. Se você possuísse um disco de 800 MB, e reservasse 200 para a memória virtual, ficaria com apenas 600 MB para instalar programas e guardar arquivos. Se por outro lado, você reservasse pouco espaço para a memória virtual, ficaria com pouca
memória para abrir vários programas e trabalhar com arquivos grandes.

Apartir do Windows 95 este problema foi resolvido com a adoção de um arquivo de troca dinâmico, que vai aumentando ou diminuindo de tamanho conforme a necessidade de memória, evitando o desperdício de espaço em disco que
tínhamos no Windows 3.x. Apartir do Windows 95, existe também uma administração mais racional dos recursos do sistema, movendo os arquivos mais importantes, acessados com mais frequência para memória RAM (ou memória cache, dependendo da importância do
arquivo), e deixando apenas arquivos usados mais raramente no arquivo de troca. Esta simples medida diminui bastante a perda de performance causada pelo uso da memória virtual.

No Windows 2000 é possível determinar um valor inicial e um valor máximo para um arquivo de troca. No caso do Linux, a fim de melhorar o desempenho, os desenvolvedores optaram por criar um sistema de arquivos próprio para a
memória virtual.

Multitarefa: Multitarefa significa executar mais de uma tarefa de cada vez, como assobiar e chupar cana ao mesmo tempo :-). Apesar de na vida real não ser muito fácil fazer duas coisas ao mesmo tempo, do ponto de
vista de um computador este processo é relativamente simples. Todos os aplicativos são carregados na memória e o processador passa a executar algumas instruções de cada aplicativo por vez. Como o processador é capaz de executar vários milhões de
instruções por segundo, esta troca é feita de maneira transparente, como se os aplicativos estivessem realmente sendo executados ao mesmo tempo. Enquanto o processador dá atenção para um aplicativo, todos os demais ficam paralisados, esperando sua
vez.

Memória Protegida: Usando a multitarefa, quase sempre teremos vários aplicativos carregados na memória, seja na memória RAM ou no arquivo de troca. Se não houvesse nenhum controle por parte do processador, um
aplicativo poderia expandir sua área de memória, invadindo áreas de outros aplicativos e causando travamentos no micro.

Um editor de imagens, por exemplo, precisa ocupar mais memória conforme as imagens vão sendo abertas ou criadas. Sem nenhuma orientação por parte do processador, simplesmente seriam ocupadas as áreas adjacentes, que poderiam
tanto estar vazias, quanto estar ocupadas pelo processador de textos, por exemplo.

Para colocar ordem na casa, foi desenvolvido o recurso de proteção de memória, que consiste no processador isolar a área de memória ocupada por cada aplicativo, impedindo que ele ocupe outras áreas ao seu bel prazer. Se, por
acaso, o programa precisar de mais memória, o próprio processador irá procurar uma área vazia de memória e ordenar ao aplicativo que ocupe a área reservada.

Existem basicamente dois tipos de multitarefa, denominadas multitarefa preemptiva e multitarefa cooperativa, que diferem justamente pelo uso ou não da proteção de memória.

O Windows 3.x, apesar de ser considerado um sistema operacional multitarefa, não é capaz de usar o recurso de proteção de memória, nele é usada a multitarefa cooperativa, que consiste em cada aplicativo usar os recursos do
processador por um certo tempo, passar para outro programa e esperar novamente chegar sua vez para continuar executando suas tarefas. A alternância entre os programas neste caso não é comandada pelo sistema e sim pelos próprios aplicativos. Neste cenário,
um aplicativo mal comportado poderia facilmente monopolizar o sistema, consumindo todos os recursos do processador por um longo período, ou mesmo invadir áreas de memória ocupadas por outros aplicativos, causando em qualquer um dos casos o famoso GPF,
(“General Protection Falt”, ou “falha geral de proteção”) que tanto atormentava os usuários do Windows 3.x.

Experimente tentar fazer dois irmãos dividirem os mesmo brinquedo; pode funcionar durante um certo tempo, mas uma hora um não vai querer deixar o outro brincar e vai sair briga, exatamente como acontece com os aplicativos
dentro da multitarefa cooperativa 🙂

O Windows 95/98 por sua vez, usa a multitarefa preemptiva, isolando as áreas de memória ocupadas pelos aplicativos. Isto garante uma estabilidade bem maior do que a que temos no Windows 3.11. Porém, o modo como a multitarefa
preemptiva é implementada no Windows 95 assim como do Windows 98 e do Windows Millennium, que são baseados no mesmo kernel (núcleo) do Windows 95, ainda possui dois problemas graves:

O primeiro é que, quando é executado um programa de 16 bits, o Windows 95 cai em multitarefa cooperativa para poder rodar o programa, deixando de proteger as áreas de memória e tornando-se tão vulnerável quanto o Windows
3.11.

Porém, mesmo usando apenas aplicativos de 32 bits os travamentos ainda são comuns, pois o Windows 95 os serviços do sistema não tem prioridade sobre os aplicativos. Isto significa que caso um aplicativo qualquer entre em
loop, poderá consumir todos os recursos do processador, neste caso o sistema operacional ficará paralisado, simplesmente sem ter como fechar o aplicativo e restaurar o sistema, obrigando o usuário a resetar o micro e perder qualquer trabalho que não tenha
sido salvo. Na verdade costuma-se dizer que o Windows 95/98 utiliza multitarefa semi-preemptiva, pois não utiliza todos os recursos de uma verdadeira multitarefa.

A solução para este problema veio com o Windows NT. Desde suas primeiras versões, o Windows NT é bem estável neste aspecto, pois implementa a multitarefa preemptiva de forma completa. As tarefas executadas pelo sistema
operacional, são priorizadas sobre as de qualquer outro aplicativo. Isto significa que em nenhuma situação, um aplicativo terá como passar por cima do sistema operacional e consumir todos os recursos do processador como acontece no Windows 95/98.

Na prática, significa que o sistema até pode travar devido a algum bug, mas se algum aplicativo travar ou tentar invadir uma área de memória não designada para ele, simplesmente será fechado, permitindo que todos os demais
aplicativos continuem trabalhando sem problemas. Você logo notará quais aplicativos costumam dar problemas, bastando substituí-los por versões mais recentes que corrijam seus bugs ou mesmo passar a usar um programa concorrente.

Tanto o Windows 2000, quanto o XP são baseados no kernel do Windows NT e mantém o mesmo sistema de funcionamento. Por ter sido inspirado no Unix, o Linux utiliza multitarefa preemptiva desde suas primeiras versões, é por
isso que o Linux é considerado um dos sistemas mais estáveis, a ponto de ser usado em vários dos mais importantes servidores do planeta.

O MacOS por sua vez, utilizou a multitarefa cooperativa durante muito mais tempo, até a versão 9.x. Os usuários dos Mac só passaram a ter disponível um sistema com multitarefa preemptiva apartir do MacOS X, que é baseado no
FreeBSD, um sistema Unix de código aberto, semelhante ao Linux em vários aspectos. A Apple usou o FreeBSD para construir o Darwin, que é a base do sistema e completou a obra com a interface Aqua, que mantém a idéia de facilidade de uso das versões
anteriores do MacOS.

Modo Virtual 8086: Apesar de, operando em modo real, o processador ser totalmente compatível com qualquer programa antigo, seria impossível executar um aplicativo de modo real dentro do Windows 95 ou qualquer outro
sistema operacional que utilize o modo protegido. Seria preciso fechar o Windows e fazer o processador voltar para o modo real para poder executar o aplicativo.

Pensando nesta possível limitação, os projetistas da Intel desenvolveram o modo virtual 8086 onde o processador, operando em modo protegido, é capaz de simular vários ambientes de modo real, cada um com 1 MB de memória e
total acesso ao hardware do micro, chamados de máquinas virtuais. É como se dentro do 386 fossem abertos vários XTs completos, um para cada programa de modo real a ser executado. É justamente o modo virtual 8086 que permite abrir janelas DOS dentro do
Windows 95/98.

Como o processador continua em modo protegido, cada máquina virtual tem sua área isolada na memória. O programa roda sem prejudicar a estabilidade do sistema.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X