Eu sei que em máquinas mais antigas como 286s, os primeiros 512 bytes carregados do primeiro setor da unidade de inicialização para 0000: 7C00 na memória foram executados no modo real de 16 bits, mas e as arquiteturas modernas de 64 bits?
Edit: Eu acho que esta é uma pergunta errada ao pensar sobre isso. O autor do carregador de inicialização é quem decide quais instruções de montagem de modo usar, certo? O hardware faz apenas o que é dito. Então, minha pergunta deve ser: em qual modo os principais carregadores de inicialização do sistema operacional, como Windows 7, Mac OS X (o mais recente) e GRUB em máquinas de 64 bits, usam?
Isso depende do firmware que está na máquina moderna de 64 bits com a arquitetura moderna de 64 bits.
haimg
A resposta teria sido o caso de cinco a seis anos atrás para o mundo x86, mas está desatualizada no mundo x86 hoje.Firmwares antigos de PC / AT
Algumas dessas máquinas modernas de 64 bits possuem firmwares antigos do tipo PC / AT. Conforme observado em outras respostas, eles carregam e executam o programa de inicialização do setor # 0 de um disco da mesma maneira que o PC / AT fez. Este é o antigo processo de inicialização do PC / AT.
Novos firmwares EFI
Outras máquinas modernas de 64 bits possuem novos firmwares EFI. Estes não carregar um programa de inicialização do setor # 0 de um disco em tudo . Eles são autoinicializados pelo EFI Boot Manager carregando e executando um aplicativo EFI boot loader . Esses programas são executados no modo protegido. Este é o processo de inicialização do EFI.
Os firmwares EFI geralmente mudam para o modo protegido, com algumas instruções para sair da redefinição do processador. A mudança para o modo protegido é feita no início da chamada "Fase SEC" da inicialização do firmware EFI. Tecnicamente, os processadores x86 de 32 bits e maiores nem iniciam no modo real propriamente dito, mas no que é conhecido coloquialmente como modo irreal . (O descritor de segmento inicial para o
CS
registro não descreve o mapeamento convencional em modo real e é o que torna isso "irreal".)Como tal, pode-se dizer que esses sistemas EFI nunca entram modo real adequada em tudo, quando bootstrapping nativamente a um bootloader EFI (ou seja, quando não empregam um módulo de suporte de compatibilidade ), uma vez que alternar entre o modo irreal directamente para o modo protegido e permaneça no modo protegido a partir de então.
fonte
Até onde eu sei, o código de inicialização sempre roda no modo Kernel.
Por um lado, é impossível que qualquer coisa decida qual modo usar quando executado no setor de inicialização, simplesmente porque são as primeiras instruções a serem executadas pelo firmware. Não há como o código definir quais instruções estão disponíveis antes de iniciar a execução. Assim, por design, o conjunto de montagem disponível para o código no setor de inicialização é predeterminado pela arquitetura.
Se qualquer modo menos privilegiado fosse escolhido para isso, seria impossível usar instruções de modos com privilégios mais altos, o que força o fato de que o código de inicialização é executado com o modo mais privilegiado disponível.
fonte
Manual da Intel Volume 3 Guia de programação do sistema 325384-053BR Janeiro de 2015:
Apenas para começar, um bom diagrama do manual:
O GRUB inicia sistemas operacionais com inicialização múltipla no modo protegido. Especificação de inicialização múltipla 0.6.96 Estado da máquina :
Não tenho certeza sobre o GRUB e o x86_64.
fonte
multiboot
palavra - chave; para Linux, não são dedicadoslinux
,linux16
e, em versões UEFI de GRUB,linuxefi
palavras-chave, dizendo GRUB para usar um protocolo de inicialização específica do Linux.