设计人员一般都会将硬件初始化的相关工作作为“bootloader”程序放在非
易失存储器中,而将操作系统内核放在磁盘中。这样的做法可有效解决上述的问题:
- 将硬件初始化的相关工作从操作系统中抽出放在 bootloader 中实现,意味着通过这种方式实现了硬件启动和软件启动的分离。因此需要存储的硬件启动相关指令不需要很多,能够很容易地保存在容量较小的 ROM 或 FLASH 中。
- bootloader 在硬件初始化完后,需要为软件启动(即操作系统内核的功能)做相应的准备,比如需要将内核镜像从存放它的存储器(比如磁盘)中读到 RAM 中。既然 bootloader 需要将内核镜像加载到内存中,那么它就能选择使用哪一个内核镜像进行加载,即实现多重开机的功能。使用 bootloader 后,我们就能够在一个硬件上选择运行不同的操作系统了。
- bootloader 主要负责硬件启动相关工作,同时操作系统内核则能够专注于软件启动以及对用户提供服务的工作,从而降低了硬件相关代码和软件相关代码的耦合度,有助于操作系统的移植。使用 bootloader 更清晰地划分了硬件启动和软件启动的边界,使操作系统与硬件交互的抽象层次提高了,从而简化了操作系统的开发和移植工作。
完整流程图如下所示: