现代 64 位 Intel 芯片 PC 在什么模式下运行引导扇区?

mri*_*ing 14 boot 64-bit mode

我知道对于像 286s 这样的旧机器,从引导驱动器的第一个扇区加载到内存中的 0000:7C00 的前 512 个字节是在 16 位实模式下运行的,但是现代 64 位架构呢?

编辑:我想这是一个错误的问题。引导加载程序的编写者是决定使用哪种模式汇编指令的决定者,对吗?硬件只是按照它所说的去做。那么我的问题应该是,64 位机器上的主要操作系统引导加载程序(如 Windows 7、Mac OS X(最新)和 GRUB)使用什么模式?

hai*_*img 14

当前所有兼容 x86 的计算机(这也包括 x64 架构,来自 Intel 和 AMD,但不包括 Itanium)以x86 实模式执行引导扇区代码,就像 20 多年前的原始 IBM PC 所做的那样。它不是内核模式,而是没有内存保护、多任务处理或代码特权级别的原始分段模式。

如果你能拿到一个软盘驱动器,把 MS-DOS(或FreeDOS)放在它上面,然后插在今天的电脑上,它就会开始启动。

启动代码的任务是切换到保护模式、设置内存保护等。所以你的猜测是部分正确的。引导加载程序以 x86 实模式开始执行并切换到保护模式,以“内核”(环 0)模式加载并开始实际执行操作系统内核。

有关更多信息,您可以访问有关Windows NT 启动过程的Wikipedia 文章,其中有很多关于此主题的详细信息。


Jde*_*eBP 14

现代 64 位架构呢?

这取决于具有现代 64 位架构的现代 64 位机器上的固件。 haimg对于 x86 世界来说,大约五到六年前的情况是这样的,但对于今天的 x86 世界来说已经过时了。

旧的 PC/AT 固件

一些现代 64 位机器具有旧的 PC/AT 风格的固件。正如其他答案中所述,它们以与 PC/AT 几乎相同的方式从光盘的扇区 #0 加载和运行引导程序。 这是旧的 PC/AT 引导程序。

新的 EFI 固件

其他现代 64 位机器具有新的 EFI 固件。这些不从光盘的扇区#0加载一个引导程序在所有。它们通过 EFI 引导管理器加载和运行EFI 引导加载程序应用程序进行引导。此类程序在保护模式下运行。 这是 EFI 引导程序。

EFI 固件通常会在退出处理器重置的几条指令内切换到保护模式。切换到保护模式是在 EFI 固件初始化的所谓“SEC 阶段”的早期完成的。从技术上讲,32 位及更高版本的 x86 处理器甚至不会以正确的实模式启动,而是以俗称的虚模式 启动。(CS寄存器的初始段描述符没有描述传统的实模式映射,这就是“不真实”的原因。)

因此,可以说,那些EFI系统永远不会进入实模式正确可言,本身自举到EFI引导程序时(即当它们不采用兼容性支持模块),因为他们从虚幻模式直接切换到保护模式并从那时起保持保护模式。