Depois da batalha do
A20 entraremos num mundo unreal, ou melhor, no Modo Unreal, rsrs.
Com o surgimento do processador 80386, o primeiro de 32 bits da série x86, novas estruturas foram adicionadas. Agora cada entrada da GDT pode ser definida como sendo um segmento normal, onde o seu tamanho é definido em bytes, ou um segmento grande, onde é definido em blocos de 4 KB.
Os segmentos normais tem tamanho máximo de 64 KB, enquanto os segmentos grandes podem chegar aos 4 GB, sendo acessados por offsets de 32 bits.
Porem quando o processador é retornado ao modo real, sem atualizar os segmentos para normais, ainda é permitido o uso de offsets de 32 bits que podem acessar todo os 4 GB. Este é o chamado Modo Unreal.
Existem dois subtipos no Modo Unreal:
Mas qual a vantagem do Modo Unreal?
Depois que tivermos o sistema operacional completamente carregado, nenhuma, pois ele irá trabalhar no Modo Protegido de 32 bits, mas durante o processo de boot o Modo Unreal será muito útil, porque a BIOS e o booloader irão funcionar normalmente como se estivessem no Modo Real, porem, através de um procedimento especial, podemos enviar o kernel para a memória superior.
O modo interessante nesse caso é o Big Unreal pois precisamos acessar somente dados na memória superior (o kernel, para o bootloader, é tratado como dados).
Para utilizar o Modo Unreal, criei uma GDT auxiliar, com uma entrada tipo FLAT32, que é carregada, então um procedimento ativa o Modo Unreal (entra no Modo Protegido, atualiza os segmentos de dados, sai do modo protegido e restaura os segmentos originais).
Depois que o Modo Unreal é ativado, o kernel é lido e carregado para a memória superior, através do buffer, e o processo continua normalmente, como na versão anterior, com a configuração da GDT principal, entrada no Modo Protegido... Porem agora todos os segmentos estão na memória superior, exceto o de vídeo, mas ainda são de 16 bits.
Depois de ter o kernel rodando na memória superior, substituí o descritor do segmento de vídeo por um descritor FLAT32, que permite acessar toda a memória, e pelo qual o vídeo é acessado. Para isso o kernel foi modificado para usar acesso de 32 bits provido pelo descritor 0x20 (de 4 GB).
Download dos fontes e binários:
<< Anterior - Boot, fase 5 - Quebrando a marca do Megabyte
Com o surgimento do processador 80386, o primeiro de 32 bits da série x86, novas estruturas foram adicionadas. Agora cada entrada da GDT pode ser definida como sendo um segmento normal, onde o seu tamanho é definido em bytes, ou um segmento grande, onde é definido em blocos de 4 KB.
Os segmentos normais tem tamanho máximo de 64 KB, enquanto os segmentos grandes podem chegar aos 4 GB, sendo acessados por offsets de 32 bits.
Porem quando o processador é retornado ao modo real, sem atualizar os segmentos para normais, ainda é permitido o uso de offsets de 32 bits que podem acessar todo os 4 GB. Este é o chamado Modo Unreal.
Existem dois subtipos no Modo Unreal:
- Big Unreal - somente os segmentos de dados são acessíveis por offsets de 32 bits;
- Huge Unreal - o segmento de código também pode ser acessado por offsets de 32 bits.
Mas qual a vantagem do Modo Unreal?
Depois que tivermos o sistema operacional completamente carregado, nenhuma, pois ele irá trabalhar no Modo Protegido de 32 bits, mas durante o processo de boot o Modo Unreal será muito útil, porque a BIOS e o booloader irão funcionar normalmente como se estivessem no Modo Real, porem, através de um procedimento especial, podemos enviar o kernel para a memória superior.
O modo interessante nesse caso é o Big Unreal pois precisamos acessar somente dados na memória superior (o kernel, para o bootloader, é tratado como dados).
Para utilizar o Modo Unreal, criei uma GDT auxiliar, com uma entrada tipo FLAT32, que é carregada, então um procedimento ativa o Modo Unreal (entra no Modo Protegido, atualiza os segmentos de dados, sai do modo protegido e restaura os segmentos originais).
Depois que o Modo Unreal é ativado, o kernel é lido e carregado para a memória superior, através do buffer, e o processo continua normalmente, como na versão anterior, com a configuração da GDT principal, entrada no Modo Protegido... Porem agora todos os segmentos estão na memória superior, exceto o de vídeo, mas ainda são de 16 bits.
Depois de ter o kernel rodando na memória superior, substituí o descritor do segmento de vídeo por um descritor FLAT32, que permite acessar toda a memória, e pelo qual o vídeo é acessado. Para isso o kernel foi modificado para usar acesso de 32 bits provido pelo descritor 0x20 (de 4 GB).
Download dos fontes e binários:
- LoadLOS.008 - Kernel rodando na memória superior;
- LoadLOS.009 - Vídeo acessado por um segmento FLAT32;
<< Anterior - Boot, fase 5 - Quebrando a marca do Megabyte
Nenhum comentário:
Postar um comentário
Obs.: Após escrever seu comentário, inscreva-se por e-mail para seguir os próximos comentários. Ou assine a postagem de comentários (Atom).