什么是引导加载程序
编辑当计算机关闭时,其软件—包括操作系统、应用程序代码和数据—仍存储在非易失性存储器中。当计算机开机时,它通常没有操作系统或其随机存取存储器(RAM)中的加载程序。计算机首先执行存储在只读存储器(ROM,后来是EEPROM,NOR闪存)中的一个相对较小的程序以及一些需要的数据,以初始化RAM(特别是在x86系统上)以访问非易失性设备(通常是块设备,例如NAND闪存)或可以将操作系统程序和数据加载到RAM中的设备。
启动此序列的小程序称为引导加载程序、引导程序或引导加载程序。
一些较早的计算机系统,在接收到来自操作人员或xxx设备的启动信号时,可能会将非常少量的固定指令加载到特定位置的内存中,初始化至少一个CPU,然后将CPU指向指令和开始他们的执行。这些指令通常从一些xxx设备(可由操作员开关选择)启动输入操作。其他系统可能会直接向xxx设备或I/O控制器发送硬件命令,这些命令会导致执行极其简单的输入操作(例如“从位置1000开始将系统设备的扇区0读入内存”),从而有效地加载一个小的进入内存的引导加载程序指令数量;
较小的计算机通常使用不太灵活但更自动的引导加载程序机制,以确保计算机以预定的软件配置快速启动。在许多台式计算机,例如,该自举过程的CPU执行软件开始包含在ROM(例如,BIOS一个的IBMPC或IBMPC兼容)在预定义的地址(某些CPU,包括IntelX86系列是设计用于在没有外部帮助的情况下重置后执行该软件)。该软件包含搜索有资格参与引导的设备的基本功能,并从特殊部分(最常见的是引导扇区)加载小程序)的最有希望的设备,通常从固定的入口点开始,例如扇区的开始。
xxx阶段引导加载程序
编辑引导加载程序可能面临特殊的限制,尤其是在大小方面;例如,在早期的IBMPC和兼容机上,引导扇区通常应该只在32KB(后来放宽到64KB)的系统内存中工作,并且只使用原始8088/8086处理器。位于固定磁盘和可移动驱动器上的PC引导加载程序的xxx阶段(FSBL,xxx阶段引导加载程序)必须适合主引导记录的前446字节,以便为默认的64字节分区表留出空间,其中有四个分区条目和两字节引导签名,BIOS需要适当的引导加载程序-甚至更少,当附加功能,例如超过四个分区条目(最多16个,每个16字节)、磁盘签名(6字节)、磁盘时间戳(6字节)时,一个先进的动态分区(18个字节)或特殊多重引导加载器必须在某些环境中也支持。在软盘和超级软盘卷引导记录中,自DOS4.0起,FAT12和FAT16卷上的扩展BIOS参数块最多占用59个字节,而FAT32随DOS7.1引入的EBPB甚至需要87个字节,假设扇区大小为512个字节时,引导加载程序只剩下423个字节。因此微软引导扇区传统上对引导过程施加了一定的限制,例如引导文件必须位于文件系统根目录中的固定位置并作为连续扇区存储,条件小心的SYS命令,在更高版本的DOS中稍微放松。[nb1]然后引导加载程序能够将文件的前三个扇区加载到内存中,这恰好包含另一个嵌入式引导加载程序,能够将文件的其余部分加载到内存中。当微软添加LBA和FAT32支持,他们甚至切换到超过两个物理扇区的引导加载程序,并出于大小原因使用386条指令。与此同时,其他供应商设法将更多功能压缩到单个引导扇区中,而没有放松对仅最小可用内存(32KB)和处理器支持(8088/8086)的原始限制。[nb2]例如,DR-DOS引导扇区能够在FAT12、FAT16和FAT32文件系统中定位引导文件,并通过CHS或LBA将其整体加载到内存中,即使该文件未存储在固定位置和连续扇区。[nb3][nb2]
BIOS(在现代x86系统中)和UEFI不仅从非易失性设备加载操作系统,还为操作系统初始化系统硬件。
xxx阶段引导加载程序的示例包括BIOS、coreboot、Libreboot和DasU-Boot。
第二阶段引导加载程序
编辑第二阶段引导加载程序,例如GNUGRUB、rEFInd、BOOTMGR、Syslinux、NTLDR或iBoot,它们本身不是操作系统,但能够正确加载操作系统并将执行转移给它;操作系统随后会自行初始化并可能加载额外的设备驱动程序。第二阶段引导加载程序不需要驱动程序来进行自己的操作,而是可以使用系统固件提供的通用存储访问方法,例如BIOS或OpenFirmware,尽管通常具有受限的硬件功能和较低的性能。
许多引导加载程序(如GNUGRUB、rEFInd、Windows的BOOTMGR、Syslinux和WindowsNT/2000/XP的NTLDR)可以配置为给用户多个引导选择。这些选择可以包括不同的操作系统(用于从不同分区或驱动器进行双重或多重引导)、同一操作系统的不同版本(以防新版本出现意外问题)、不同的操作系统加载选项(例如,引导到救援或安全模式),以及一些无需操作系统即可运行的独立程序,例如内存测试器(例如memtest86+)、基本外壳(如在GNUGRUB中),甚至游戏(请参阅PCBooter游戏列表)。一些引导加载程序也可以加载其他引导加载程序;例如,GRUB加载BOOTMGR而不是直接加载Windows。通常,默认选项是预先选择的,并带有时间延迟,在此期间用户可以按一个键来更改选项;在此延迟之后,默认选项将自动运行,因此无需交互即可正常启动。
当计算机准备好与用户交互时,或者操作系统能够运行系统程序或应用程序时,可以认为启动过程已经完成。
许多嵌入式系统必须立即启动。例如,等待数字电视或GPS导航设备启动一分钟通常是不可接受的。因此,此类设备在ROM或闪存中具有软件系统,因此设备可以立即开始运行;很少或根本不需要加载,因为加载可以在设备制造时预先计算并存储在ROM中。
大型复杂系统可能具有分多个阶段进行的引导程序,直到最终加载操作系统和其他程序并准备好执行。由于操作系统被设计为永不启动或停止,引导加载程序可能会加载操作系统,将自身配置为该系统内的一个进程,然后不可撤销地将控制权转移给操作系统。引导加载程序然后像任何其他进程一样正常终止。
网络启动
编辑大多数计算机还能够通过计算机网络启动。在这种情况下,操作系统存储在服务器的磁盘上,其中的某些部分使用简单的协议(例如普通文件传输协议(TFTP))传输到客户端。传输这些部分后,操作系统将接管引导过程的控制。
与第二阶段引导加载程序一样,网络引导通过使用网络接口引导ROM提供的通用网络访问方法开始,该引导ROM通常包含预引导执行环境(PXE)映像。不需要驱动程序,但系统功能受到限制,直到操作系统内核和驱动程序被传输和启动。因此,一旦基于ROM的引导完成,就完全有可能通过网络引导进入一个本身不具备使用网络接口能力的操作系统。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/125644/