开关机流程(六)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、开机关机流程与Loader

1.开机流程简介

整个开机的程序是这样的:

1)加载BIOS的硬件信息,并取得第一个开机装置的代号;

2)读取第一个开机装置的MBR的boot Loader(亦即是lilo,grub,spfdisk等等)的开机

信息;

3)加载Kernel操作系统核心信息,Kernel开始解压缩,并且尝试驱动所有硬件装置;

4)Kernel执行init程序并取得run-level信息;

5)init 执行run-level的各个批次档(Scripts);

6)init执行/etc/rc.d/rc.local档案

7)执行/bin/login程序,并等待使用者登入

8)登入之后开始以shell控管主机

2.boot loader与Kernel载入

开机时第一个被读取的就是BIOS(Basic Input Output System),里面记录了主机板芯片组与相关的设定,读取了BIOS设定值之后,系统会根据BIOS的数据,进行开机自我测试(power on self test,POST),然后开始执行硬件侦测的初始化,并设定PnP装置,再定义出可开机的装置,之后开始进行开机装置的数据读取了(MBR相关的任务)。

然后主机开始尝试由储存媒体加载操作系统,系统会开始去第一个开机装置上面进行开机程序,读取硬盘的主引导扇区(Master Boot Record,MBR),而系统可以由主引导扇区所安装的开机管理程序(boot loader)开始执行核心辨识的工作。

当然,要加载Linux核心时,得使用支持Linux filesystem的boot loader了,目前主流的grub 开机管理程序,不但可以支持Linux,同时也支持Windows相关的核心系统。而Windows 的loader却不认识Linux的核心档案。

选择一个好的boot loader会具有两个功能,就是:菜单功能(menu)和指向功能(pointer)。读取核心档案后,Linux会将核心解压缩到主存储器中,并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。核心档案一般会被放置到/boot里面,并且取名为/boot/vmlinuz才对!

在加载核心过程中,系统只会【挂载想根目录】,且以只读的方式挂载。此外,为了让某些功能可以用档案的方式读取,会制作所谓的虚拟硬盘(RAM Disk)来辅助,那就是

initrd以及linuxrc的功用了。

利用boot loader的功能,可在加载核心的时候加载initrd的映像档(/boot/initrd-xxxx.img),Linux系统会主动的以initrd(man 4 initrd)来进行虚拟硬盘的建置,并且利用linuxrc(包含在initrd的映像档内)这个程序的功能来进行加载模块的动作。

Linuxr主要的特性是:

必须是linuxrc这个档名

必须放置在initrd所建立的虚拟硬盘的最顶层目录

必须要可以被核心所执行

在核心驱动周边硬件的工作完成之后,initrd所建立的虚拟硬盘就会被移除了。不过,initrd 并非必要,一般来说,各大Linux distributions在建立核心时,都会一起建立出这个initrd 的映像档,辅助开机的顺利进行。

总之,在这个过程中,boot loader可找到Linux的核心档案并将它加载到主存储器中,同时可由initrd建立的虚拟硬盘(RAM Disk)辅助开机的进行,最后,将读处BIOS的主机硬件数据交由Linux核心来进行侦测并加载适当的驱动程序(driver),让整个主机硬件准备系统的要求。整个流程有点像这样:

在在要

在核心完整的加载后,你的主机就开始正确的动作了。

3.第一支程序init及设定文件/etc/inittab与runlevel

整个Linux系统中第一支被执行的程序就是【/sbin/init】,它除了利用设定档【/etc/inittab】来取得开机的等级(run level)外,还会由这个run level的设定值来进行不同的开机服务项目的启动。

Linux是由设定run level来规定系统使用不同的服务来启动。基本上,依据有无网络与有无X Window而将run level分为六个等级。分别是:

1)Single user mode (单人维护模式,用在系统出问题时的维护)

2)Multi-user,without NFS(类似底下的run level 3,但无NFS服务)

3)Full multi-user mode(完整的含有网络功能的纯文字模式)

4)Unused(系统保留功能)

5)Xll(与run level 3类似,但使用X Window)

6)Reboot(重新开机)

开机是,系统的run level 是由/etc/inittab所设定的:

这个档案的语法是这样的:

所以可以得到这样的结论:

●如果不想让使用者【ctrl】+【alt】+【del】来重新启动系统,可以将底下这一行注释

掉:ca::ctrlaltdel:/sbin/shutdown –t3 –r now

●规定开机的预设run level是纯文字(3)或者是具有图形接口(X Window,5),可经由

【id:3:initdefault:】那个数字来决定!

4.init处理系统初始化流程(/etc/rc.d/rc.sysinit)

上面提到的/etc/inittab里有这一句【si::sysinit:/etc/rc.d/rc.sysinit】,这表示,我开始加载各项系统服务之前,得先做好整个系统环境,主要利用/etc/rc.d/rc.sysinit这个shell script 来设定好我的系统环境的。

/etc/rc.d/rc.sysinit主要的工作大抵有这几项:

1)取得网络环境与主机类型:

首先读取网络设定文件/etc/sysconfig/network,取得主机名称与预设通讯网关(gateway)等网络环境。

2)测试与挂载内存装置/proc及USB装置/sys:

除挂载内存装置/proc外,还会主动侦测系统上是否具有usb的装置,有则会主动加

相关文档
最新文档