Linux系统启动过程

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

Linux系统启动过程

Red Hat Enterprise Linux启动流程图

一.初始化BIOS

& 计算机开机后首先会初始化BIOS,总的来说BIOS任务有二:

其一,检测所有外置硬体设备,收集信息,以便以后给操作系统使用;

其二,根据BIOS设置的设备启动顺序,寻找启动磁盘,以引导系统启动。

二.执行启动加载器

& BIOS找到启动磁盘后,接下来就会启动磁盘中的“操作系统”。所谓找到启动磁盘,通常是指找到硬盘的第一个扇区,这个扇区也即启动扇区(Boot Sector),也称为主要启动记录(Master Boot Record,MBR)扇区。

& 系统找到启动记录扇区后会执行并启动位于这个扇区中的前446字节空间中的“操作系统”,但由于操作系统不可能只有446字节的大小,所以这个空间无法存储真实的操作系统,为了解决这个问题人们采取了程序调用的方式,也即,在这个446字节的空间中存储一个程序,再由这个程序加载存储于其它位置的操作系统。

& 这个小存储于446字节中的小程序就是:启动加载器(Boot Loader),在Red Hat 的各版本Linux中,早期的加载器多为LILO,现在多为GRUB。

三.载入内核

& 当BIOS顺利执行启动加载器后,启动加载器会寻找存储于其它扇区中的操作系统,然后启动操作系统。当然,启动操作系统前肯定是要先启动内核的,不过,在启动内核前可以通过启动加载器(GRUB)传递一些参数(内核启动参数)给内核,以便让内核能够改变启动方式(如,Run level),或取得启动时一些重要的信息。

& Linux 内核启动后,会执行以下几项工作:

1.检测所有硬件设备

& 内核会首先向BIOS查询计算机硬件设备信息,然后接管设备,以提供给系统使用;

2.驱动硬件设备

& 系统要想使用这些硬件设备必须加载硬件设备的驱动程序。驱动程序可分为编译在内核镜像文件中的静态驱动程序(Static Driver)和存储于文件系统上的内核模块中的动态驱动程序(Dynamic Driver),由于此时文件系统尚未挂载,所以内核此时只会用静态驱动程序来驱动一些必要的硬件设备;

3.以只读方式挂载根文件系统

& 接着Linux内核会试着以只读的方式挂载根文件系统,根文件系统至少包含以下目录: /etc/ :存储重要的配置文件;

/bin/ :存储常用且开机时必须用到的执行文件;

/sbin/ :存储开机过程中所需要的系统执行文件;

/lib/ :存储/bin/ 与/sbin/ 的执行文件所需的链接库,以及Linux内核模块;

/dev/ :存储设备文件;

& 挂载根文件系统的目的有两个:

其一,安装适当的内核模块,以便驱动某些硬件设备或启用某些功能;

其二,启动存储于根文件系统中的init服务,以便让init服务接手后续的启动工作;

$ 内核启动的最后一个动作就是从根文件系统上找出并执行init服务

Linux内核会根据下列顺序寻找init服务:

1)找/sbin/下是否有init服务

2)/etc/init

3)/bin/init

4)如果前面三个目录里都找不到,最后就会执行/bin/sh

$ 如果内核都找不到init服务,则内核就会显示“Kernel panic not syncing :Attempted to kill init”的错误信息,系统启动终止;

$ 如果内核在以上的目录中找到init,则内核就会启动init服务,让init服务负责后续初始化系统使用环境的工作;

& init启动后,就代表内核已顺利启动,系统启动进入初始化系统环境阶段。

四.启动INIT服务

& 启动init服务时,init服务会读取/etc/inittab文件,根据/etc/inittab文件中的设置数据进行初始化系统环境的工作。/etc/inittab文件定义init服务在RHEL启动过程中必须依序执行以下几个Script:

/etc/rc.d/rc.sysinit

/etc/rc.d/rc

/etc/rc.d/rc.local

1./etc/rc.d/rc.sysinit

& /etc/rc.d/rc.sysinit 主要的功能是设置系统的基本环境,当init服务执行rc.sysinit时,会执行以下几项工作:

1)启动Udev 与SELinux

2)设置内核参数

3)设置系统时间

4)加载键盘对应表

5)启用置换内存空间

6)设置主机名

7)检查并挂载所有文件系统

8)初始化硬件设备

9)启用软件磁盘阵列与LVM

10)如有必要,卸载/initrd/

11)初始化串行端口设备

12)清除过期的锁定文件与IPC文件

13)重新设置磁盘参数

2./etc/rc.d/rc

& /etc/rc.d/rc 用来建立Runlevel的环境,在不同的运行级别中调用相应级别的环境参数。

3./etc/rc.d/rc.local

& 整个系统启动过程中rc.local 是唯一一个可以修改的RC Script,如果你希望在RHEL启动过程中执行某些命令,或者执行某些工作的话,那么你可以将相关命令在这个文件中定义,当RHEL开机并执行到rc.local 时,就可以依照你所定义的内容,完成系统的初始化。

4.建立用户接口

& 在执行完3个主要的RC Script 后,init服务的最后一个工作就是建立RHEL的用户界面。

此时init会执行以下两项工作:

建立虚拟控制台

默认在系统中建立6个虚拟控制台,在TTY1-TTY6中执行/bin/login登录程序;

建立图形使用接口的登录程序

若默认进入级别5,则启动X Window System图形化使用接口的登录程序。

& 至此,RHEL结束整个系统启动过程,进入系统。

五.其它相关

1.Runlevel

& 通常Run level 由以下几种:

Runlevel 0 关机

Runlevel 1 单用户模式仅root用户可登

Runlevel 2 多人模式无网络

Runlevel 3 命令行模式

Runlevel 4 保留

Runlevel 5 图形模式

Runlevel 6 重新启动

& 查看目前的Runlevel

【root@linux ~】# runlevel

N 5

-----前面的数字代表之前运行的级别,这里为N说明开机默认级别为5,后面的数字为当前系统的运行级别。

& 切换至不同的Runlevel,直接在init后空格输入要运行的启动级别数字即可,如:【root@linux ~】# init 3

----表示将系统切换至运行级别3,即命令行运行模式

2.管理init服务

& 在RHEL系统启动过程中,init服务是系统第一个执行的程序,它主要负责以下几项任务: 建立系统使用环境;

确保系统正常运行;

监控串行端口的周边设备;

拦截并处理【Ctrl + Alt + Del】事件;

PID(进程标识符)永远为1;

所有程序都可视为其子进程,因此无法被系统管理者中止。

相关文档
最新文档