【操作系统】系统引导

加载内核以启动计算机的过程,称为系统引导boosting。

大多数计算机系统都有一小块代码,称为引导程序或引导加载程序,这段代码能够定位内核并且加载到内存以开始执行。
有的计算机系统采用的方式是两步走:先用一个简单的引导程序从磁盘上调入一个更复杂的引导程序,后者再加载到内核。

当CPU收到一个重置事件时,例如上电开机或重新启动,指令寄存器会加载某个预先定义的内存位置,并从该位置开始执行。该位置就是初始引导程序所在。该程序为ROM形式,因为系统启动时RAM处于未知状态。由于不需要初始化和不受计算机病毒的影响,用ROM是很方便的。

引导程序可以完成一系列任务。通常,有一个任务需要运行诊断程序来确定机器状态。如果通过诊断,则程序可以继续启动步骤。引导程序也能初始化系统的所有方面:从CPU寄存器到设备控制器以及内存内容。最终,它启动操作系统。

有些系统,如手机、平板电脑和游戏控制器,将整个操作系统保存在ROM中。对于小型的操作系统、简单的支持硬件和耐用的操作,将操作系统存储在ROM中是适合的。该方法有一个问题:改动引导程序代码需要改动ROM芯片。为了解决这个问题,有些系统采用可擦可编程只读存储器(EPROM),这是一种ROM,但当明确给定一个命令时就会变为可写的。所有形式的ROM都是固件(firmware),因为它的特性介于硬件与软件之间。通常,固件存在的问题是:执行代码比在RAM中慢。有些系统将操作系统保存在固件中,而在要执行时将其复制到RAM中,以便执行更快。固件的最后一个问题是相对较贵,所以通常只有少量可用。

对大型操作系统(包括大多数的通用操作系统,如 Windows、Mac OS X和 UNIX)或经常改变的系统,引导程序存放在固件上,而操作系统存放在磁盘上。在这种情况下,引导程序会先进行诊断,然后从磁盘固定位置(如第0块)读取整块信息到内存,最后执行引导块的代码。存储在引导块的程序可能足以加载整个操作系统到内存,并开始执行。更典型地,它只是简单的代码(因为它要存放在单一的磁盘块上),并且只知道磁盘的地址以及引导程序其余部分的长度。GRUB是一个开源的例子,用于引导Linux系统。所有磁盘的引导程序和操作系统本身,通过向磁盘写入新的版本,就可以很容易地改变。具有引导分区的磁盘称为引导盘(boot disk)或系统盘(system disk)。

整个引导程序在加载后,就可遍历文件系统以寻找操作系统内核,将其加载到内存中,并开始执行。只有到这时,才说系统是在运行(running)。

上一篇:安卓rom开发!作为一名程序员我不忘初心,社招面试心得


下一篇:PAT A1087 All Roads Lead to Rome (30 分)