Answers:
BIOS将需要知道如何加载内核,这会使BIOS过于复杂:想象一个BIOS,它需要知道如何加载许多可用的不同操作系统,如何将内核参数传递给它们等...
因此,它仅初始化硬件,并跳转到存储引导加载程序的已知位置。然后,将控件传递给它。
您可能想知道BIOS为什么不直接加载内核-为什么使用引导加载程序进行两步过程?好吧,BIOS不是很聪明。实际上,这是非常愚蠢的,并且Linux在引导时间之后根本不使用它。它最初是为具有小型磁盘的原始8位PC编写的,实际上无法访问足够的磁盘来直接加载内核。引导加载程序步骤还使您可以从磁盘上不同位置启动几个操作系统之一,以防Unix不能很好地满足您的情况。
至于BIOS是第一个运行的程序:(来自Wikipedia)
BIOS软件内置在PC中,是PC开机时运行的第一个代码(“启动固件”)。
但是固件就是软件。因此,我认为GRUB手册至少在这方面令人困惑;引导加载程序可以看作是在计算机上运行的第一个用户定义的软件。
原因是灵活性。一个硬盘上可能有多个不同的操作系统(Windows,Linux等),或者同一操作系统可能有多个不同的版本。因此,最好有一个与操作系统无关的代码,该代码了解硬盘上安装的每个OS所处的位置,如何加载每个OS,要加载哪个OS,是否显示菜单等。引导程序。
BIOS加载并执行位于硬盘(第一扇区)上预定义位置的代码。我们将此代码称为引导加载程序,但是从技术上讲,如果您将Windows安装在空白硬盘上,则该代码也由Windows安装,因此您可以将其称为Windows的一部分,尤其是因为Windows引导加载程序无法加载Windows以外的任何其他操作系统。
关于计算机启动时运行的第一个软件程序:固件/软件的区别非常小,现代计算机的启动过程非常复杂。BIOS本身也不是一个整体程序,而是几个不同的阶段链接在一起。但是,引导加载程序是运行的第一个用户可更改代码。这是用户可以破坏,擦除,感染病毒等的第一段代码。因此,我想虽然从技术上说BIOS是第一个运行的软件,但从某种意义上说,如果计算机无法启动用户所需的引导程序,则引导加载程序是第一个检查是否还可以。
为什么BIOS无法直接加载OS内核?
三个原因:
1981年推出时,原始PC平台上的BIOS的作用与CP / M操作系统中的作用相同-即,用于几个设备的薄抽象层和一个简单的磁盘引导程序。CP / M具有称为“ BDOS”的另一层,用于处理文件系统。DOS在许多方面与CP / M相似,因为它在当时很流行,并且结构类似。BIOS旨在处理平台的特定于硬件的方面,OS的驱动程序现在可以履行该角色。
文件系统与操作系统分离的概念尚未真正成立。
此时,RAM和ROM既昂贵又稀缺。只需低至16K的RAM即可获得原始的IBM 5150 PC(参考)。该系统的ROM大小为48K,其中包括一个BASIC解释器。那时也没有标准文件系统之类的东西。
由于DOS逐渐成为该平台上最受欢迎的操作系统,并且此后使用该设置的Windows,因此没有人考虑过以这种方式扩展BIOS来包括真正的引导加载功能。
我不确定UEFI的功能-它可能具有Windows真正的引导加载功能,由于某种原因Windows并没有使用它(Windows在安装时坚持使用它自己的引导管理器)。其他非BIOS固件(例如U-Boot以及许多电话和路由器中的固件)确实可以直接加载和运行内核。自从BIOS开始在ROM中腾出空间来做更多事情以来,这还没有任何技术原因。