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

aoe*_*eui 29 bios bootloader grub

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

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

此外,GRUB 手册说:简单地,引导加载程序是计算机启动时运行的第一个软件程序。BIOS 不是第一个运行的程序吗?

Ren*_*nan 29

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

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

来自Unix and Internet Fundamentals HOWTO

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

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

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

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


hai*_*img 11

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

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

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