天天看點

Linux 引導過程

引導過程的步驟

     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。

本文轉自伺服器運維部落格51CTO部落格,原文連結http://blog.51cto.com/shamereedwine/2072952如需轉載請自行聯系原作者

neijiade10000