计算机如何知道要启动哪个操作系统?

Mat*_*box 11 boot hard-drive bootloader partitioning multi-boot

当我打开我的计算机时,选择启动哪个操作系统的软件是什么,当给出多个选项时它如何决定?

更具体地说,如果我的计算机在同一个磁盘上有多个操作系统怎么办?如果我有外部驱动器怎么办 - 它是否会在所有存储设备的每个分区中搜索它识别的格式?

根据我的理解,每个磁盘都有自己的引导扇区,其中包含有关计算机应该引导哪个分区的信息。但是,如果我连接了多个磁盘,每个磁盘都有不同的引导扇区,它会加载哪个引导扇区呢?

在尝试研究这个主题时,我遇到了一些困惑,因为并非所有技术的行为都相同(例如,有人说可引导标志很重要,而其他人说它被忽略了)。非常感谢不同系统如何工作的一些清晰度。

dav*_*dgo 15

不幸的是,随着计算机的发展,这变得更加复杂。

最初(即第一台 PC)有一个固定的顺序(取决于布线)。

几乎所有的计算机仍然有一个默认的启动顺序,可以由 BIOS 控制/影响。较新的计算机使用 UEFI 补充此功能,在某些方面取代了 BIOS。

对于 BIOS 启动,有一个首选顺序。BIOS 会查看每个驱动器的可引导引导扇区,并尝试加载这些引导扇区,并在其选项列表中向下查找,直到启动。

对于 UEFI,磁盘上有一个文件系统,(一个标记为 UEFI 的小胖分区,其中包含第一阶段引导加载程序和指令。在某些情况下,这是由编程到 UEFI 中的指令补充的(即存储在类似于 BIOS 的 nvram 中的设置) )

一旦找到引导加载程序/UEFI 分区,程序就会接管引导过程,这可能提供引导到不同模式或操作系统的能力。

  • @TOOGAM 你有一个链接,可以用简单的、可能是外行的术语和图表来解释所有这些吗? (2认同)

Vil*_*lx- 6

正如其他人所说,它变得有点复杂,但我理解的方式是:

当计算机第一次开机时,您的硬盘驱动器根本不重要。主板上的芯片中有一个特殊的软件,它首先加载,然后 CPU 开始执行。这被称为 BIOS 或 UEFI(UEFI 实际上是 BIOS 的继承者)。

这段代码做了一些初始化硬件的工作,然后开始寻找下一个要将控制权传递给的东西。现在,究竟是什么取决于很多事情。有许多可能的选项 - 您的内部硬盘驱动器、外部驱动器、网络适配器、RAID 控制器、附加​​卡等。

BIOS/UEFI 还具有确定检查这些选项的顺序的设置。它将按照配置的顺序遍历它们中的每一个并询问 - “您可以继续启动吗?” 并且设备会说“是”或“否”。第一个说“yay”的人继续。然后该设备为 BIOS 提供一段代码,该代码加载到内存中,CPU 继续执行该代码。

在硬盘驱动器的特殊情况下,磁盘本身并不真正知道它是否可以启动。因此,BIOS 所做的是读取驱动器的第一个扇区(传统上为 512 字节)并检查该扇区特定位置中的特殊几个字节。如果它们包含值 55 AA(十六进制),则该扇区将作为代码执行。否则它会继续检查下一个磁盘。

现在,512 字节并不是很多空间,但足以做一些简单的事情。例如,经典的DOS摆在那里一个位的代码中发现标记为“引导”一个分区,然后再装的第一个扇区的是分区,然后被执行。下一个扇区包含足够的代码来加载更多的扇区,然后开始解析文件系统,并从中加载文件,依此类推。

但实际上,没有什么可以说明这段代码必须做什么。它也不能加载活动分区,而是加载磁盘上更多代码所在的其他一些扇区。然后该代码可以为您提供一个菜单,允许在多个可引导分区或操作系统或其他任何内容中进行选择。

无论如何,驱动器第一个扇区中的代码称为“引导加载程序”。那里有不同的引导加载程序。现在的 Linux 世界严重依赖 grub,Windows 有自己的东西,等等。引导加载程序确实出现操作系统之前,但它确实需要知道如何将操作系统加载到内存中并对其进行控制。

这是否使它更清楚?


Ger*_*lle 0

计算机内置有软件,您可以对其进行配置以指示哪个磁盘应该排在第一、第二(如果第一个不可用)、第三等。

这曾经是“BIOS”,存储在 eeprom 中(由电池供电)。但目前它已经变得更加复杂,甚至内置了基于Linux的操作系统(这可能使您的计算机容易受到外部攻击)。

每个磁盘都有一个分区表,不一定有引导扇区。