1、固件:硬件和软件结合
加电自检是我们按下电源会检测硬件像CPU、内存、网卡等信息(从硬件层次检测硬件是否可用)
固件设置时间:
[root@centos ~]# hwclock #硬件时间 Wed 28 Mar 2018 09:22:15 PM CST -0.811743 seconds [root@centos ~]# date #软件时间 Wed Mar 28 21:22:18 CST 2018
hwclock的两个参数:
hwclock --hctosys #以硬件时钟为标准修改软件时钟 hwclock --systohc #以软件时钟为标准修改硬件时钟
2、检测完之后跳转到mbr(主引导记录)里面读取一个很重要的数据bootloader(后续的所有工作都是bootloader完成)和partition table、magic number
3、bootloader载入内核:
内核的概念:(Linux是一堆源码,在开机的时候会看到booting the kernel,从软件层次检测硬件是否可用)
主要作用就两个:驱动硬件(所谓驱动就是系统识别硬件,让操作系统认识硬件,从软件识别硬件是否可用)、启动完init进程其任务就完成了。
4、init进程也是Linux启动的第一个进程
init进程的任务:
init启动后读取inittab文件,执行缺省运行级别,从而继续引导过程。在Unix系统中,init时第一个可以存在的进程,它的PID恒为1,但它也必须向一个更高级的功能负责:PID为0的内核调度器(Kernel scheduler),从而获得CPU时间。
解释:
init进程的PID为1,其PPID为0,PPID就是父进程ID,其父进程是内核任务调度器。
Linux是一个实时系统,就是将处理时间按时间分配,如果你这次时间没有处理完则下次继续给你分配时间的时候再处理,这就需要一个CPU时间调度器,也就是PID为0的内核调度器。
Linux中由一个进程派生出的进程成为子进程。如果一个进程的父进程死了,其子进程也不能存在。Linux中父进程死掉了子进程存活的进程成为孤儿进程,在Linux中不允许孤儿进程的存在。Linux扫描到存在孤儿进程的时候会自动将这个孤儿进程的父进程设置为init进程(PID为1的进程)。
子进程死亡,父进程应该切换和子进程之间的联系,这个子进程成为了僵尸进程(J进程),这种进程也不允许存在。
5、读取 /etc/inittab文件
inittab定义Linux的7个运行级别
6、inittab文件剖析:
在inittab中,所有条目采用如下格式:
id:runlevel:action:process
actions常用取值:
inittab重要的两个条目:
id:3:initdefault: #指定系统默认运行级别为3,如果想系统启动后自动运行X Window,则将上面的3改为5 # System initialization. si::sysinit:/etc/rc.d/rc.sysinit #启动脚本/etc/rc.d/rc.sysinit,完成系统服务程序启动,如系统环境变量设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。
rc.sysinit是一个标准的shell脚本,如果我们想开机不管哪个运行级别都执行一段脚本我们可以将脚本或命令放在/etc/rc.d/rc.sysinit里面。
inittab记录了默认级别、必须启动的脚本、电源管理、6个终端等信息。
接下来系统就会按照inittab指定的运行级别的目录下的脚本:(/etc/rc.d/rc[0-6].d目录分别对应着运行级别的目录):
假如系统的缺省运行级别为3,系统会执行/etc/rc.d/rc3.d/目录下的脚本;
总结:
原文:https://www.cnblogs.com/xi-jie/p/12304978.html