2.1 引導
這是Linux系列文章第二篇,我們看一下linux系統是怎么引導的,相對與windows的解讀,Linux還是有些不一樣的地方。
2.2 init進程
這是系統的最先啟動進程,在硬件引導完成將控制權交給系統內核的時候,這個進程產生。并且他的PID號總是1。
當由BIOS確定從那個硬件設備引導后,讀取MBR,確定第二引導程序,這個引導程序主要作用是加載內核,執行一系列的引導過程,當檢測完硬件之后,內核產生init進程,init進程創建其他守護進程的方式是調用SHELL腳本,而這些啟動腳本大多數是以RC文件,比如RC0.D等,這下明白這些文件是干什么用的了把,rc是run command的簡寫。是操作系統發展的遺留痕跡。
2.3 ?引導過程
大體上分為6個階段:
? ? ? ? ? ? ? ? ?加載初始化內核;
? ? ? ? ? ? ? ? ?檢測硬件;
? ? ? ? ? ? ? ? ?創建內核進程;
? ? ? ? ? ? ? ? ?操作員干預(假如);
? ? ? ? ? ? ? ? ?執行系統啟動腳本;
? ? ? ? ? ? ? ? ?多用戶模式運行;
內核是一個二進制的鏡像,位置在/boot/vmlinuz,或者/vmlinuz下,linux系統是單內核結構,所以整個內核都在內存中。內核首先要做的往往是檢測硬件的情況,驅動程序由內核加載。
在內核初始化后,會有幾個自發的進程被創建,他們并不是由fork來創建的,我們在ps命令中看到的一些進程名字被中括號包起來,并且PID號都比較小的,往往都是內核創建的,其實是內核的組成部分,裝扮一下更像進程罷了。
列舉幾個:
? ? ? ? ? ? ? ? ? ? ? kjournald
? ? ? ? ? ? ? ? ? ? ? kswapd
? ? ? ? ? ? ? ? ? ? ? kreclaimd
? ? ? ? ? ? ? ? ? ? ? ksoftirqd

可以看到PID號都很小,在執行啟動腳本之后,生成getty進程,好讓用戶登錄進來。
引導涉及GRUP程序,這是目前很流行的引導加載程序,在多系統的時候尤為重要,不涉及了,有興趣的可以自己查查資料。
這里面提及一下單用戶模式,在linux啟動的時,可以人工干預,變為單用戶登錄,目前我所應用的就是忘了root密碼,選擇這個登錄去修改密碼。
2.4 啟動腳本
說到啟動腳本,必須提及init進程,這里面涉及一個運行級的概念
? ? ? ? ? ? ? ? ? ? ? ? 0級:完全關閉系統;
? ? ? ? ? ? ? ? ? ? ? ? 1級:單用戶模式;
? ? ? ? ? ? ? ? ? ? ? ? 2-5級:多用戶模式;
? ? ? ? ? ? ? ? ? ? ? ? 6級:重新引導;
0級和6級,系統是不能停留在這兩個級別中的,當計算機啟動的時候,從0運行級,逐步提升運行等級,目前大多數Linux發行版默認是5級,這個是有init進程完成這個運行級的提示過程。
在/etc/init.d文件夾下,存放著很多守護進程的啟動腳本,我們也經常從這里啟動進程。不過init進程在將系統帶入一個新的運行級別的時候,是通過rc0.d,rc1.d....等目錄去尋找當前運行級的啟動腳本。當然目錄下的是符號鏈接,指向的還是/etc/init.d文件夾下的腳本。
未完待續。。。