Em que modo os PCs modernos com chip Intel de 64 bits executam o setor de inicialização?

12

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?

mring
fonte

Respostas:

12

Todos os computadores atuais compatíveis com x86 (incluindo também a arquitetura x64, da Intel e da AMD, mas não o Itanium) executam o código do setor de inicialização no modo real x86 , exatamente como o IBM PC original fez há mais de 20 anos. Não é o modo kernel, é o modo segmentado original sem níveis de proteção de memória, multitarefa ou privilégios de código.

Se você conseguir se apossar de uma unidade de disquete, colocar o MS-DOS (ou FreeDOS ) nela e preso no computador atual, a inicialização será iniciada.

É tarefa do código de inicialização mudar para o modo protegido, configurar a proteção de memória, etc. Portanto, seu palpite está parcialmente correto. O carregador de inicialização inicia a execução no modo real x86 e alterna para o modo protegido, carrega e começa a executar o Kernel do sistema operacional no modo "kernel" (anel 0).

Para obter mais informações, você pode visitar o artigo da Wikipedia sobre o processo de inicialização do Windows NT , que possui alguns detalhes sobre esse assunto.

haimg
fonte
haimg, obrigado por esse link e esclarecimentos. @ Deshe, desculpe-me por tirar a melhor resposta.
mring
Agora é a hora de editar isso, caso contrário você não concordar com a sua própria resposta :-)
Daniel Beck
13

e as arquiteturas modernas de 64 bits?

Isso depende do firmware que está na máquina moderna de 64 bits com a arquitetura moderna de 64 bits. haimgA 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 CSregistro 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.

JdeBP
fonte
O link para o processo de inicialização parece estar quebrado / morto. Não consigo encontrar um substituto.
Slm
1
E agora eu sei o seu nome olhando para os URLs 8-). Não tentar espionar não poderia deixar de notar.
Slm
Eu acho que você mudou as coisas do ntlworld, está correto?
SLM
Possível URL de substituição para 1st - jdebp.eu/FGA/pcat-boot-process.html . Meu Deus, copie / cole seu A'er todo. Até esta wikipedia tem este A'er citado - en.wikipedia.org/wiki/Talk%3AReal_mode .
Slm
1

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.

Deshe
fonte
1

Manual da Intel Volume 3 Guia de programação do sistema 325384-053BR Janeiro de 2015:

2.2 MODOS DE OPERAÇÃO

O processador é colocado no modo de endereço real após a inicialização ou uma redefinição.

Apenas para começar, um bom diagrama do manual:

insira a descrição da imagem aqui

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 :

'CR0' O bit 0 (PE) deve ser definido.

Não tenho certeza sobre o GRUB e o x86_64.

Ciro Santilli adicionou uma nova foto
fonte
O GRUB inicia os sistemas operacionais compatíveis com a especificação de inicialização múltipla no modo protegido. Isso inclui os * BSDs, mas até onde eu sei, o Linux não segue essa especificação e faz suas próprias coisas. Ao inicializar um sistema operacional compatível com a especificação de inicialização múltipla, a configuração do GRUB usa a multibootpalavra - chave; para Linux, não são dedicados linux, linux16e, em versões UEFI de GRUB, linuxefipalavras-chave, dizendo GRUB para usar um protocolo de inicialização específica do Linux.
TelcoM
@telcoM fair enough
Ciro Santilli