Linux: Startup Analysis I -- Overall intro

Linux startup process: 

1> POST 加电自检
     1) CMOS      -> 是指固化在主板上的程序,可以设定系统启动的首选项是通过光盘还是硬盘等启动。
     2) BIOS         -> 是指用来管理CMOS选项的包含GUI界面的一段管理控制程序,同样也是固化在主板上的。
     3) POST        -> Power On System Test. 固件的作用就是用来POST。
     在这个阶段会进行加电自检,固件会在硬件层面上检测所有硬件是否是正常的。如是否所有连接线已经插好,是否有损坏的电路芯片单元等。
     常用的固件设置有:
     1) 安全设置:可以为CMOS/BIOS设置密码,使得其他人无法更改启动选项。
     2) 可引导介质列表:可以用硬盘,光盘,USB等作为启动介质。
     3) 可引导介质搜索顺序:可以为启动介质设置首选项,此选项等。
     4) 电源管理:可以设置电源模式等
     5) 启动细节显示
     注意一下Linux的硬件时钟和软件时钟最好同步。
     所以在Linux系统中如果更改了硬件,例如增加了一块硬盘或者网卡,第一个步骤应该是在CMOS/BIOS中查找一下硬件是否被固件识别。
     如果在固件里边都检测不到新添加的硬件,那么就没有必要进入系统里边进行设置了,因为系统里边是看不到这些硬件的。
 
2> GRUB BootLoader
      固件在加电自检没有问题的情况下,会首先去读取MBR文件。
      MBR -- Master Boot Record(主引导记录) 位于硬盘的零柱面零磁头一扇区
在WINDOWS里边NT内核而ntldr是它的BootLoader
在Linux里边GRUB则是其BootLoader。BootLoader位于 /etc/grub.conf中,这是一个链接文件,真正位置是在/boot/grub...里
自举程序(BootLoader)的作用就是载入操作系统内核。

如上则是一段grub.conf的记录,高亮地方是Linux内核的位置。而Linux内核是一个可执行文件,需要在启动的时候进行执行。而内核的文件存放于磁盘中则是以压缩文件的方式存放的。linuz,以Z来标记。所以在启动的时候首先需要解压文件,然后运行内核程序。
关于内核的版本main-verion.sub-version.last-version我们需要特别关注sub-version,如果是奇数,则是测试版本,如果是偶数则说明是正式版本。
 
3> Kernel 
主要作用是检测并且驱动硬件。而这种检测有别于POST的检测,POST的检测是基于硬件电气层面的检测,而Kernel的这种检测是基于软件层面的检测,检测硬件驱动是否完整,硬件能否被操作系统所识别并且控制。
最后将启动进程init
4> init
init的工作:
init启动之后读取inittab()文件,执行缺省的运行级别,从而引导进程。
在UNIX系统中,init是第一个可以存在的进程,它的PID恒为1,但它也必须向一个更高级的功能负责:PID为0的内核调度器(Kernel scheduler),从而获取CPU时间。
当一个进程启动之后,它的PID不是固定的,每次都是变化的。但是init这个进程比较特殊,它的PID恒为1.
PPID: 代表着父进程的PID。
在进程管理里边有一个基本的概念:父进程终止,则子进程必须全部终止,如果子进程不终止的话,该子进程被称为孤儿进程,系统在检测到孤儿进程之后,会把它的PPID自动指向1也就是init进程。
如果子进程终止,则父进程必须得知同时切断与该子进程的联系,否则的话该子进程则变为僵尸进程,以Z标识。

猜你喜欢

转载自davyjones2010.iteye.com/blog/1972356