现代64位Intel芯片PC以哪种模式运行引导扇区?


12

我知道在286s等较旧的计算机上,从引导驱动器的第一个扇区加载到内存中的0000:7C00的前512个字节以16位实模式运行,但是现代64位体系结构呢?

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

Answers:


12

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

如果您可以握住软盘驱动器,则将MS-DOS(或FreeDOS)放在其上,并卡在当今的计算机中,它将开始启动。

引导代码的任务是切换到保护模式,设置内存保护等。因此,您的猜测部分正确。引导加载程序以x86实模式开始执行,并切换到保护模式,以“内核”(ring 0)模式加载并开始实际执行OS内核。

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


haimg,感谢您的链接和说明。@Deshe,很抱歉获得最佳答案。
2011年

现在该进行编辑了,否则您将无法同意自己的回答:-)
Daniel Beck

13

现代64位架构又如何呢?

这取决于具有现代64位体系结构的现代64位计算机上的固件。 haimg大约五到六年前,对于x86世界来说,答案就是这样,但是对于今天的x86世界来说,已经过时了。

旧的PC / AT固件

这些现代的64位计算机中,有些具有旧的PC / AT风格的固件。正如在其他答案中指出的那样,它们从光盘的扇区#0加载并运行引导程序,其方式与PC / AT几乎相同。 这是旧的PC / AT引导过程。

新的EFI固件

其他现代的64位计算机具有新的EFI固件。这些不从光盘的扇区#0加载一个引导程序在所有。它们由EFI Boot Manager引导并加载并运行EFI Boot loader应用程序。此类程序在保护模式下运行。 这是EFI引导过程。

在退出处理器重置的一些说明中,EFI固件通常会切换到保护模式。切换到保护模式是在EFI固件初始化的所谓“ SEC阶段”的早期完成的。从技术上讲,32位及更高版本的x86处理器甚至无法在实模式下正常启动,而是通俗地称为虚幻模式。(CS寄存器的初始段描述符没有描述传统的实模式映射,而是使它“不真实”的原因。)

因此,可以说这些EFI系统在本机引导到EFI引导加载程序时(即,当它们不使用兼容性支持模块时)根本不会进入正确的实模式,因为它们从虚实模式直接切换到保护模式。并从那时起一直处于保护模式。


引导过程的链接似乎已损坏。我找不到替代品。
slm


1
现在,通过URL 8),我知道了您的名字。不尝试监视就无济于事。
slm

我认为您是从ntlworld搬来的,对吗?
slm

1st的可能替换URL-jdebp.eu/FGA/pcat-boot-process.html。我的上帝ppl全部复制/粘贴您的A'er。甚至这个Wikipedia都引用了A'er- en.wikipedia.org/ wiki/Talk%3AReal_mode 。
slm

1

据我所知,引导代码始终以内核模式运行。

首先,从引导扇区运行时,任何事情都无法决定要使用哪种模式,仅因为这是固件要执行的第一条指令。该代码无法在开始运行之前设置可用的指令。因此,通过设计,可用于引导扇区上代码的汇编集由体系结构预先确定。

如果为此选择了任何特权模式,那么就不可能使用更高特权模式的指令,这实际上迫使引导代码以可用的最特权模式运行。


1

英特尔手册第3卷系统编程指南325384-053US 2015年1月:

2.2操作模式

上电或复位后,处理器将置于实地址模式。

只是为了踢一下,手册中的一个不错的图表:

在此处输入图片说明

GRUB在保护模式下启动多引导操作系统。Multiboot规范0.6.96机器状态

必须设置“ CR0”位0(PE)。

不确定GRUB和x86_64。


GRUB 在保护模式下启动符合Multiboot规范的操作系统。其中包括* BSD,但是据我所知,Linux不遵循此规范,而是自己做。当引导兼容Multiboot规范的OS时,GRUB配置使用multiboot关键字。对于Linux,有专用的linuxlinux16在UEFI版本的GRUB中,有linuxefi关键字,告诉GRUB使用特定于Linux的启动协议。
telcoM

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.