为什么我们需要引导加载程序?

为什么我们需要引导加载程序?

据我所知,在 BIOS 或者类似固件启动后,控制权将传递给引导加载程序。

为什么BIOS不能直接加载OS内核?

此外,GRUB 手册还指出:简而言之,引导加载程序是计算机启动时运行的第一个软件程序BIOS不是第一个运行的程序吗?

答案1

BIOS 需要知道如何加载内核,这会使 BIOS 过于复杂:想象一下 BIOS 需要知道如何加载可用的许多不同操作系统,如何将内核参数传递给它们等等……

因此,它仅初始化硬件并跳转到存储引导加载程序的已知位置;然后将控制权传递给它。

Unix 和 Internet 基础知识

您可能想知道为什么 BIOS 不直接加载内核 — 为什么引导加载程序要分两步进行?好吧,BIOS 不是很智能。事实上它非常愚蠢,Linux 在启动后根本不使用它。它最初是为带有微型磁盘的原始 8 位 PC 编写的,实际上无法访问足够的磁盘空间来直接加载内核。引导加载程序步骤还允许您从磁盘上的不同位置启动多个操作系统之一,以防 Unix 对您来说不够好。

至于 BIOS 是第一个运行的程序:(来自维基百科

BIOS 软件内置于 PC 中,是 PC 开机时运行的第一个代码(“启动固件”)。

但是固件软件。所以我认为 GRUB 手册至少在这方面令人困惑;引导加载程序可以看作是第一个用户自定义在计算机上运行的软件。

答案2

原因在于灵活性。您可能在一个硬盘上安装了多个不同的操作系统(Windows、Linux 等),或者您可能安装了同一操作系统的多个不同版本。因此,最好有一段独立于操作系统的代码,它知道每个操作系统安装在硬盘上的位置、如何加载每个操作系统、加载哪个操作系统、是否显示菜单等。这就是引导加载程序。

BIOS 会加载并执行位于硬盘上预定义位置(第一个扇区)的代码。我们将此代码称为引导加载程序,但从技术上讲,如果您在空白硬盘上安装了 Windows,则此代码也是由 Windows 安装的,因此您可以将其称为 Windows 的一部分,尤其是因为 Windows 引导加载程序无法加载除 Windows 之外的任何其他操作系统。

关于计算机启动时运行的第一个软件程序:固件/软件的区别非常小,现代计算机的启动过程非常复杂。BIOS 本身也不是一个整体程序,而是几个不同的阶段串联在一起。然而,引导加载程序是第一个用户可更改运行的代码。这是用户可以损坏、删除、感染病毒等的第一段代码。因此,我认为,虽然从技术上讲 BIOS 是第一个运行的软件,但引导加载程序在某种意义上是第一个运行的软件,如果计算机无法启动,用户需要检查它是否正常。

答案3

为什么BIOS不能直接加载OS内核?

三个原因:

  • 1981 年推出的原始 PC 平台上的 BIOS 旨在发挥与 CP/M 操作系统相同的作用 - 即为几个设备和一个简单的磁盘引导加载程序提供一个薄的抽象层。CP/M 还有另一个层,称为“BDOS”,用于处理文件系统。DOS 在许多方面与 CP/M 相似,因为它是当时流行的操作系统,并且结构相似。BIOS 旨在处理平台的硬件特定方面,而操作系统中的驱动程序现在承担了这一角色。

  • 文件系统与操作系统分离的概念尚未真正流行。

  • 在当时,RAM 和 ROM 是昂贵且稀缺的资源。最初的 IBM 5150 PC 仅需 16K RAM 即可获得(参考)。该系统的 ROM 大小为 48K,其中包括一个 BASIC 解释器。当时也没有标准文件系统。

由于 DOS 逐渐成为该平台上最流行的操作系统,并且此后 Windows 也与该设置兼容,因此没有人想到以这种方式扩展 BIOS 以包含真正的引导加载功能。

我不确定 UEFI 的功能 - 它可能具有真正的引导加载功能,但由于某种原因 Windows 并未使用它(Windows 坚持在安装时使用自己的引导管理器)。其他非 BIOS 固件(如 U-Boot 以及许多手机和路由器中的固件)确实会直接加载和运行内核。自从 BIOS 开始在 ROM 中留出空间来做更多事情以来,就没有技术原因了。

相关内容