開機(jī)流程
BIOS:
(Basic Input Output System)基本輸入輸出系統(tǒng),它是一組固化到計(jì)算機(jī)內(nèi)主板上一個ROM芯片 上的程序,保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開機(jī)后自檢程序和系統(tǒng)自啟動程序,可從CMOS中讀寫系統(tǒng)設(shè)置的具體信息。
MBR: Master Boot Record,主要引導(dǎo)記錄區(qū)。
Boot Loader:啟動引導(dǎo)程序。
開機(jī)詳細(xì)流程
第一步:加載BIOS
打開計(jì)算機(jī)電源,計(jì)算機(jī)硬件會自動加載BIOS,讀取BIOS內(nèi)相關(guān)硬件信息及進(jìn)行硬件系統(tǒng)的自檢,隨后根據(jù)BIOS配置找到第一個有引導(dǎo)程序的的設(shè)備。
第二步:讀取MBR
硬盤上第0磁道第一個扇區(qū)被稱為MBR,即主引導(dǎo)記錄,大小是512字節(jié),存放了預(yù)啟動信息、分區(qū)表信息。系統(tǒng)找到BIOS所指定的硬盤的MBR后,就會將其復(fù)制到物理內(nèi)存中,被復(fù)制到物理內(nèi)存的內(nèi)容就是Boot Loader(lilo或者grub)。
第三步:啟動Boot Loader
Boot Loader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核做好一切準(zhǔn)備。Boot Loader有若干種,其中Grub、Lilo是常見的Loader。本文以Grub為例講解,grub功能:提供一個菜單,允許用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本;把用戶選定的內(nèi)核裝載到RAM中的特定空間中,解壓、展開。
系統(tǒng)讀取內(nèi)存中的grub配置信息(一般為menu.lst或grub.conf),并依照此配置信息來加載指定內(nèi)核。
第四步:加載內(nèi)核
grub把系統(tǒng)控制權(quán)移交給內(nèi)核,內(nèi)核開始探測可識別到的所有硬件設(shè)備及嘗試掛載根目錄以獲取其驅(qū)動程序。此時(shí)就需要首先加載磁盤驅(qū)動程序以便讀取磁盤,而磁盤驅(qū)動程序又保存在磁盤內(nèi),這樣就會導(dǎo)致linux無法啟動。此時(shí)需要通過偽文件系統(tǒng)來解決這一問題。
虛擬文件系統(tǒng) (Initial RAM Disk) 即/boot/initramfs-release.img ,這個文件的特色是,能夠通過boot loader 來加載到內(nèi)存中, 然后這個文件會被解壓縮并且在內(nèi)存當(dāng)中模擬成一個根目錄,且此模擬在內(nèi)存當(dāng)中的文件系統(tǒng)能夠提供一支可運(yùn)行的程序,透過該程序來加載啟動過程中所最需要的核心模塊,通常這些模塊就是 U盤, RAID, LVM, SCSI 等文件系統(tǒng)與磁盤的驅(qū)動程序。等加載完成后, 會幫助核心重新呼叫 /sbin/init 來開始后續(xù)的正常啟動流程。
注:RamDisk是輔助性文件,并非必須,取決于內(nèi)核是否能直接驅(qū)動根文件系統(tǒng)所在的設(shè)備。
第五步:運(yùn)行/sbin/init程序,設(shè)定linux的運(yùn)行等級
內(nèi)核加載完畢后,運(yùn)行用戶空間內(nèi)第一個應(yīng)用程序就是/sbin/init,然后讀取/etc/inttab文件,依據(jù)文件配置設(shè)定系統(tǒng)運(yùn)行等級;
第六步:init進(jìn)程執(zhí)行rc.sysinit
設(shè)定了運(yùn)行等級后,Linux系統(tǒng)執(zhí)行/etc/rc.d/rc.sysinit系統(tǒng)初始化腳本程序。初始化包括:設(shè)置主機(jī)名、設(shè)置歡迎信息、激活Udex和seliux、掛載/etc/fstab文件中定義的所有文件系統(tǒng)、檢測根文件系統(tǒng)、設(shè)置系統(tǒng)時(shí)鐘、根據(jù)/etc/sysctl.conf文件來設(shè)置內(nèi)核參數(shù)、激活LVM及軟RAID設(shè)備、激活swap設(shè)備、加載額外設(shè)備的驅(qū)動程序、執(zhí)行清理操作。
第七步:啟動內(nèi)核模塊
具體是依據(jù)/etc/sysconfig/modules文件目錄下的文件來裝載內(nèi)核模塊。第八步:執(zhí)行 run-level 的各個服務(wù)啟動 (script 方式)
根據(jù)運(yùn)行級別的不同,系統(tǒng)會運(yùn)行rc0.d到rc6.d中的相應(yīng)的腳本程序,來完成相應(yīng)的初始化工作和啟動相應(yīng)的服務(wù)。
第九步:執(zhí)行/etc/rc.d/rc.local
rc.local就是在一切初始化工作后,Linux留給用戶進(jìn)行個性化的地方。你可以把你想設(shè)置和啟動的東西放到這里。
第十步:執(zhí)行/bin/login程序,進(jìn)入登錄狀態(tài)
Linux 就會啟動終端機(jī)或者是 X Window 來等待使用者登陸。
來源:
https://blog.51cto.com/zhangpenglinux/1760206