CentOS系列的操作系统的架构类型是X86架构,其内核实现方式是单内核,单内核的意义的在于他对外表现为一个应用程序即一个进程启动整个系统,所有的功能都集中在这一个进程里;而windows系列的内核实现方式是微内核,每种功能使用单独一个子系统来实现;CentOS系列是由内核核心结合内核模块来一起实现内核功能的,将内核所必须的功能放入内核文件当中,而将内核不一定必须的功能放入内核模块当中,当需要这类功能时,再将内核模块插入内核中,在不使用时,再将内核模块从内核中移除即可;
CentOS5系列操作系统的启动流程:
CentOS5在启动时,首先要进行POST加电自检,由BIOS将ROM只读存储器加载只RAM内存当中,由RAM检查ROM是否有损坏,若无,则正常启动,若有,则启动应急方案,当加电自检没有问题后,再有BIOS按一定顺序去检索BIOS中的设备,找到第一个Bootloader,引导加载程序,则该设备便为本次启动所需要的设备;Bootloader引导加载程序接手后,BIOS就退出,由Bootloader去找设备中的内核文件,若找到,则将内核文件载入内存,至此Bootloader退出,由内核进行接下来的操作;
Bootloader,引导加载程序;其作用在于决定到何种硬件设备下加载操作系统;Bootloader目前应用广泛的两种类型是LuLo和grub,但LuLo的缺陷在于不能支持大硬盘,常用于手机的引导加载程序,而grub就是广泛应用于Linux的操作系统引导程序,CentOS5和6的引导程序用的就是grub legacy版本,而CentOS7用的则是grub2,两种的功能相差较大;grub的主要作用是提供一个交互的菜单界面,上面列举了当前系统所有内核版本;为系统找到启动的内核,并将内核载入到RAM内存当中,将权限移交给内核;grub还可以提供一个命令行交互界面,可以读取指定磁盘内的内核信息以及init信息,从而创建一个小的Linux;grub legacy主要分为三个组成,stage1,是MBR的前446字节,而stage1.5则可以帮助stage1识别stage2的文件系统,而内核核心文件又一定与stage2放在一起,所以stage1.5就可以帮助找到系统中的核心文件,并加载到内存;
内核,当Bootloader退出,由内核接手后,内核进行系统初始化,它可以找到系统中的硬件设备,对硬件设备进行驱动,当遇到其不能驱动的硬件设备时,就启用ramdisk程序加载驱动,然后挂载根文件系统,最后启动可以间接启动所有应用程序的那个唯一的进程/sbin/init进程;之前有说,内核包含内核核心文件以及内核模块文件,当内核需要时则将模块导入,否则删除,在这里说一些有关内核的一些基本命令;
lsmod:显示内核核心中已经装载的内核模块;
insmod:插入内核模块到内核核心,但这个命令并不会解决依赖关系,当依赖关系有缺失时,该命令不会生效;
rmmod:卸载内核模块;
modinfo:可以获取内核模块信息
-a:显示模块的作者信息;
-d:显示模块的描述;
modprobe:可以动态装载内核模块以及卸载内核模块;它可以解决内核模块的依赖关系,即便缺失,也可以装载到内核中;
modprobe 内核模块名:装载内核模块;
modprobe -r 内核模块名:卸载内核模块;
内核在挂载完rootfs之后,所执行的init的进程;这个进程可以说是所有应用程序或所有进程所以来的进程,启动它,就可以启动下属所有子进程;
init进程在CentOS系列中典型的三个类别:
CentOS5:Sysv init,其配置文件为/etc/inittab
CentOS6:Upstart init,其配置文件为/etc/inittab
CentOS7:Systemd,其配置文件为/etc/systemd/system
/usr/lib/systemd/system
CentOS7的Systemd就相当于正常意义下的init;
首先说明一下CentOS5的Sysv init
CentOS5的init的特点在于,他要去逐个去执行配置文件中的每个脚本来完成系统初始化;
init的配置文件/etc/inittab:
1.确定系统初始化所要完成的任务
需要开启或关闭哪些服务;
当电源失效时,需要进行什么操作;
如何完成系统初始化;
定义了按下"Ctrl + Alt + Delete"组合键时,系统将采取什么行为;
2.规定任务执行:
执行任务的格式
id:runlevel:action:process
id:操作的唯一标识符;
runlevel:运行级别;
运行级别:
0:关机;
3:多用户模式,完全的功能模式,仅使用命令行界面,不使用图形化界面;
4:预留级别;
5:多用户模式,可使用命令行界面,也可使用图形界面,默认使用图形界面;
6:开机;
action:执行任务所需要的操作;
wait:等待切换至此任务所在的运行级别时,运行一次;
respawn:一旦此任务结束,就自动重新启动此任务;
initdefault:用于设定默认的运行级别,通常后面的process省略
sysinit:设置系统初始化的方式,一般情况下此处运行/etc/rc.d/rc.sysinit脚本;
/etc/rc.d/rc.sysinit作用:
1.设置主机名称;
2.设置系统欢迎语;
3.激活swap设备;
4.挂载/etc/fstab中的所有文件系统;
5.激活lvm和raid设备;
6.以读写的方式挂载rootfs文件系统;
7.激活udev和SELinux;
8.根据/etc/sysctl.conf文件设置内核参数;
9.加载额外的驱动程序;
10.完成系统清理工作;
CentOS5中/etc/rc.d/rc.sysinit中的部分内容
当执行该脚本时,执行脚本中的任务,上述任务格式,第一行表示,id为l0,执行级别为0,wait表示等待达到运行级别0时,执行/etc/rc.d/rc0脚本;
/etc/rc.d/rc#系列脚本中,“#”表示与运行级别相对应的脚本,rc#中的脚本命名都是一些K和S开头的脚本,K表示关闭,K后面的两位数字表示优先级,数字越小优先级越高,依赖于其他服务的服务先关闭;SS表示开启,S后面的两位数字表示优先级,数字越小优先级越高,被其他服务所依赖的服务先开启;
脚本框架:
for i in /etc/rc.d/rc#.d/K* ; do
$i stop
done
for i in /etc/rc.d/rc#.d/S* ; do
$i start
done
所有由rc脚本关闭或启动的链接文件的源文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d
所有/etc/init.d(/etc/rc.d/init.d)目录中的脚本执行方式:
# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
# service SRV_SCRIPT {start|stop|restart|status}
CentOS5启动流程:
第一:加电自检,BIOS将ROM导入到RAM内存中,检查是否有错;
第二:BootSequence,按一定顺序查找BIOS设备中的第一个引导程序,找到引导程序后,BIOS交权,退出;
第三:Bootloader,引导程序通过三层stage结构,找到与stage2一块的内核文件,将内核载入内存,并交权;
第四:内核,以只读方式挂载根文件系统,驱动物理设备,当无法驱动某个物理设备时,调用ramdisk装在驱动;执行/sbin/init命令设置默认运行级别,实现系统初始化,一个一个去开启和关闭某些服务;Ctrl+Alt+Del热键功能,UPS电源的失效与恢复之后的操作,直到生成终端[启动图形界面]
CentOS6启动流程与CentOS5很相似,唯一不同在于CentOS6的init是upstart,而5的init是Sysv,6的init可以并行执行/etc/inittab中的脚本,速度比5的要快得多;
CentOS5启动流程:
第一:加电自检,BIOS将ROM导入到RAM内存中,检查是否有错;
第二:BootSequence,按一定顺序查找BIOS设备中的第一个引导程序,找到引导程序后,BIOS交权,退出;
第三:Bootloader,引导程序通过三层stage结构,找到与stage2一块的内核文件,将内核载入内存,并交权;
第四:内核,以只读方式挂载根文件系统,驱动物理设备,当无法驱动某个物理设备时,调用ramdisk装在驱动;执行/sbin/init命令,设置默认运行级别,系统初始化,并行地去开启和关闭某些服务;