BIOS, 启动自我测试与 MBR
我们必须要以一个启动管理程序来处理核心文件加载 (load) 的问题,因此这个启动管理程序就被称为 Boot Loader 了。那这个 Boot Loader 程序安装在哪里呢?就在启动装置的第一个磁区 (sector) 内,也就是我们一直谈到的 MBR (Master Boot Record, 主要启动记录区)。
Boot Loader 的功能
- 提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能!
- 加载核心文件:直接指向可启动的程序区段来开始操作系统;
- 转交其他 loader:将启动管理功能转交给其他 loader 负责。
图 1.2.2、 启动管理程序的菜单功能与控制权转交功能示意图
而最终 boot loader 的功能就是『加载 kernel 文件』啦!
- 加载核心侦测硬件与 initrd 的功能
当我们藉由 boot loader 的管理而开始读取核心文件后,接下来, Linux 就会将核心解压缩到主内存当中,并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。此时 Linux 核心会以自己的功能重新侦测一次硬件,而不一定会使用 BIOS 侦测到的硬件资讯喔!也就是说,核心此时才开始接管 BIOS 后的工作了。那么核心文件在哪里啊?一般来说,他会被放置到 /boot 里面,并且取名为 /boot/vmlinuz 才对!
[root@www ~]# ls --format=single-column -F /boot config-2.6.18-92.el5 <==此版本核心被编译时选择的功能与模块配置档 grub/ <==就是启动管理程序 grub 相关数据目录 initrd-2.6.18-92.el5.img <==虚拟文件系统档! System.map-2.6.18-92.el5 <==核心功能放置到内存位址的对应表 vmlinuz-2.6.18-92.el5 <==就是核心文件啦!最重要者!
图 1.2.3、 BIOS 与 boot loader 及核心加载流程示意图
第一支程序 init 及配置档/etc/inittab 与 runlevel
在核心加载完毕、进行完硬件侦测与驱动程序加载后,此时你的主机硬件应该已经准备就绪了 (ready) ,此时核心会主动的呼叫第一支程序,那就是 /sbin/init 罗。这也是为啥第十七章的 pstree 命令介绍时,你会发现 init 的 PID 号码是一号啦。/sbin/init 最主要的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等。而所有的动作都会透过 init 的配置档,亦即是 /etc/inittab 来规划,而 inittab 内还有一个很重要的配置项目,那就是默认的 runlevel (启动运行等级) 啦!
- Run level:运行等级有哪些?
那么什么是 run level 呢?他有什么功用啊?其实很简单啦, Linux 就是藉由配置 run level 来规定系统使用不同的服务来启动,让 Linux 的使用环境不同。基本上,依据有无网络与有无 X Window而将 run level 分为 7 个等级,分别是:
- 0 - halt (系统直接关机)
- 1 - single user mode (单人维护模式,用在系统出问题时的维护)
- 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS 服务)
- 3 - Full multi-user mode (完整含有网络功能的纯文字模式)
- 4 - unused (系统保留功能)
- 5 - X11 (与 runlevel 3 类似,但加载使用 X Window)
- 6 - reboot (重新启动)