開機過程指的是從按下電源鍵開始,到進入系統登陸畫面前所經歷的過程。linux
在目前x86的系統架構中,系統硬盤位於第0號磁道:0到511KB的區塊爲MBR(硬盤中的每個磁道容量爲512KB),開機管理程序使用這塊區域來儲存第一階段開機引導程序(stage1)。接着位於1到62號磁道做爲第1.5階段的開機引導程序(stage1.5),從第63號磁道開始纔是操做系統的分區。架構
主引導記錄(MBR,Master Boot Record)是位於磁盤最前邊的一段引導(Loader)代碼。它負責磁盤操做系統(DOS)對磁盤進行讀寫時分區合法性的判別、分區引導信息的定位,它由磁盤操做系統(DOS)在對硬盤進行初始化時產生。spa
MBR的內容分爲三部分:第一部分是0到445KB,是計算機的基礎導引程序,也稱爲第一階段的導引程序;接着446KB到509KB爲磁盤分區表,由四個分區表項構成(每一個16個字節)。負責說明磁盤上的分區狀況。內容包括分區標記、分區的起始位置、分區的容量以及分區的類型。最後一部分爲結束標誌只佔2KB,其值爲AA55,存儲時低位在前,高位在後。操作系統
從百度百科借了張圖:.net
MBR中緊跟在主引導程序後的主分區表這64字節(01BE~01FD)中包含了許多磁盤分區描述信息,尤爲是01BE~01CD這16字節,包含了分區引導標誌bootid、分區起始源頭beghead、分區起始扇區relsect、分區起始柱面begcy一、操做系統類型systid、分區結尾磁頭endhead、分區結尾扇區begsect、分區結尾柱面begcy一、分區扇區起始位置relsect、分區扇區總數numsect。blog
其中分區引導標誌bootid表示當前分區是否能夠引導,若爲0x0,則表示該分區爲非活動區;若爲0x80,則爲可開機啓動區。如有多個開機啓動區,則由用戶開機時的選擇而定(如GRUB的菜單)。進程
分區扇區起始位置relsect表示分區中第一個扇區相對於磁盤起始點的偏移位置。內存
linux上的開機管理程序有LiLO和GRUB,前者是早期的產物,在近年來的Linux操做系統都以GRUB做爲默認軟件包。get
GNU GRUB(GRand Unified Bootloader簡稱「GRUB」)是一個來自GNU項目的多操做系統啓動程序。GRUB是多啓動規範的實現,它容許用戶能夠在計算機內同時擁有多個操做系統,並在計算機啓動時選擇但願運行的操做系統。GRUB可用於選擇操做系統分區上的不一樣內核,也可用於向這些內核傳遞啓動參數。it
運行層級(run level)共有7個,分別爲0、一、二、三、四、五、6,其中0表示關機、1表示單人模式、6表示從新啓動。中間的二、三、四、5因Linux發行商而異。
從按下電源開始到登陸畫面中全部的過程。
登陸程序依序分爲BIOS、GRUB、內核加載、與init程序四個步驟。
當按下電源按鈕後,系統就會運行BIOS檢測,包含檢查系統的硬件配置、執行系統診斷程序、找出系統硬盤,把第0號磁道中的開機導引程序加載到內存中,以後就由GRUB接手後續的開機程序。
GRUB是一個較大的程序,自己容量超過MBR的限制(512KB),所以GRUB將開機程序分割爲stage一、stage2,並在1與2之中加上選用的程序stage1.5,如e2fs_stage1_五、fat_stage1_5等。
由BIOS接手後的GRUB,會由stage1轉接到stage2(或stage1.5),並找出和載入位於/boot的內核文件。內核文件位於/boot之下。
接着會將內存映像文件(.img)加載到內存中,並使用cpio命令將內容解壓縮到/boot之下。若是硬件的功能都別編入內核中,這個動做是不須要的;但若編譯爲模塊且必須在開機時加載,這個步驟就是必要的。
將內核與必要的映像文件加載後,系統開機的過程就交給內核處理了。
內核接手系統開機的程序以後,會進行初始化,包括檢測硬件、設置硬件設備、時鐘設定、加載模塊等,這動做完成後會釋放出曾佔用的內存空間。
接着啓動文件系統相關的設定,首先會掛接根目錄(「/」),再讀取分區表(/etc/fstab)並掛接全部的分區與啓動SWAP。最後系統啓動/sbin/init程序,並運行硬件與軟件相關的系統常駐程序。
內核在開機的做用到此告一段落。
Init是系統的第一個進程,所以PID爲0,也是全部進程的父進程,init啓動後會先執行etc/rc.d/rc.sysinit,並讀取配置文件/etc/inittab中的設定
init的具體內容可參考: