linux系統啓動流程

By francis_hao    Jul 15,2018 html

 

boot-系統啓動流程,基於UNIX System V Release 4 linux

描述

不一樣發行版的系統啓動流程也不盡相同,可是也可粗略的劃分爲如下幾部分: spa

1. hardware 操作系統

2. operating system (OS) loader server

3. kernel htm

4. root user-space process (init and inittab) blog

5. boot scripts 排序

 

Hardware

按下啓動或者重啓以後,控制權就交給了存儲在只讀存儲器(一般是PROM)裏的程序了,一般這個程序被叫作BIOS。BIOS會執行一些基本的自測,而且會從非易失性存儲中讀取參數,在PC中,存儲是基於電池的CMOS存儲器。在非PC中,一般叫作"the NVRAM" (nonvolatile RAM)。 進程

存儲的參數在不一樣系統中其內容也不一樣,可是基原本說,須要由其指定由哪塊設備提供OS loader,這樣的設備一般叫作"the boot device"。硬件啓動步驟就是從boot device的固定位置加載OS loader並把控制權交給它。 ip

 

OS loader

OS loader的主要任務就是從某塊設備中定位內核,加載並運行。大部分OS loader容許用戶進行交互,這樣就能夠選擇要加載的內核,並傳輸一些可選的參數。

在不少系統裏,OS loader會受到不少限制,好比大小,所以這個部分有時候會被分紅兩個階段。

linux系統裏OS loader一般是lilo(8) 或 grub(8)

 

Kernel

當內核被加載,它會初始化各類組件和操做系統,對應每一個部分任務的軟件被認爲是驅動,內核啓動一個內核進程用於虛擬內存交換,進程叫作"kswapd",以後會掛載一些文件系統在根目錄下。

一些參數可能會被傳遞給內核,好比改變掛載的主文件系統,詳細的參數參見bootparam(7)。

在這以後,內核會建立初始化用戶進程,並給它數值爲1的PID,典型的,是執行程序/sbin/init,可是也能夠由參數指定。

 

Root user-space process

說明:下面的描述是基於UNIX System V Release 4的。然而,不少系統使用了另外一種相關可是從根本上不一樣的方法,systemd(1)。其對應的啓動過程細節在bootup(7)。

當/sbin/init啓動後,它讀取/etc/inittab文件以獲取運行級別,每一個運行級別對應一系列的服務。超級用戶能夠經過init(1)改變運行級別,並且能夠經過runlevel(8)查詢當前的運行級別。然而,經過編輯該文件來管理獨立的服務並非很方便,/etc/inittab只是用來引導一系列的腳本,由這些腳原本實現實際的啓動/關閉獨立的服務

 

Boot scripts

對於每一個託管的服務(mail, nfs server, cron, etc),有獨自的一個啓動腳本在一個特殊的目錄下(大部分是/etc/init.d),腳本能夠接受start、stop等參數。

 

Sequencing directories

爲了使特定的腳本在特定的運行級別下開始/中止,而且有特定的次序,所以使用了排序的目錄,一般的形式是/etc/rc[0-6S].d,每一個目錄下是鏈接到/etc/init.d目錄裏的腳本的鏈接。

一個最初的腳本(一般是/etc/rc)從inittab被調用,這個腳本調用對應目錄的腳本連接,其中連接以'S'開頭的表示以start參數調用,以'K'開頭的表示以stop參數調用,而腳本的執行順序則是根據數字順序進行的,好比

/etc/rc2.d/S12syslog會先於/etc/rc2.d/S80sendmail執行,而/etc/rc2.d/K10xfs則會以stop執行

不少系統管理這些連接是經過chkconfig(8)來進行的。

 

 


本文由 劉英皓 創做,採用 知識共享署名-非商業性使用-相同方式共享3.0中國大陸許可協議 進行許可。歡迎轉載,請註明出處:
轉載自:http://www.javashuo.com/article/p-pckffeym-cw.html

 

 

參考

【1】 man 7 boot

相關文章
相關標籤/搜索