一、系統引導流程
第一步:固件fireware(CMOS/BIOS)——POST加點自檢(與操作系統無關)
這一步主要是檢查硬盤等硬件是否能正常工作
CMOS:是固化在主板上,詳細:http://school.cfan.com.cn/news/cfannews/2007-06-06/1181111816d66664.shtml
BIOS:BIOS是固件的操作界面
CMOS是用來保存硬件參數信息的,而BIOS是用來修改這些參數的程序,簡單地說:BIOS就是用來設置CMOS參數的手段,CMOS裡面保存了BIOS設定的參數和結果,即“我們通過BIOS設置程序對CMOS參數進行修改”,比如我們需要修改系統啟動順序,在調整時,我們是通過BIOS設置為“光驅→硬盤→軟驅”依次啟動的,那麼這個啟動順序的數據就保存在CMOS中。
hwclock硬件時鐘(固化在固件中的時鐘)
可以看到我的系統時鐘和硬件時鐘不同,下面來修改系統時鐘和硬件時鐘。
如果hwclock是正確的
可以用hwclock –help 查看參數
第二步:自舉程序BootLoader(GRUB)——載入內核
MBR(mast boot record):位於磁盤的第一個柱面的第一個扇區
關於MBR詳細請看:http://blog.csdn.net/hbrqlpf/article/details/3007863
/etc/grub.conf配置文件中記錄關於系統內核的詳細信息,我們進去看一下
系統內核版本是2.6.18
2:表示主版本號
6:表示次版本號(奇數表示測試版)
18:末版本號
後面還記錄了內核文件的路徑root=LABEL=/rhgb quiet initrd /initrd-2.6.18-128.e15.img
第三步:載入內核後(Kernel)——驅動硬件
啟動進程(init)
系統首先會啟動init進程,該進程啟動後讀取inittab文件,執行缺省運行級別,從而繼續引導過程。在Linux系統中,init是第一個可以存在的進程,它的PID恆為1,但它必須向一個更高級的功能負責:PID為0的內核調度器(Kernel scheduler),從而獲得CPU時間。
孤兒進程:父進程死掉後子進程還存在,則子進程被稱為孤兒進程(系統檢測到孤兒進程後會讓init做父進程)。
僵屍進程:子進程死掉後父進程不知道,則子進程被稱為僵屍進程。
第四步:讀取執行配置文件/etc/inittab
0:表示關機
1:表示單用戶模式(只有root賬號,類似於Windows的安全模式,沒有圖形界面)
2:字符界面多用戶模式,沒有NFS服務
3:字符界面多用戶模式,有NFS服務
4:待使用(自定義級別)
5:圖形化的多用戶模式(系統缺省級別)
6:表示重啟
查看當前系統的運行級別(runlevel)
切換運行級別 ( init 級別)
二、inittab文件剖析
1、在inittab中所有條目采取以下格式
id:run-levels:action:process
id:標識符,一般為兩位數字字母
run-level:指定運行級別,可以指定多個
action:指定運行狀態
process:指定要運行的腳本/命令
2、action常用取值
initdefault:指定系統缺省啟動的運行級別(例如在裡面可以修改運行級別2後系統啟動後進入字符界面)
sysinit:系統啟動執行process中指定的命令。
wait:執行process中的命令,並等其結束後再執行其他命令
once:執行process中的命令,不等待其結束
ctrlaltdel:按下ctrl+alt+del時執行process指定的命令
powerfail:當出現電源錯誤時執行process指定的命令,不等待其結束
powerokwait:當電源恢復時執行process指定命令
respan:一旦process命令終止,便重新運行該命令
3、各個級別服務程序腳本
/etc/rc.d/init.d目錄下包含各個運行級別的服務程序腳本
/etc/rc.d/rc[0123456].d分別存放對應運行級別的服務程序腳本的符號鏈接,鏈接到init.d目錄中的相應腳本
K代表殺死該進程
S代表啟動該腳本進程
K和S後面的數字代表執行順序