我从书中学到计算机科学:概述 引导加载程序驻留在内存中
在通用计算机中,一个称为引导加载程序的程序永久存储在机器的 ROM 中。因此,这是机器打开时最初执行的程序。引导加载程序中的指令
然而,在其他书中,它指出引导加载程序位于硬盘上。
至于 BIOS
启动过程从 BIOS 开始。如第 3 章所述,您可以告诉 BIOS 使用哪个启动设备 - 硬盘、USB 棒、CD/DVD 驱动器或其他设备。假设您选择硬盘作为主启动设备(或者如果优先级较高的设备不可启动),BIOS 将从主引导记录 (MBR)(硬盘上的第一个扇区)加载代码。
对于 UEFI
为了工作,EFI 必须知道安装在硬盘 ESP 上的引导加载程序。
以另一种方式提出我的问题
me@host:~$ df -h | grep 'boot'
/dev/sda1 511M 7.3M 504M 2% /boot/efi
是否/boot/efi
位于内存中的 ROM 中?
答案1
不,这/boot/efi
是系统磁盘上的文件系统,通常是 FAT32 文件系统。
这里的术语远非统一:您的第一本书认为,BIOS 中负责选择要启动的磁盘以及从磁盘加载第一些东西的部分是引导加载程序……或者至少是主要的。
在 BIOS 固件中,嵌入在固件中的主引导加载程序的功能非常有限:它本质上只是从磁盘开头读取一个块,然后执行它。
在 UEFI 固件中,主引导加载程序功能更强大:它可以理解 FAT32 文件系统(也可以选择理解其他文件系统类型),因此它可以从指定的文件系统加载指定的文件,或者从任何受支持的文件系统的标准后备文件加载;对于 64 位 x86 系统,标准后备文件路径名是\EFI\BOOT\BOOTx64.efi
。
您的另一本书略过了启动过程的 BIOS 组件,而更侧重于启动过程的第二部分:磁盘上的引导加载程序,它可以(但不必)特定于正在启动的操作系统。这可以称为次要的如果您需要同时讨论引导加载程序和固件内的主要引导加载程序,则通常将磁盘上的辅助引导加载程序也简称为“引导加载程序”。但如果您不讨论系统固件的内部结构,通常也将磁盘上的辅助引导加载程序简称为“引导加载程序”。
用另一种术语来说,让我来描述一下 HP-UX 在 PA-RISC 硬件上是如何做到的:
- 该固件被称为 PDC。
- PDC 固件包含一个 ROM 内的引导加载程序,称为
IPL
,或初始程序加载器。顾名思义,它的工作就是加载和执行单个程序。 - IPL 例程从磁盘加载的第一个程序称为
ISL
,即初始系统加载程序。它的工作是加载实际的操作系统内核。它实际上首先加载了另一个模块,HPUX
该模块负责加载实际的 HP-UX 内核。
由于固件更新起来比较困难,因此将引导加载程序拆分成多个组件可以更轻松地更改操作系统内核的结构(如果开发创新需要):只有相对较小的(次要)引导加载程序 (ISL) 绝对需要符合固件 API 要求。如果需要,可以对任何后续组件进行重新编程,以完全不同地执行操作。