Power On
對於PC上所有的80x86的CPU,在剛開機時CS=FFFF而IP=0000
CPU就依據CS及IP的值,到FFFF0H去執行那個地方所放的指令FFFF0H也就是ROM
BIOS的位址,ROM BIOS就會作一些檢查的動作像記憶體,鍵盤等(開機時系統自我測試-POST
Power On Self Test[POST])確認一切正常後,讀取磁碟機上的第一個sector(硬碟的的第一個sector稱為MBR)到Pre-Boot區找那個Partition被標成Active然後去讀那個Partition的Boot區。Boot區包含了一個小程式(一般為LILO),會從Partition的Boot區讀取核心(kernel
image)並且啟動它但放在Partition的Boot區裡面的啟動磁區的程式碼是無法以連續性的方式讀取磁碟,它必須去找尋檔案系統所放置的啟動磁區位置,解決這個問題可以用好幾種方法解決,但是最普遍使用的方法是使用LILO。
啟動LILO
若是使用 LILO
啟動後,它一般是最先被讀取的並且啟動預設核心,當然也可以組態LILO在數個核心之間選取其中一個來啟動,或者選擇其它種的OS(ex:windows,NT,freebsd..)。因為LILO是一個具有多從開機管理程式(boot
manager)的功能Loader。
INITIALIZE
Linux 核心(kernel image)被安裝成壓縮狀,所以首先它自己要先自我解壓縮,核心啟動檔的開頭包含了一個小程式就是專做這種事的。在Linux核心(kernel
image)被讀入到memory裡之後,會顯示訊息到console上(這些訊息都是每個裝置(根據核心裡是否有被編譯進去)在初使化時由核心所印出來的。在初始設定周邊裝置的驅動程式後,核心就會執行init這個程式(一般放在/sbin下)。init這個process的PID為1,它是所有process的祖先。init他會衍生出(spawn)新的process,並在離開某些程式時會再重新起動它們。
Ex:每個virtual console上都由init啟動的getty process來監控,當登出其中一個時,init就會啟動另一個新的process,讓人再次登入。
此外,init也會在系統啟動時執行一些程式和script檔。
如:
init 執行 /etc/rc.d/rc.sysinit
rc.sysinit 執行自己該做的工作,接著執行 rc.serial (若它存在的話)
init 執行預設 runlevel 的所有 scripts。
init 執行 rc.local
init所做的任何事都是由/etc/inittab檔所控制的。