前言:html
前天在看APUE的時候忽然想到了這個問題,因而給本身科普一下Linux系統的啓動流程。linux
1.加載BIOS
接通電源後,計算機首先加載BIOS(即Basic Input-Output System,該程序被固化在主板上的一個ROM芯片中,包括最基本的輸入輸出程序、系統設置程序、開機硬件自檢程序和系統自舉程序等),進行硬件自檢(即Power On Self Test)檢查計算機硬件是否知足運行的基本條件(對於非嚴重故障,會發出一些聲音,嚴重故障則會直接退出),硬件自檢完成之後,BIOS根據CMOS(這是保存BIOS系統設置的地方,包括CPU、軟硬盤驅動器和鍵盤等部件的信息)中保存的啓動順序信息找處處於活動狀態的而且能夠引導的設備,一般爲硬盤。網絡
2.加載Boot Loader
BIOS 把控制權交給該啓動優先級最高的設備,此時計算機會讀取該設備的第一個扇區,這個扇區被稱爲主引導記錄MBR(即master boot record),該扇區的內容稱做引導加載程序 Boot Loader,大小爲512字節。Boot Loader 用來引導不一樣的操做系統,不一樣的操做系統 Boot Loader 也不一樣,以Ubuntu中的grub爲例,系統會讀取grub配置信息,並依照此配置信息加載內核。函數
3.加載kernel
系統讀取內核映像,解壓到內存,此時計算機由內核管理,內核會先檢測硬件環境,而後加載驅動程序(內核將一些沒必要要的功能都以模塊的形式存儲在/lib/module中,內核會動態加載,這裏經過加載虛擬文件系統(initrd文件)實現)此時系統的硬件已經就緒了。ui
4.執行init程序
內核加載完成之後,開始執行系統的第一個程序,即建立第一個用戶進程init進程(該程序在/sbin/init中),init進程會讀取與系統有關的初始化文件(例如/etc/init.d),來準備軟件的執行環境,包括系統的主機名、網絡設置、文件系統等(這個過程相對複雜,會再補充)。spa
5.登陸
執行/bin/login程序,用戶就能夠登陸了,至此,完成了系統的啓動過程。操作系統
後記:
在科普的過程當中,發現每個點都值得深刻探究,甚至還看到幾篇論文來分析Linux啓動流程的,在init進程處由於涉及不少的內核函數,在後面研究內核後應該會有新的感觸,因爲時間有限,不敢亂寫,不過我對啓動流程已經有了一個總體的把握,主要目的已達到。但願在後面的實踐中慢慢感悟。.net
參考資料:
http://blog.chinaunix.net/uid-26495963-id-3066282.html
http://blog.csdn.net/clozxy/article/details/5487715
http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html
http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.htmlunix