系统的启动是指从开始引导操作系统直到系统正常工作的过程。在启动之初,操作系统被装入内存并且开始执行,这个执行过程中将进行大量初始化操作以提供某些服务如">打印服务,网络服务等。
用户,特别是系统管理员必须详细了解系统启动全过程的各个具体细节。启动是整个系统运行期间最脆弱、最容易出现问题的时候。稍有不慎,整个系统将无法正常启动,或正常启动了,却无法正常工作。
虽然UNIX系统被设计成一种可以可以永不关机的系统,但实际操作中却由于各种各样的原因,不得不在一定的时候将机器关闭,如电源出现问题,系统出现严重故障等。UNIX系统的复杂性不允许我们想关机时就直接切断电源,这样做会对整个系统造成极大的破坏,如用户数据丢失,文件系统结构的不一致等。所以关机过程必须遵守一定的规范才行。
在这一章中我们主要介绍如下几个问题:
系统的启动过程 介绍UNIX系统从加电到系统完全可用的全过程中的各个执行细节。
系统的关闭 介绍关闭系统的方法及关闭系统时应该注意的一些问题。
系统的启动过程
大多数的UNIX系统的启动都有两种方式:
自动启动 在这种方式下,系统可以不经任何人工的干预而自动完成启动的全过程。
手工启动 在系统启动过程到达某一点时,系统管理员可以进行一些人工的干预,如对文件系统进行检查,设置系统的日期等等。然后系统将继续进行引导。
通常这两种方式的最终效果是一样的。正常情况下,加电后系统均能自动启动至准备好状态。但在系统遇到一些人为破坏,如突然断电,系统发生崩溃或者系统管理员做了某种修改时,经常会需要手工引导。
我们可以把整个UNIX系统的启动过程大致划分为如下几个阶段:
操作系统装入程序(PDL)的加载
UNIX系统核心程序的装入
UNIX系统内核的初始化
硬件的检测和配置
系统进程的生成
管理人员的干预(自动启动时无此阶段)
系统初始化shell脚本的执行
各终端进程的生成
操作系统装入程序的加载
大多数计算机系统的操作系统都是驻留在系统的硬盘中的。一般可以把硬盘的存储空间分成几个不同的相互连接的片段,每个片称为一个硬盘分区。绝大多数硬盘都可被划分为四个分区。在各个分区中可以装载不同的操作系统。(对于专用的工作站或者主机系统,一般只装载一个UNIX系统)
在硬盘的多个分区中,有一个分区被称为是系统的活动分区。活动分区中的操作系统会在系统加电的时候被引导。
大多数机器在加电时均会转移到一特定的地址去执行存储在ROM中的程序。如果是从软盘上引导,这个程序将读取软盘上引导扇区(0头、0道、1扇区)中操作系统核心代码,再将控制交给核心程序,由此开始核心程序的装入和运行。但对于从硬盘上引导系统的情形,ROM载入程序装入的不是操作系统而是另外一段代码,这段代码在被装入到内存中后将获得控制权而得以执行,然后由它去装入UNIX系统。
一般而言,这段代码将位于硬盘0头、0道、1扇区。该扇区主要包括两部分的信息:主引导程序和分区信息表。其内容是由硬盘分区程序对硬盘进行分区时建立的。
在主引导程序被装入之后将获得CPU控制权而得以执行。执行时它会对分区信息表进行扫描,看哪个分区为活动分区,并试图装入该分区第一扇区的操作系统引导程序,由此开始操作系统核心的引导.
UNIX系统核心程序的装入
在操作系统获得系统控制权之后,我们可以说此时UNIX系统已经开始运行了,载入程序在执行时,将从硬盘活动分区中一个特定的地方(该分区的第一个扇区)装入操作系统的源代码:UNIX系统内核。UNIX系统内核实际上是一个程序,其名称一般是/unix或者/vmunix,名称随生产厂家的不同可能会有些差异。
在内核被装入的时候,屏幕上会显示:
Booting the UNIX system......
若此时按下任意键,系统核心装入程序将允许用户输入欲装入的其它核心程序的文件名。此时装入程序会显示:
boot:
用户可以在冒号后输入其它的某个核心程序的名称。
为什么要提供这种功能呢?因为在许多情况下我们需要对系统内核进行重新配置,以生成新的核心程序,而老的核心程序可以保留到另外一个文件中。新的核心程序可能不能成功地启动系统,这种情况下我们就可用这种方法装入原来的核心程序引导系统。
如果并不想真的装入其它内核,可以不作任何操作或者仅仅按一下回车。稍后,装入程序会装入缺省的内核。
系统内核是UNIX常驻内存的部分。内核装入程序从磁盘上装入核心程序之后,将把控制权交给新装入的内核,从而使之得以运行。
系统内核的初始化
核心程序开始执行时,UNIX系统内核的初始化工作就开始了。内核会检查内存,以前我们知道,系统内核会占据物理内存的低端并固定在此空间中运行。内核将检查系统中内存的总数,计算出自己占用多少,剩下多少可以供普通进程使用,这就是启动信息中关于内存的部分。
文件系统高速缓冲部分也会占用部分内存空间。内核的各种内部数据结构,如页表,进程结构表(proc结构),所以系统内存并不是仅仅等于内核的大小加上可用的内存的大小。
硬件的检测和配置
内核完成自身的初始化之后,它将对系统中所安装的各种硬件进行检测。由于每种系统的硬件千差万别,很难对这个过程进行一般性的说明。
系统管理员在配置内核时,将告诉系统要处理那些设备,当内核完成初始化之后,它将开始寻找这些设备,并且按照系统管理员的设置对这些设备进行初始化配置。大多数情况下,内核将报告它应该找到但是由于种种原因没有找到的设备。
在配置内核时候,系统管理员说明的设备信息往往是不充分的。这种情况下,内核将通过检查与设备连接的总线及相应的设备驱动程序来获得关于设备的其它信息。如果某设备未被找到或者用于某种原因未能对内核检测作出响应,内核将标记该设备为不存在,同时时相应的设备驱动程序不再起作用。此时即使设备和系统连接恢复正常上,该子系统也不能被使用。要想使用这个设备,只有重新启动系统。