今天享用咖啡後的time來reserch一下bootstrapping,在Linux或者Unix下面引導計算機仍是有一些很大的玄機的, bootstrap
而這裏面,有不少實際上是很是值得咱們去花費時間學習的。廢話不說了,咱們開始:starting up a computer app
操做系統在計算機的正常啓動過程當中實際上是不能派上用場的,他必須用本身的方式先將本身啓動起來。 學習
內核首先被加載到內存當中,緊接着是各類的初始化,接着纔是系統。 google
咱們不得不這樣說,要知道我很不情願這樣講,但他倒是個事實,那就是在引導階段是系統的特別脆弱的時期。諸如config裏面的fault,設備問題,文件系統受到受損等等這樣的錯誤都會致使系統的引導不成功。 操作系統
內核會生成init進程,而後這個進程始終是PID1。系統徹底引導以前,先檢查並掛哉文件系統,而且啓動系統法的守護進程。Unix的系統能夠不追求完整的啓動,而只是部分的引導,只夠在系統的主控制檯上運行一個Shell就ok了。 繼承
單用戶模式=恢復模式=維護模式 進程
在大多數的系統當中能夠給內核傳遞一個參數,而使其進入單用戶模式 內存
讓咱們來看看典型的Six steps stage it
一、從MBR去bootloader io
二、加載並initialize the core
三、檢測和配置設備
四、建立內核進程
五、系統管理員干預(Only for The Single User Mode)
六、執行系統的啓動腳本
看到上面的Steps,能夠想到其實Administrators的系統交互只能經過兩方面來干預系統的bootstrapping,修改系統的啓動腳本配置文件或者是改變傳遞給core的arguments。
內核從本質上來講是程序,他一般會在啓動後被裝載到內存中去,以便執行他。雖然隨着廠商的不一樣會有所變化,可是大致上是像這樣的:/vmlinuz或者是/boot/vmlinuz
BIOS(這個不用多說了,不知道的上google),一旦肯定了從什麼設備看是引導系統,它將嘗試加載設備上開頭的512個字節的信息,咱們將這512個字節的數據段也叫作Master Boot Record即MBR
咱們接下來談GRUB
這一全面而又統一的加載程序,對於intel的User來講Grub是默認的引導加載程序,其任務是從預先編排好的清單中選擇一個內核,並用系統管理員指定的參數來加載這個內核。其家族大致可分爲兩個分支,即原始的GRUB即GRUB Legy(傳統的GRUB),還有一個就叫作GRUB2(其實其版本號是介於1和2之間的)
GRUB默認會從/boot/grub/menu,lst或者/boot/grub/grub.conf中讀取他的缺省引導配置。
我本身用的Fedora因爲繼承了RHEL的特性,因此使用的是grub.conf,烏班圖用的是menu.lst
看一段代碼,試着讀懂她
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash,xpm.gz
title Red Hat for Fedora (kernel edtion)
root(h0,0)
kernel /vmlinuz............. ro root=LABEL=/
想想上面這段代碼配置了一個操做系統,想知道的更多See the Site:www.gnu.org/software/grub/manual
關於多重引導,一臺機器上有時須要run多種操做系統,因此咱們須要配置一個引導加載程序能認出磁盤上全部不一樣的操做系統,情牢記,每一個磁盤分區均可以有它本身的第二階段的引導加載程序,可是,整個磁盤卻只有一個MBR。先裝好全部咱們須要的系統後再對配置文件進行修改。