當你開啟電腦時,它發生了什麼。
http://ike.126.com 一篇無意從網路上找到的文章,發現寫得很精彩,於是就將它翻譯了 下來。但是有些段子我還是翻譯的不怎麼的好,請兄弟們見諒了。
當你開啟電腦時,它發生了什麼。
一台沒有軟體啟動並執行電腦只是一堆發熱的電子器件。當電腦起電啟動開始的第一件 事情就是運行一個叫做“作業系統”的特殊程式。作業系統的作用就是協助其他的程式能夠 的控制和訪問電腦硬體。
裝入作業系統的步驟叫作引導(booting)。(從嚴格意義上說,引導和自我檢查的 處理步驟叫做“自檢”)。您的電腦知道如何去引導,因為在其具體的操作方法已經 整合在一塊稱做 BIOS(或者叫基本輸出入系統 (BIOS))的晶片中了。
BIOS 晶片告訴電腦查看一個合適的地方引導系統,通常這個地方在編號最小的磁碟 上(引導盤)。一個稱做引導器的程式(在 linux 下通常是 Grub 或者是 LILO)會被裝入 記憶體,並且啟動。引導器的作用就是裝入真正的作業系統。
接下來引導器會尋找一個核心,並將它裝入記憶體後運行它。當你啟動 Linux 的時候, LILO 會在系統螢幕上列印出一些小點,這說明它正在裝入核心。(每一個點的意思就是已經 引導讀取了磁碟上所指向核心的簇)。
(你可能會感到困惑,為什麼 BIOS 不會直接引導系統,而舍直求曲的分成兩個步驟呢。 事實上 BIOS 不是非常的智能,甚至可以說是有點木訥。因此 Linux 核心會在引導以後不再 使用它。這是因為這個程式是為有八位元組限制的 PC 而寫的,並且 BIOS 容量也有限制。 所以可能在引導的時候不能讀取磁碟的後餘的扇區。與此相比,引導程式卻可以允許你引 導磁碟上不只一個作業系統。(雖然它可以引導其他的 UNIX 系統,但是通常不會這麼 做。)
當核心啟動以後,它會自動檢查和初始化硬體,並且準備運行程式。它通過一些 I/O 連接埠、 特殊的匯流排尋找硬體,而非一般的記憶體位址。這是因為這些匯流排通常它們會有控制卡監聽並 執行相應的命令。核心檢查硬體不是隨機的,它有一套內建的機制去處理它:哪裡去尋找硬體, 怎樣控制正常使用的硬體等等。這個步驟稱為自動檢查(autoprobing)。
在核心自檢的時候你會從螢幕上看到很多的資訊,這是核心正在通過上述的 I/O 連接埠自動檢查硬體,指出你的機器上有哪些可用的硬體並組織好它們。Linux 非常擅長於做 這些事情,這個功能相對來說比一些其他的 UNIX 系統要好,和 DOS 或者 Windows 來說要 好的多。事實上,許多 Linux 老使用者會認為核心並不需要那麼智能的檢查硬體(即使這樣可 以容易安裝系統),這是因為他們有一個非常好的理由讓那些吹毛求絲的使用者跳出的無聊的 自由代碼實驗。
但是核心完全載入並且運行完畢並不是引導的結束;這僅僅是第一個階段(有時被稱做 運行層級一,run level 1)。在運行完運行層級一以後,核心回將控制權轉交給一個 叫做 init 的程式,它將啟動一些使用者進程。
Init 進程所做的第一件事情就檢查你磁碟的完整性。磁碟檔案系統是一個非常重要的; 如果它們因為硬體問題或者是突然斷電,那就有一個非常好的理由在 UNIX 系統引導前 檢查並且修複它們。我們會等會詳細的討論檔案系統為什麼會損壞。
Init 接下來的事情就是啟動一些精靈進程(daemon),比如列印控制控制系統、郵件 監聽器、或者是一個 WWW 服務器。精靈進程會在後台(background)運行,監視指定所要做的 事情。這些特殊的程式經常會相互處理所需要的請求,避免衝突。 它們之所以是精靈進程, 是因為它們容易寫成一個程式集合用來應答和處理所有需要的服務,而非為了一個同樣的請求 又去啟動另外一個新的進程。精靈程式所產生的每一個進程將處理一個任務並且同時運行,而 不影響別的進程。在每個系統上啟動並執行精靈程式是不同的,但是通常都有一個列印監視進程 (一個控制你印表機的精靈進程)。
下一步就是為使用者準備了。Init 開啟一個名叫 getty 的進程監視你的控制台(console)(也 許是一個撥號接入的連接埠)。這個程式會在你的終端提供一個登陸符讓您登陸系統。當所有的精 靈進程和 getty 進程在每個終端啟動完畢,我們就處在了運行層級二(run level 2)。這時,在 這個層級下你可以登陸並且運行程式了。
但是事情並沒有完,下一步就時開啟一些別的有用的程式,比如網路和其他的一些服務。 當這些全部完成以後,我們所處在的是層級三運行模式(run level 3),並且這時系統就 完全可以使用了。