由於BIOS功能使用上的不同,它由兩個部分組成:POST碼runtime服務。POST完成後,它將從儲存空間中被清除,但是BIOS runtime服務會被保留,用於目標作業系統。
為了啟動作業系統,BIOS的runtime服務將搜尋那些啟用狀態的或是可引導啟動的裝置,搜尋的順序則由CMOS設定決定(也就是我們平時所謂的在 BIOS中設定的啟動順序)。一個軟碟機,一台光碟機,一個硬碟上的分區,網路上的裝置甚至一個usb 快閃記憶體盤都可以作為一個啟動裝置。
當然,linux通常是從硬碟啟動的。硬碟上的MBR(主開機記錄)包含有基本的boot loader,它是一個512位元組大小的扇區,位於磁碟的第一個扇區(0磁頭0磁軌1扇區)。當MBR被裝載到RAM中後,BIOS就會將控制權轉交給MBR。
vim /etc/grub.conf
root (hd0,0)
通過MBR進入作業系統管理菜單(/etc/grub.conf hiddenmenu 管理菜單預設是隱藏的)。
核心作用:驅動硬體,管理記憶體,調度任務。
ll -h /boot/vmlinuz***核心是很小的1.8m
2. 核心啟動:建立1#進程並執行,由它建立若干核心線程(kernel thread),然後裝入並執行程式/sbin/init(變成一個使用者進程)。此後,init根據/etc/inittab設定檔來執行相應的指令碼進行系統初始化,如設定鍵盤、字型,裝載模組,設定網路等。
對於Redhat來說,執行的順序為:
/etc/rc.d/rc.sysinit # 由init執行的第一指令碼
/etc/rc.d/rc $RUNLEVEL # init執行指定運行層級($RUNLEVEL為預設的運行模式)的各指令碼;
/etc/rc.d/rc.local #運行模式2、3、5時會啟動並執行指令碼
/sbin/mingetty(或getty) # 等待使用者登入
/etc/inittab中指定了系統的運行層級(RUNLEVEL),init根據運行層級啟動相關的服務(一些後台進程),實現不同的功能。
RUNLEVEL值為:0-6
0:halt, 1:單使用者,2:多使用者,3:多使用者並啟動NFS服務
4:保留,5:運行xdm(X window)以圖形介面方式登入
6:reboot
3./etc/inittab檔案
/etc/inittab的檔案內容如下:
# 設定系統開機預設的RUNLEVEL:
id:3:initdefault:
# 開始進行RUNLEVEL的服務啟動前,使用來偵測與初始化系統內容的設定檔案:
si::sysinit:/etc/rc.d/rc.sysinit
# 是否允許按下 [ctrl]+[alt]+[del] 就重新開機的設定項目:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
摘引:
init進程和inittab引導指令
init進程是系統所有進程的起點,核心在完成核內引導以後,即在本線程(進程)空間內載入init程式,它的進程號是1。
init程式需要讀取/etc/inittab檔案作為其行為指標,inittab是以行為單位的描述性(非執行性)文本,每一個指令行都具有以下格式:
id:runlevel:action:process其中id為入口標識符,runlevel為運行層級,action為動作代號,process為具體的執行程式。
id一般要求4個字元以內,對於getty或其他login程式項,要求id與tty的編號相同,否則getty程式將不能正常工作。
runlevel是init所處於的運行層級的標識,一般使用0-6以及S或s。0、1、6運行層級被系統保留,0作為shutdown動作,1作為重啟至單一使用者模式,6為重啟;S和s意義相同,表示單一使用者模式,且無需inittab檔案,因此也不在inittab中出現,實際上,進入單一使用者模式時,init直接在控制台(/dev/console)上運行/sbin/sulogin。
在一般的系統實現中,都使用了2、3、4、5幾個層級,在Redhat系統中,2表示無NFS支援的多使用者模式,3表示完全多使用者模式(也是最常用的層級),4保留給使用者自訂,5表示XDM圖形登入方式。7-9層級也是可以使用的,傳統的Unix系統沒有定義這幾個層級。runlevel可以是並列的多個值,以匹配多個運行層級,對大多數action來說,僅當runlevel與當前運行層級匹配成功才會執行。
initdefault是一個特殊的action值,用於標識預設的啟動層級;當init由核心啟用以後,它將讀取inittab中的initdefault項,取得其中的runlevel,並作為當前的運行層級。如果沒有inittab檔案,或者其中沒有initdefault項,init將在控制台上請求輸入 runlevel。
sysinit、boot、bootwait等action將在系統啟動時無條件運行,而忽略其中的runlevel,其餘的action(不含initdefault)都與某個runlevel相關。
id:3:initdefault:
#表示當前預設運行層級為3--完全多任務模式;
si::sysinit:/etc/rc.d/rc.sysinit
#啟動時自動執行/etc/rc.d/rc.sysinit指令碼
l3:3:wait:/etc/rc.d/rc 3
#當運行層級為3時,以3為參數運行/etc/rc.d/rc指令碼,init將等待其返回
0:12345:respawn:/sbin/mingetty tty0
#在1-5各個層級上以tty0為參數執行/sbin/mingetty程式,開啟tty0終端用於
#使用者登入,如果進程退出則再次運行mingetty程式
x:5:respawn:/usr/bin/X11/xdm -nodaemon
#在5層級上運行xdm程式,提供xdm圖形方式登入介面,並在退出時重新執行
附圖:
作者“不吃西紅柿”