第四章初步進(jìn)入linux世界
【Linux 系統(tǒng)啟動(dòng)過程】
Linux的啟動(dòng)其實(shí)和windows的啟動(dòng)過程很類似,不過windows我們是無法看到啟動(dòng)信息的,而linux啟動(dòng)時(shí)我們會(huì)看到許多啟動(dòng)信息,例如某個(gè)服務(wù)是否啟動(dòng)。
Linux系統(tǒng)的啟動(dòng)過程大體上可分為五部分:內(nèi)核的引導(dǎo);運(yùn)行init;系統(tǒng)初始化;建立終端 ;用戶登錄系統(tǒng)。
A 內(nèi)核引導(dǎo)
當(dāng)計(jì)算機(jī)打開電源后,首先是BIOS開機(jī)自檢,按照BIOS中設(shè)置的啟動(dòng)設(shè)備(通常是硬盤)來啟動(dòng)。緊接著由啟動(dòng)設(shè)備上的grub程序開始引導(dǎo)linux,當(dāng)引導(dǎo)程序成功完成引導(dǎo)任務(wù)后,Linux從它們手中接管了CPU的控制權(quán),然后CPU就開始執(zhí)行Linux的核心映象代碼,開始了Linux啟動(dòng)過程。也就是所謂的內(nèi)核引導(dǎo)開始了,在內(nèi)核引導(dǎo)過程中其實(shí)是很復(fù)雜的,我們就當(dāng)它是一個(gè)黑匣子,反正是linux內(nèi)核做了一些列工作,最后內(nèi)核調(diào)用加載了init程序linux命令大全,至此內(nèi)核引導(dǎo)的工作就完成了。交給了下一個(gè)主角init。
B 運(yùn)行init
在pentium 11 cpu 中,一級(jí)指令高速緩存(lii cache)用于預(yù)取指令單元(ifu)產(chǎn)生的指令請(qǐng)求.指令預(yù)取單元也是唯一可以訪問指令高速緩存的單元.指令預(yù)取單元只能在指令高速緩存中讀取指令,不能改寫指令,因此指令高速緩存是只讀的.一級(jí)數(shù)據(jù)高速緩存(ll dcache)用于cpu執(zhí)行單元(exu),執(zhí)行內(nèi)存數(shù)據(jù)的讀寫請(qǐng)求.執(zhí)行單元可以在數(shù)據(jù)高速緩存中讀取指令,或者改寫指令,因此數(shù)據(jù)高速緩存是可讀的.!癮rm wfi和wfe指令”中介紹過,wfi wakeup events會(huì)把cpu從wfi狀態(tài)喚醒,通常情況下,這些events是一些中斷事件,因此cpu喚醒后會(huì)執(zhí)行中斷handler,在handler中會(huì)wakeup某些進(jìn)程,在handler返回的時(shí)候進(jìn)行調(diào)度,當(dāng)沒有其他進(jìn)程需要調(diào)度執(zhí)行的時(shí)候,調(diào)度器會(huì)恢復(fù)idle進(jìn)程的執(zhí)行,當(dāng)然,idle進(jìn)程不做什么,繼續(xù)進(jìn)入idle狀態(tài),等待下一次的wakeup。結(jié)束語:順便提一下為什么會(huì)有inetd服務(wù)器的原因,因?yàn)槿绻麤]有的話,假設(shè)在系統(tǒng)中有10個(gè)請(qǐng)求服務(wù)端,然后就會(huì)創(chuàng)建10個(gè)接受進(jìn)程來接受服務(wù),這樣系統(tǒng)就多了10個(gè)進(jìn)程,那么如果沒有請(qǐng)求來的話這10個(gè)進(jìn)程還在掛起狀態(tài),嚴(yán)重的浪費(fèi)了系統(tǒng)的資源, 所以人們就想用一個(gè)進(jìn)程來做監(jiān)聽,所以就出來了個(gè)inetd服務(wù)器的東西,就是說它讀取/etc/inetd.conf文件讀取10個(gè)進(jìn)程的服務(wù)項(xiàng),然后創(chuàng)建socket等等,這樣系統(tǒng)中只是一個(gè)進(jìn)程在掛起,來請(qǐng)求時(shí),就調(diào)用相應(yīng)的任務(wù)進(jìn)程即可,這樣節(jié)省了系統(tǒng)的資源。
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not havenetworking)