Linux系統啟動過程

2022-05-28 07:45:11 字數 3230 閱讀 6967

開機bios自檢,載入硬碟。

讀取mbr,並進行boot loader引導。

載入核心kernel,kernel檢測硬體和載入驅動程式。

啟動init程序,依據inittab檔案設定執行級別

init程序,執行rc.sysinit檔案來準備軟體執行的操作環境。

啟動核心模組,執行不同級別的指令碼程式。

執行/etc/rc.d/rc.local。

啟動mingetty,進入系統登陸介面。

bios(basic input / output system),又稱基本輸入輸出系統,可以視為是乙個永久地記錄在rom中的乙個軟體,是作業系統輸入輸出管理系統的一部分。早期的bios晶元確實是"唯讀"的,裡面的內容是用一種燒錄器寫入的,一旦寫入就不能更改,除非更換晶元。現在的主機板都使用一種叫flash eprom的晶元來儲存系統bios,裡面的內容可通過使用主機板廠商提供的擦寫程式擦除後重新寫入,這樣就給使用者公升級bios提供了極大的方便。

bios的功能由兩部分組成,分別是post碼和runtime服務。post階段完成後它將從儲存器中被清除,而runtime服務會被一直保留,用於目標作業系統的啟動。bios兩個階段所做的詳細工作如下:

步驟1:上電自檢post(power-on self test),主要負責檢測系統外圍關鍵裝置(如:cpu、記憶體、顯示卡、i/o、鍵盤滑鼠等)是否正常。例如,最常見的是記憶體鬆動的情況,bios自檢階段會報錯,系統就無法啟動起來;

步驟2:步驟1成功後,便會執行一段小程式用來列舉本地裝置並對其初始化。這一步主要是根據我們在bios中設定的系統啟動順序來搜尋用於啟動系統的驅動器,如硬碟、光碟、u盤、軟盤和網路等。我們以硬碟啟動為例,bios此時去讀取硬碟驅動器的第乙個扇區(mbr,512位元組),然後執行裡面的**。實際上這裡bios並不關心啟動裝置第乙個扇區中是什麼內容,它只是負責讀取該扇區內容、並執行。

至此,bios的任務就完成了,此後將系統啟動的控制權移交到mbr部分的**。

mbr是master boot record的縮寫。硬碟的0柱面、0磁頭、1扇區稱為主引導扇區。它由三個部分組成,主引導程式(bootloader)、 硬碟分割槽表dpt(disk partition table)和硬碟有效標誌(55aa),其結構圖如下所示:

磁碟分割槽表包含以下三部分:

partition id  (5:延申  82:swap   83:linux   8e:lvm     fd:raid)

partition起始磁柱

partition的磁柱數量

通常情況下,諸如lilo、grub這些常見的引導程式都直接安裝在mbr中。

通過boot loader的管理載入kernel檔案之後linux就會將核心解壓到記憶體中,並利用核心的功能開始測試與驅動各個周邊裝置。

需要注意的是:linux核心會以自己的功能重新檢測一次硬體,而不一定會使用bios檢測到的硬體資訊,也就是說,核心此時開始接管bios後的工作。

核心檔案:/boot/vmlinuz

為了硬體開發商與其他核心功能開發者的便利,linux核心可以通過動態載入核心模組的,這些核心模組存放的目錄:/lib/moudles。

核心載入完畢進行硬體檢測與驅動程式載入後,此時主機的硬體應該已經準備就緒了,此時核心會主動呼叫第乙個程序:/sbin/init。/sbin/init的pid是1,其主要的功能是準備軟體的執行環境。

所有的配置都是通過init的配置檔案/etc/inittab來規劃,/etc/inittab中有乙個重要的設定選項,那就是預設的run level:

許多程式需要開機啟動。它們在windows叫做"服務"(service),在linux就叫做"守護程序"(daemon。init程序的一大任務,就是去執行這些開機啟動的程式。但是,不同的場合需要啟動不同的程式。linux允許為不同的場合,分配不同的開機啟動程式,這就叫做"執行級別"(runlevel)。也就是說,啟動時根據"執行級別",確定要執行哪些程式。  

linux系統有7個執行級別(runlevel): 

執行級別0:系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動

執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸

執行級別2:多使用者狀態(沒有nfs)

執行級別3:完全的多使用者狀態(有nfs),登陸後進入控制台命令列模式

執行級別4:系統未使用,保留

執行級別5:x11控制台,登陸後進入圖形gui模式

執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動

開始載入各項系統服務走之前,得先設定好整個系統環境,主要利用/etc/rc.d/rc.sysinit指令碼程式來進行系統環境設定。

通過外部第一號引數($1)來取得想要執行的指令碼目錄,即由/etc/rc.d/rc*.d(*=0~6)所有的檔案均是指向/etc/init.d下相應檔案的符號鏈結。rc.sysinit通過分析/etc/inittab檔案來確定系統的啟動級別,然後才去執行/etc/rc.d/rc*.d下的檔案。

rc*.d目錄下都是一些符號鏈結檔案,這些鏈結檔案都指向init.d目錄下的service指令碼檔案,命名規則為k+nn+服務名或s+nn+服務名,其中nn為兩位數字。系統會根據指定的執行級別進入對應的rcn.d目錄,並按照檔名順序檢索目錄下的鏈結檔案

對於以k開頭的檔案,系統將終止對應的服務。

對於以s開頭的檔案,系統將啟動對應的服務。

有任何想啟動時就進行的工作時,都可以將它寫入到/etc/rc.d/rc.local中,那麼該工作就會在啟動的時候被自動載入。

根據/etc/initatab的設定載入終端機或x window介面

0 – halt,關機模式

1 – single,單使用者模式

2 - full multi-user with display manager (gui)

3 - full multi-user with display manager (gui)

4 - full multi-user with display manager (gui)

5 - full multi-user with display manager (gui)

6 – reboot,重啟

runlevel
由此可知ubuntu的預設啟動級別為2。

ubuntu下rc.local 的位置是/etc。

rhel系統啟動過程 Linux 系統啟動過程

按下系統的電源開關,過一會就可以看到linux的登入介面了。你是否曾經想過,從按下電源開關到登入介面出現,這後面到底發生了什麼?linux 系統在啟動過程中,首先是韌體 pc 上大多是 cmos bios 的物理檢測,諸如檢測系統的顯示卡 cpu 和硬碟等,可從系統按下電源後看到此檢測資訊 檢測無問...

rhel系統啟動過程 Linux系統啟動過程簡介

1 bios加電自檢 計算機啟動後,首先會進行韌體bios的自檢,即所謂的post,然後把保持在mbr主引導記錄中的主引導引導程式到記憶體中 2 載入主引導引導程式 mbr 主引導引導程式通過分割槽表查詢活動分割槽,然後將活動分割槽的次引導引導程式從裝置讀入記憶體並執行 3 載入次引導引導程式 gr...

rhel系統啟動過程 Linux 系統啟動過程

linux系統啟動過程 linux啟動時我們會看到許多啟動資訊。核心的引導。執行 init。系統初始化。建立終端 使用者登入系統。init程式的型別 sysv init,centos 5之前,配置檔案 etc inittab。upstart init,centos 6,配置檔案 etc initta...