1. 程式人生 > >Linux 啟動流程

Linux 啟動流程

grub 指定 建立 cal wap module log images byte

面試遇到過兩家公司問這個問題,問的難一點的問題都答上來了,偏偏這個簡單的反而翻船了,這兩家都沒要我,痛定思痛,一定要把這個給記下來。 本次環境基於 RHEL 6 。RHEL 7改用systemctl做初始化了,略微不同,下次再說。

技術分享圖片

- BIOS自檢
BIOS包含cpu、內存、硬盤、設備啟動順序等信息,讀取BIOS後知道該去讀取哪個硬件設備。
- 讀取MBR
MBR,主引導記錄。存放了預啟動信息、分區表信息等。
前446byte包含了boot loader。後面的66byte是分區表信息,4個主分區是16byte,剩下的2byte是分區結束符
系統找到BIOS指定的硬盤的MBR後,就將其復制到物理內存中。被復制到物理內存中的內容就是boot loader
- Boot Loader
GRUB是操作系統內核運行前運行的程序,通過這段程序,可以初始化硬件設備、建立內存空間的映射圖。
從而將軟硬件帶到一個合適的狀態,為最終調用操作系統內核做準備。
Boot Loader有好幾種,其中最常用的就是grub
系統讀取grub配置信息,並依照此配置信息啟動不同的操作系統
- 加載Kernel
根據grub設定的內核映像所在路徑,系統讀取內存映像,並進行解壓縮操作。當解壓縮內核完成後,屏幕輸出“OK, booting the kernel”。
系統將解壓後的內核放置於內存之中,並調用start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。
- init 根據inittab文件設定運行級別
內核被加載後,第一個運行的程序就是/sbin/init,該命令會去讀取/etc/inittab(該文件是設定運行級別用的),進行初始化工作
0 關機
1 單用戶模式
3 命令行模式
5 圖形界面模式
6 重啟
- init 進程執行rc.sysinit
在設定了運行級別後,Linux執行的第一個用戶層程序就是/etc/init.d/rc.sysinit腳本程序,他做的事情非常多,如設置PATH,設定網絡、
啟動swap分區、設定/proc等。
- 加載內核模塊
根據 /etc/modules.conf 文件或 /etc/modules.d 目錄下的文件來加載內核模塊
- 執行不同運行級別的腳本程序
根據運行級別不同,執行/etc/rc0.d到rc6.d的相應腳本程序,來完成相應的初始化工作和啟動相應的服務
- 執行/etc/rc.d/rc.local
在一切初始化完成後,Linux留給用戶個性化的地方。這裏可以設置開機啟動項
- 執行/bin/login,進入登錄狀態

Linux 啟動流程