今天,咱們主要來談談計算機系統的啓動流程,在此借用網絡上的一張圖來講明整個流程:網絡
一、BIOS啓動blog
BIOS是寫入到主板上的一個韌體(韌體就是寫入到硬件上的一個軟件程序)。開機的時候,BIOS是計算機系統會主動執行的第一個程序。BIOS主要的一個功能就是存儲了磁盤的啓動順序,它會按照啓動順序去讀取可以開機的硬盤的第一個扇區的MBR信息進程
二、讀取MBR內存
磁盤的第一個扇區(大小爲512bytes)主要記錄兩個信息:主引導分區(MBR)和分區表。其中,MBR大小爲446bytes用於存儲引導加載程序(BootLoader),分區表大小爲64bytes記錄硬盤分區狀態,最後2bytes用於MBR的有效性檢查。BIOS啓動的目的就是讓MBR中引導加載程序啓動it
三、引導加載程序(Boot loader)登錄
目前經常使用的引導加載程序就是grub,它是一支可讀取內核文件並讓其執行的軟件。grub程序會根據/boot/grub/grub.conf文件查找Kernel的信息,而後開始加載Kernel程序,當Kernel程序被檢測並在加載到內存中,grub就將控制權交接給了Kernel程序百度
四、Kernel加載軟件
內核(Kernel)是Linux系統最主要的程序,它的做用就是進行硬件檢測並加載驅動程序。因爲Kernel爲了精簡且以壓縮的文件形式存儲在硬盤中,故只保留了最基本的模塊,並無各類硬件的驅動程序,也就沒法識rootfs所在的設備,故產生了initrd這個文件。該文件是在安裝系統時產生的,是一個臨時的根文件系統(rootfs)。它裝載了必要的驅動模塊,當Kernel啓動時,能夠從initrd文件中裝載驅動模塊,直到掛載真正的rootfs,而後將initrd從內存中移除。硬件驅動成功後,Kernel會主動調用init進程硬件
五、啓動Init進程二維碼
init是系統啓動的第一個進程,是全部進程的父進程,打個比喻它就是女媧的級別,全部的人類(進程)都是它造出來的,全部幹這行的同窗們在kill進程的時候千萬不要執行kill -9 init,你幹掉了造物主,你說會是什麼後果,那就是本身做死。init會根據/etc/inittab中設定的動做進行腳本的執行,init執行第一個腳本/etc/rc.d/rc.sysinit來準備軟件執行的操做環境(如網絡、時區、設定主機名,掛載文件系統等)。系統的操做環境準備好以後,接下來就是系統服務的啓動
六、根據Run-level 進行服務啓動
runlevel,系統運行級別(Linux系統有7個級別,哪7個請自行百度),不一樣的級別會啓動的服務不同,init會根據定義的級別去執行相應目錄下(/etc/rc.d/rcN.d)的腳本,該目錄下的腳本只有K*和S*開頭的文件,K開頭的文件爲開機須要執行關閉的服務,S開頭的文件爲開機須要執行開啓的服務
七、用戶自定義開機啓動程序
完成默認runlevel指定的各項服務的啓動後,系統最後會自動執行/etc/rc.d/rc.local這個腳本(該腳本的做用請看大標題),至此,系統啓動完成,你能夠看到登陸界面啦
我今天才知道,我之因此漂泊就是我尚未成爲大俠,掃二維碼關注我哦