系统生成与系统启动

一、系统生成

        可以为某处的某台机器专门设计、编写和实现一个操作系统,然而操作系统通常设计成运行在一类计算机上,这些计算机位于不同的场所,并具有不同的外设配置。对于每个特定的计算机,必须要配置或生成系统,这个过程通常称为系统生成(SYSGEN,system generation)。

        操作系统通常通过磁盘或者CD-ROM来发布。为了生成一个系统,我们需要执行一个特殊的程序。SYSGEN程序从指定文件读取或者询问系统操作员关于指定硬件系统的特定配置,或直接检测硬件以确定硬件有哪些组件组成。下面几类信息必须要确定:

        1、使用什么CPU?安装什么选项(扩展指令集、浮点操作等)?对于多CPU系统,必须描述每个CPU

        2、需要什么操作系统选项或使用什么参数值?这些选项包括需要使用多少和多大的缓冲,需要什么类型的CPU调度算法,所支持的进程的最大数量是多少等等。

        3、有多少可用内存?有的系统通过对内存位置一个个地访问直到出现非法地址的方法确定这一值。该过程定义了最后合法地址和可用内存的数量。

        4、有什么可用设备?系统需要知道如何访问这些设备、设备中断号、设备类型和模型以及任何特殊设备的特点。

        一旦这些消息确定之后,可以有多种来使用它们。

        1、一种极端情况,系统管理员可以用这些信息来修改操作系统代码的源代码副本,接着完全重新编译操作系统。通过条件编译过程中伴随着数据声明、初始化和常量生成了为所描述的系统剪裁的操作系统的一个输出版本。

        2、对于一个稍微定制过的层,系统描述用来生成一个表,并从预先编译过的库中选择模块。这些模块链接在一起生成操作系统。选择这种机制允许库包含所有支持的I/O设备的驱动程序,但是只有是需要的才链接成操作系统。因为系统不需要重新编译,生成系统较快,但是生成的系统可能过分通用。

        3、另一种极端情况,可以构造一种完全由表驱动的系统。所有代码是系统的一部分,选择发生在执行时间,而不是编译或者链接时间。系统生成包含简单创建合适的表来描述系统。

        这些方法的主要区别是所生成系统的大小和通用性以及因硬件配置的改变修改系统的方便性。

二、系统启动

        系统生成后,必须要为硬件所使用。但是硬件如何知道内核在哪里,或者如何装入内核?装入内核启动计算机的程序称为引导程序。绝大多数计算机系统都有一小块代码,它称为引导程序或引导装载程序,它能定位内核,将内核装入内存开始执行。有的计算机系统,如个人计算机,采用两步完成:一个简单的引导程序从磁盘上调入一个较复杂的引导程序,而后者再装入内核。

        当CPU接收到一个复位事件——例如上电或者重新启动,指令寄存器被装入一个预先定义的存储位置,并在此位置处开始执行。这个位置就是引导程序的所在。该程序为只读存储模式(ROM),因为系统启动时RAM处于未知状态。由于不需要初始化和不受计算机病毒的影响,用ROM是很方便的。

        引导程序可以完成一系列任务。通常,有一个任务用来检测机器的状态,如果检测通过,程序可以继续按启动步骤运行。系统的所有部分都可以被初始化,从CPU寄存器到设备控制器以及内存的内容。最后,引导程序启动操作系统。

        一些系统——如手机、PADs和游戏控制台——在ROM中保存完整的操作系统程序。在ROM中存储操作系统适合于小的操作系统,它支持简单的硬件和操作。这种方法存在的一个问题是:改变引导程序代码需要更换ROM芯片。一些系统通过使用可擦写只读存储器(EPROM)来解决这个问题,它是一个只读存储器,只是当明确给定一个命令时才变为可写。所有形式的ROM都是固件,因为它们的特性介于硬件和软件之间。通常,固件存在的问题是在此执行代码比在RAM中慢。有些系统将操作系统存储在固件中,并将之复制在RAM中以获取更快的执行速度。使用固件的最后一个问题是它相对比较贵,因此通常用得很少。

        对于大型操作系统(包括大多数通用的操作系统,如Windows、Mac OS X和UNIX)或经常需要改变的系统,引导程序被存储在固件中,而操作系统保存在磁盘上。这种情况下,引导程序运行诊断程序,它有一小段代码,这段代码能够从磁盘固定位置(0区块)读取整块信息到内存,并从引导块执行代码。存储在引导块的程序可能足够复杂,可以将一个完整的操作系统装载到内存并开始执行。更为通用的是,代码很简单(适合于单磁盘区块),仅仅知道磁盘上的地址以及引导程序余下的长度信息。所有这些磁盘绑定的引导程序和操作系统本身可以通过向磁盘写入新的版本,从而很容易地进行改变。具有引导分区的磁盘被称为引导磁盘或系统磁盘。

        现在引导程序已经被完全装入,它可以扫描文件系统以找到操作系统内核,将之装入内存,启动并执行。只有到了这个时候才能说系统开始执行了。

你可能感兴趣的:(系统生成与系统启动)