Assembly no Linux/Operação do processador, modo real ou modo protegido

Origem: Wikilivros, livros abertos por um mundo aberto.

Até um bom tempo atrás, as limitações existentes nos processadores Intel, 8086 e 8088 não eram sentidas, pois o PC era um fenômeno em desenvolvimento ainda. Apenas 64 Kb máximos de memória não pareciam ser um problema em comparação ao que estava disponível na época, a maioria baseado no 8080 e 8085, como o Z80, que eram microprocessadores de 8 bits e com capacidade máxima de endereçamento direto de 64 Kb. Mas os engenheiros da Intel sempre foram introduzindo inovações e como aquela famosa lei professa, a capacidade dos processadores foi sendo ampliada em prazos de em média 18 meses (lei de Moore). Já nos 80286, existia um modo de trabalho do processador, chamado modo protegido. Portanto, quando o processador era ligado, se comportava como um 8086, mas após a entrada neste novo "modo", novas características eram habilitadas, como maior capacidade de endereçamento de memória, permissões ao acesso desta memória, enfim novos recurso.

Recursos estes que foram aperfeiçoados no 80386, o primeiro processador realmente 32 bits desta linha, que apesar de hoje em dia ser mais que obsoleto, na época representou um grande abertura de possibilidades. Esta possibilidade de registradores de 32 bits, endereçamento de memória de até 4 GB, além da compatibilidade com os processadores antigos, fez com que muitos programadores da época dessem um salto qualitativo nas aplicações e formas de aproveitamento da máquina. Aliás, a mesma compatibilidade tida como qualidade por uns, é tida como empecilho por outros, que criticam as limitações dos processadores x86, como são denominados comumente todos os compatíveis com Intel, atribuindo-as a este atrelamento com o passado e tornando com um sistema projetado com base neste componente muito complexo.

Portanto, ele mantinha o chamado "Modo Real", em que o 396 se comportava como um 8086, rodando diretamente programas, como o DOS em 16 bits, com endereçamento de até 640 Kb, não importando o quanto estivesse instalado na maquina, e também o "Modo Protegido" (protected mode ou pmode), no qual apresentava além de as vantagens citadas, a melhoria da forma de entrada e saída deste modo para o modo real (o 286 necessitava do reset do microprocessador) e um modo chamado v86, que permitia que uma espécie de "sessão" de "Modo Real" fosse executada quando no modo protegido. Outra vantagem do "Modo Protegido" eram as facilidades de multitarefa, que com certeza revolucionaram os programas da época, não mais necessitando de artifícios cada vez mais escassos que apenas emulavam multitarefa, mas na realidade trabalhavam em um sistema cooperativo que se mostrava muito frágil e ineficiente. Além disso, os tão sonhados registros em 32 bits, disponíveis e com um set de instruções mais elaborado.

Esta explicação toda apenas seve para mostrar que o Linux no seu boot, inicia em "Modo Real", mas muda para "Modo protegido", em um dado momento. Portanto, existem as regras deste modo, como permissões de leitura, escrita e execução em trechos da memória e o gerenciamento da mesma. Isso esclarece por que não podemos fazer como no DOS, alterar um endereço diretamente, sem levarmos em conta a quem pertence. No caso do Linux, temos a memória que está protegida pelo Kernel, e a memória que está disponível para os programas do usuário (Kernel e User memories). Esta tentativa pode causar um erro de segmentação (segmentation Fault), uma exceção que é disparada pelo processador e sinalizada pelo Kernel, indicando que tentamos uma operação não permitida.