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

12

Eu sei que com máquinas 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 gravador do gerenciador de inicialização é quem decide quais instruções de montagem de modo usar, certo? O hardware apenas faz o que é dito. Então, minha pergunta deveria ser: que modo os principais carregadores de inicialização do sistema operacional, como o Windows 7, o Mac OS X (mais recente) e o GRUB em máquinas de 64 bits usam?

    
por mring 10.10.2011 / 15:28

4 respostas

13

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

Se você conseguir uma unidade de disquete, coloque o MS-DOS (ou FreeDOS ) nela e cole no computador de hoje , vai começar a arrancar.

A tarefa do código de inicialização é alternar para o modo protegido, configurar a proteção da memória, etc. Portanto, seu palpite está parcialmente correto. O gerenciador de partida inicia a execução como modo real x86 e alterna para o modo protegido, carrega e inicia a execução do Kernel do sistema operacional no modo "kernel" (anel 0).

Para obter mais informações, você pode visitar o artigo da Wikipédia sobre o processo de inicialização do Windows NT , que tem alguns detalhes sobre isso assunto.

    
por 10.10.2011 / 19:02
13

what about modern 64-bit architectures?

Isso depende do firmware que está na máquina moderna de 64 bits com a arquitetura moderna de 64 bits. A resposta de haimg teria sido o caso de uns cinco a seis anos atrás para o mundo x86, mas está desatualizado para o mundo x86 atualmente.

Firmware de PC / AT antigo

Algumas dessas modernas máquinas de 64 bits possuem firmwares antigos no estilo PC / AT. Como observado em outras respostas, eles carregam e executam o programa de bootstrap do setor # 0 de um disco praticamente da mesma maneira que o PC / AT. Este é o antigo processo de boot do PC / AT.

Novos firmwares EFI

Outras máquinas modernas de 64 bits possuem novos firmwares EFI. Estes não carregam um programa de inicialização do setor # 0 de um disco em tudo . Eles são inicializados pelo Gerenciador de Inicialização EFI carregando e executando um aplicativo de boot loader EFI . Esses programas são executados no modo protegido. Este é o processo de inicialização da EFI.

Os firmwares EFI em geral mudam para o modo protegido dentro de algumas instruções de saída do processador. A mudança para o modo protegido é feita no início da chamada "SEC Phase" da inicialização do firmware EFI. Tecnicamente, os processadores x86 de 32 bits e superiores nem sequer iniciam no modo real, mas no que é coloquialmente conhecido como modo irreal . (O descritor de segmento inicial para o registrador CS não descreve o mapeamento em modo real convencional e é o que torna isso "irreal".)

Como tal, pode-se dizer que esses sistemas EFI nunca entram em modo real adequado , quando se inicializam nativamente em um carregador de inicialização EFI (ou seja, quando não empregam um suporte de compatibilidade módulo ), uma vez que eles mudam do modo irreal diretamente para o modo protegido e permanecem no modo protegido a partir de então.

    
por 11.10.2011 / 16:13
1

Até onde eu sei, o código de inicialização sempre é executado no modo Kernel.

Por um lado, é impossível que qualquer coisa decida qual modo usar, pois ele é executado a partir do 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 começar a ser executado. Assim, por design, o conjunto de montagem disponível para o código no setor de inicialização é predeterminado pela arquitetura.

Se algum modo desprivilegiado fosse escolhido para isso, seria impossível usar instruções de modos com privilégios mais altos, o que praticamente força o fato de que o código de inicialização é executado com o modo mais privilegiado disponível.

    
por 10.10.2011 / 16:57
1

Manual de programação do sistema Volume 3 Intel® 325384-053US Janeiro de 2015:

2.2 MODES OF OPERATION

The processor is placed in real-address mode following power-up or a reset.

Apenas para os chutes, um diagrama legal do manual:

OGRUBiniciaosistemaoperacionalnomodoprotegido. Especificação de inicialização múltipla 0.6.96 Estado da máquina :

'CR0' Bit 0 (PE) must be set.

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

    
por 03.10.2015 / 17:51