linux系统启动流程(CentOS5/6/7为例)

一个操做系统要完整启动起来须要哪些步骤呢?今天以CentOS为例探索一下linux的启动流程;
linux

1、Linux系统的组成--kernel+rootfs(根文件系统)c#

kernel: 内核,进行进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等等centos

rootfs: 根文件系统安全

1.内核设计流派:服务器

            单内核(monolithic kernel): Linux网络

                把全部功能集成于同一个程序架构

            微内核(micro kernel): Windows, Solariside

                每种功能使用一个单独子系统实现模块化

2. Linux内核特色:spa

                支持模块化: .ko(内核对象)

                如:文件系统,硬件驱动,网络协议等

                支持内核模块的动态装载和卸载

     组成部分:

核心文件:放置在/boot/分区下的vmlinuz-VERSION-release.el[567].X86_64

模块文件:/lib/modules/VERSION/kernel目录下

ramdisk:辅助的伪根系统,用于内核不能驱动文件系统时临时驱动;

5:/boot/initrd-2.6.18-398.el5.img

6/7:

/boot/initramfs-2.16.32-573.el6.x86_64.img

/boot/initramfs-3.10.0-327.el7.x86_64.img

2、启动流程详解:

wKioL1l7TDjA1jGMAACefEYEBR0544.jpg-wh_50

第一部分针对的是内核空间的系统初始化:

Step1.POST:Power-On Self Test 加电自检

 那么谁来执行这次检测操做--答案是只有cpu能够进行运算固然是由它来进行

 因为刚接通电源时,内存是没有数据的。所以,x86架构的主板上的ROM就能够供应这样的数据;

 主板上的芯片:南桥北桥芯片。就能够把ROM存储器里的内容直接映射到内存;从而可以让CPU读取和加载指令和数据;

 所以咱们能够说,X86架构的CPU能够线性寻址的物理存储空间:ROM + RAM;

Step2.BootSequence:能够理解为启动顺序;

 第一步自检成功,能够正常运行以后。系统应该去寻找包含操做系统的硬件设备,完成系统启动;

 而BootSequence的做用就是:决定到何种硬件设备上去加载操做系统;是Removable Device?仍是    Hard Drive、CD-ROMS?亦或是网络启动?

 而加载方式是:按照指定的次序查找各个引导设备,第一个被找出具备引导程序的设备即成为本次启动所用到的设备;

Bootloader:引导加载器,也是一个程序;存在于硬盘的0磁道0扇区共512字节,其中

446B bootloader

64B  FAT 分区表

其他2字节 55AA 是结束标记

那么Bootloader有哪些呢:

  在Windows里是NTLDR,全称是NT Loader,是系统加载程序;

  Linux:

   1.LILO(Linux Loader): 早期引导程序,到目前位置也是使用很是普遍的一种引导程序。可是在咱们 计算机里不经常使用,由于不支持大硬盘启动(不超过1024柱面);安卓手机通常用的就是这个;

   2.GRUB(GRand Uniform Bootloader): 通常架构在服务器和普通PC上;还能够引导unix甚至是Windows(8以前);


GRUB提供的功能:

1.为用户提供一个菜单,菜单中列举的是各个能够启动的操做系统的内核;

2.能够将用户选定的内核的核心文件装载到内存中去,解压缩而且展开,grub将系统控制权移交给内核;

3.提供一个交互式的命令行接口;

4.提供菜单和内核启动的安全保障;

Step3.内核自身初始化:

1) 探测可以识别到的全部的硬件设备

2) 加载硬件的驱动程序;有可能须要用到ramdisk

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

4) 运行用户空间的第一个应用程序 /sbin/init

Step4.init程序的类型

CentOS 5及以前,SysV Init - Classic Init;配置文件:/etc/inittab只有这一个

CentOS 6 :upstart init 配置文件:有/etc/inittab 但几乎被废弃!惟一的功能是设置启动级别,会在后面说到,其他的配置文件都在 /etc/init/*.conf

CentOS 7 : 彻底废弃了inittab文件,但依然存在,只是简单说明了CentOS 7已经不使用这个文件而是使用全新的Systemd方式;其配置文件/usr/lib/systemd/system/*

/etc/systemd/system/*


第二部分是用户空间的开启:

kernel加载了第一个程序Init程序后,转入后台,init进程接管进程管理的任务

Step1:设置系统的运行级别--runlevel

表示process的action要在哪一个级别下运行,该段中能够定义多个运行级别,

0:表示关机

1:表示单用户模式,在这个模式中,用户登陆不须要密码,默认网卡驱动是不被加载,一些服务不能用2:表示多用户模式,NFS服务不开启

3,表示命令行模式

4,这个模式保留未用

5,表示图形用户模式

6,表示重启系统

其中经常使用的是3和5,0和6慎用,1的单用户模式是个对系统来讲及其危险的模式,因此也只有在像root用户密码忘记后使用该模式;


centos 5 –/etc/inittab内容示例:

            id:3:initdefault:                     # 定义默认运行级别

            si::sysinit:/etc/rc.d/rc.sysinit   # 系统初始化脚本

            l0:0:wait:/etc/rc.d/rc 0        #  对应不一样运行级别的启动脚本

            l1:1:wait:/etc/rc.d/rc 1…

            l6:6:wait:/etc/rc.d/rc 6

            ca::ctrlaltdel:/sbin/shutdown -t3 -r now  #定义快捷键操做

            # 按下快捷键3秒后重启系统

CentOS6中,已经再也不定义其余内容,进有默认开机启动流程,转用下列脚原本完成原有执行操做

Step2:执行/etc/rc.d/rc.sysinit脚本,实施系统初始化;

 /etc/rc.d/rc.sysinit: 在全部运行级别下,init 依赖/rc.sysinit 进行系统初始化

做用:

 (1) 设置主机名

 (2) 设置欢迎信息

 (3) 激活udev和selinux

 (4) 挂载/etc/fstab文件中定义的文件系统

 (5) 检测根文件系统,并以读写方式从新挂载根文件系统

 (6) 设置系统时钟

 (7) 激活swap设备

 (8) 根据/etc/sysctl.conf文件设置内核参数

 (9) 激活lvm及software raid设备

 (10) 加载额外设备的驱动程序

 (11) 清理操做

Step3.rc 脚本--对应/etc/rc.d/rc$runlevel.d/目录下的全部服务的连接--全部以K开头的服务停掉,S开头的服务开启

说明: rc$runlevel.d –> 意味着读取/etc/rc.d/rc#.d/下脚本 

 (目录下所有文件均为软连接,源为init.d下的对应脚本)

 K*: K##*: ##运行次序;数字越小,越先运行;数字越小的服务,一般为依赖到别的服务

S*: S##*: ##运行次序;数字越小,越先运行;数字越小的服务,一般为被依赖到的服务

Step4.使用mingetty命令调用login程序,为用户打印登录提示符;

相关文章
相关标签/搜索