Linux 引導過程

2021-09-20 17:38:08 字數 2222 閱讀 2174

引導過程的步驟

linux系統典型的引導過程由下面6個不同的階段組成:

載入並初始化核心

檢測和配置裝置

建立核心執行緒

操作員干預

執行系統啟動指令碼

多使用者模式執行

系統管理員對以上大多數步驟幾乎沒有什麼控制權。我們通過編輯系統啟動指令碼來影響大多數的引導配置。

初始化核心

linux核心本身就是乙個程式,系統引導過程中的第一項任務就是把這個程式載入記憶體,以便執行它。核心的路徑名通常是/vmlinuz或者/boot/vmlinuz。

linux系統實現了一種有兩個階段的載入過程。在第一階段中,系統rom把乙個小的引導程式從磁碟載入到記憶體中。然後,這個程式再安排載入核心。

核心執行記憶體檢測來確定有多少ram可用。核心的一些內部資料結構按靜態方式分配其內存量,因此,當核心啟動時,它就為自己劃分出一塊固定大小的

實存空間。這塊空間保留給核心使用,使用者級程序不能使用。核心在控制台上列印一條訊息,報告物理記憶體的總量以及使用者程序可用的記憶體量。

配置硬體

核心執行的第一批任務之一包括檢查機器的環境以確定機器有什麼硬體。當您為自己的系統構建核心時,要好俗核心,它會找到哪些硬體裝置。當核心開始執行時,它

試圖找到並初始化已經告訴它的每乙個裝置。大多數核心為它們所找到的每個裝置列印一行專門資訊。現在的發行版本所包含的核心能夠在絕大都sohu機器配置上執行。

只要做最少量的定製。

在核心配置期間提供的裝置資訊經常不夠明確。在這樣的情況下,核心通過檢測裝置匯流排和向適當的驅動程式尋求資訊來嘗試它所需要的其他資訊。那些沒有檢測到裝置

的驅動程式或者那些沒有響應探測的驅動程式將被禁用。如果某個裝置後來被連線到系統上,那麼還是有可能隨時載入或者啟動它的驅動程式的。

核心執行緒

一旦完成了基本的初始化任務,核心就在使用者空間建立幾個「自發」的程序。它們之所以被稱作是自發程序,是因為這些程序不是通過系統正規的fork

機制所建立的。

自發程序的數量和特性隨系統的不同而不同。在linux上,看不到有pid 0程序。和程序init一起的是幾個記憶體和核心處理程序,這些程序的pid都比較小

在ps命令的輸出中它們的名字都被中括號括了起來。有時候這些程序的名字以乙個斜線加乙個數字結尾。這個數字表明該執行緒在哪個處理器上執行,在

多處理器的系統上會出現這種有意思的情況。

在所有的這些程序中,只有init是真證完整的使用者程序。其他程序實際上都是核心的組成部分,為了排程或者結構上的原因而進行了裝扮,使它們看上去

像是程序罷了。

一旦建立完畢自發程序,核心在引導階段的任務就完成了。不過,處理基本操作的程序還乙個都沒有建立,而且大多數linux守護程序也沒有啟動。這個

任務都是由init來負責的。

操作員干預

如果系統以單使用者模式進行引導,那麼在init啟動時,核心所給出的命令列標誌(single)會通知init實際要引導的是單使用者模式。程序init最後會把控制權

交給sulogin,後者是login的乙個「中間但不可控」的特殊版本,它提示使用者輸入root口令。如果輸入的口令正確,系統將產生乙個root shell。

在單使用者shell中執行命令的方式和登入到已完全引導的系統上執行命令的方式類似。不過在suse、debian、還有ubantu系統上,這時通常只安裝了root

分割槽。為了使用不在/bin、/sbin、或/etc下的程式,使用者必須手動安裝其他檔案系統。

在許多但使用者環境下,檔案系統的根目錄是按唯讀方式安裝的。如果/tmp是根檔案系統的一部分,那麼許多要使用臨時檔案的命令都不能執行。為了解決

這個問題,必須先把根檔案系統以讀寫方式重新安裝,再開始但使用者模式的互動操作。下面這條命令通常就能實現這個技巧。

mount -o remount,rw /

執行啟動指令碼

到了系統準備執行其啟動指令碼的時候,我們就能看出它是linux系統了。儘管它看起來還不很像全部啟動完畢的系統,但在接下來的啟動過程中已經沒有什麼

「奇妙」步驟了。啟動指令碼就是普通的shell指令碼,由init根據移動的演算法選擇並執行它們,儘管演算法有時候有些複雜,但還是箱單容易理解的。

啟動指令碼的處理、饋送和分類有其自己的專門一節來介紹。

多使用者執行

在初始化指令碼執行過以後,系統就是完全執行的系統了,不過現在使用者還不能登入進來。為了在某個特定終端上接受使用者登入,必須有乙個getty程序監聽終端

或者控制台。init直接生成這些getty程序,完成引導過程。init還負責生成圖形登入系統,例如xdm或gdm。

neijiade10000

linux引導過程

bios是位於主機板的快閃儲存器中某段特殊區域。這個過程主要是是執行bios中從位址0xffff0處開始的 主要是確定要使用哪個裝置來引導系統,這個過程的具體步驟為 1 加電自檢 post 即對硬體進行檢測 2 本地裝置的列舉及初始化,bios會按照cmos設定的順序來搜尋處於活動狀態並且可以引導的...

Linux引導過程

1 開機 2 加電自檢 bios,一段程式用於控制管理硬體,並決定啟動順序 所有資料 於cmos晶元 3 mbr引導 尋找啟動裝置上的mbr資訊,搜尋系統所有分割槽位置 4 grub引導 系統選擇選單 boot grub grub.conf 5 載入核心 將啟動核心載入到記憶體中 改區域不可越權訪問...

Linux 引導過程內幕

linux啟動流程 當 bzimage 用於 i386 映像 被呼叫時,我們從.arch i386 boot head.s的start彙編例程開始執行 主要流程圖請參看圖 3 這個例程會執行一些基本的硬體設定,並呼叫.arch i386 boot compressed head.s中的startup...