一、linux的內(nèi)核管理:對內(nèi)核的基本認識
我們所談到的操作系統(tǒng)主要指內(nèi)核
以上功能據(jù)沒有涉及實現(xiàn)文本編輯、實現(xiàn)字處理,也沒有服務(wù)等等。
故,操作系統(tǒng)是一種通用軟件,是平臺類軟件,自己并不做任何工作,只是給其他程序提供了運行環(huán)境。除操作系統(tǒng)之外,還有應(yīng)用程序,為實現(xiàn)某一目的,專門設(shè)計的程序。
那么,既然內(nèi)核有這么多功能,模塊化設(shè)計?各功能獨立成子系統(tǒng)?
顯然將功能整合在一起,內(nèi)核將變得非常復(fù)雜。
二、內(nèi)核的設(shè)計流派
說說內(nèi)核設(shè)計的兩大流派:
從根本上講,將一個事情拆成各個小問題,然后每個小問題只復(fù)雜一個任務(wù)是linux的設(shè)計哲學(xué)之一。
按道理,linux是微內(nèi)核,但恰恰不是。
三、linux內(nèi)核設(shè)計
原因:早期設(shè)計的時沒有使用微內(nèi)核的思想,linux是一步步擴展而來后來,有呼聲,要將linux改為微內(nèi)核,但linus拒絕,能工作能穩(wěn)定的工作,就OK,更重要的是,雖然微內(nèi)核是一種優(yōu)良的設(shè)計思想,但時下,他跑起來一點不比單內(nèi)核高效更高級,但微內(nèi)核有更優(yōu)良的線程,linux則表現(xiàn)一般。
但linux在一步步的發(fā)展中吸取了微內(nèi)核的設(shè)計經(jīng)驗,雖然是單內(nèi)核,但是兼具微內(nèi)核的特性。
linux通過使用模塊化內(nèi)核設(shè)計來兼具微內(nèi)核特性,但這樣的模塊化設(shè)化設(shè)計并不是像微內(nèi)核一樣是各個子系統(tǒng),而是由核心加外圍的功能性模塊組成內(nèi)核。而微內(nèi)核子系統(tǒng)都是各自獨立運行的,不需要依賴其他部分就能工作。而linux各模塊必許依賴核心,只是能在使用時進行裝載,不用時被動態(tài)卸載。linux下的模塊外在表現(xiàn)為類型程序的庫文件,只是程序庫文件為.so,而內(nèi)核模塊為.ko(kernel object),被內(nèi)核調(diào)用。
假設(shè),如果驅(qū)動是內(nèi)核提供的,想象下,編譯好一個內(nèi)核,裝在主機上,萬一后來發(fā)現(xiàn)他無法驅(qū)動我們后來新添加的新硬件設(shè)備。各種硬件都是由內(nèi)核驅(qū)動的,內(nèi)核沒有提供這個程序。假設(shè)我們有了驅(qū)動程序,怎樣才能讓他驅(qū)動起來,是不是從新編譯內(nèi)核,這是對用戶和廠商的不幸。
模塊化設(shè)計得以避免這種情況,故各贏家廠商的以模塊化的形式開發(fā)自己的驅(qū)動,只需針對某一特定設(shè)備開發(fā)自己驅(qū)動程序的即可,而后我們編譯這些模塊即可。由于linux支持動態(tài)裝卸載模塊,因此當(dāng)我需要和不需要某一功能時,可自行拆卸,并不影響核心的運行,這就是好處和優(yōu)勢表現(xiàn)之一。
四、內(nèi)核的基本概念
跟各種應(yīng)用程序一樣,內(nèi)核也是一種應(yīng)用程序,只不過,這種應(yīng)用程序是直接操作硬件的。
內(nèi)核直接面對的是硬件,調(diào)用的是硬件接口,是通過個硬件廠商和CPU廠商提供的指令集進行開發(fā)。
開發(fā)應(yīng)用程序面對的是內(nèi)核,系統(tǒng)調(diào)用,或庫調(diào)用進行的,故簡單得多。
為編寫內(nèi)核級的應(yīng)用程序,又為了避免過于底層,固有很多庫文件,可以讓內(nèi)核編譯時使用。
內(nèi)核是直接面向硬件的,故可用資源權(quán)限很大,但內(nèi)核是工作在有限地址空間內(nèi)的,在linux而言,32位系統(tǒng)上,線性地址空間中,內(nèi)核只認為自己有1G的,雖然可以掌握4G,但是自己的運行只能使用1G,剩下的3G給其他應(yīng)用程序。win是各2G。故我們開發(fā)內(nèi)核時可用的內(nèi)存空間很有限,尤其是開發(fā)驅(qū)動,要明白自己的可用空間很有限,故需高效。
五、從動態(tài)的角度看linux主機的運行狀況
應(yīng)用程序運行在內(nèi)核上,只是邏輯上的情況。但實際是直接工作在硬件上的,任意應(yīng)用程序數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)處理都是CPU,只是他們不能隨意使用而已,要接受內(nèi)核的管理。
但CPU只有一顆,應(yīng)用程序工作的時候,內(nèi)核就暫停了,應(yīng)用程序也在內(nèi)存空間中,一旦應(yīng)用程序想要訪問其他硬件資源時,即要執(zhí)行I/O指令時,不能執(zhí)行。
因為應(yīng)用程序看不見硬件,應(yīng)用程序是基于系統(tǒng)調(diào)用的程序,當(dāng)應(yīng)用程序需要訪問硬件資源時時,就向CPU發(fā)起特權(quán)請求,一旦CPU收到特權(quán)請求,CPU就會喚醒內(nèi)核,從而執(zhí)行內(nèi)核中的某段代碼(非完整的內(nèi)核程序),然后將結(jié)果返回給應(yīng)用程序,而后內(nèi)核代碼退出,內(nèi)核程序暫停。在這期間CPU就從用戶模式轉(zhuǎn)換成了內(nèi)核模式,內(nèi)核模式 就好似能夠執(zhí)行特權(quán)的模式。
所有的應(yīng)用程序時在硬件上直接執(zhí)行的,只是在必要時接受內(nèi)核的管理和監(jiān)控。
故內(nèi)核也是監(jiān)控器,監(jiān)控程序,是資源和進程的監(jiān)控程序。
六、CPU的時間與內(nèi)核的空間
因為內(nèi)存中每一個進程都以為直接是獨占CPU的,故內(nèi)核即是將CPU虛擬化,提供給進程,CPU在內(nèi)核級別就已經(jīng)虛擬化了,通過將CPU切成時間片,隨著時間流逝而完成在個進程之間分派計算能力的,CPU是以時間提供其計算能力的。
而內(nèi)存是站在空間角度進行數(shù)據(jù)容納的。
這就是所謂的時空轉(zhuǎn)換。
在單位時間內(nèi)要能夠提供的計算能力越大,必須速度越快,否則只能延長時間。這也就是我們需要更快的CPU,以節(jié)約時間。
對于內(nèi)存而言考慮的是空間問題。
六、CPU的運算特性
I/O是最慢的設(shè)備,我們CPU有大量時間都拿來等待I/O完成,為避免空余的沒有任何意義的等待,需要等待時,就讓CPU運行別的進程或線程
我們應(yīng)該最大能力榨取CPU的計算能力,因為CPU的計算能力是隨著時間時鐘頻率的振蕩器在震蕩,你用或者不用他都在跑
如果你讓CPU空閑著,他依然耗電,而且隨時間流逝,計算能力白白消逝了,因此能夠讓CPU工作在80-90%的利用率下,這就意味著他的生產(chǎn)能力得到了充分的發(fā)揮。CPU是用不壞的,沒有什么磨損很消耗,是電器設(shè)備,除了功率大是發(fā)熱量大,散熱足夠就好了,對于電器設(shè)備而言不用反而會壞
七、從硬件看系統(tǒng)啟動
內(nèi)核沒有生產(chǎn)力,生產(chǎn)力是由個被調(diào)用的應(yīng)用程序產(chǎn)生,故我們應(yīng)該盡量讓系統(tǒng)運行在應(yīng)用程序模式中,故內(nèi)核占據(jù)的時間越少越好。而內(nèi)核主要在進程切換、中斷處理等相關(guān)功能上,占據(jù)時間,模式切換到目的也是為了生產(chǎn)完成,但進程切換與生產(chǎn)就沒有任何意義了,中斷處理可以認為與生產(chǎn)本身相關(guān),因為應(yīng)用要執(zhí)行I/O
內(nèi)核的主要目的是完成硬件管理,而linux中
有一個思想,各進程都是由其父進程衍生的,由父進程fork()而來的,那么由誰來fork()以及管理這些進程,于是有了大管家程序init,統(tǒng)籌管理用戶空間的所有進程。用戶空間的管理工作都不會由內(nèi)核執(zhí)行,故我們啟動完內(nèi)核之后,要想啟動用戶空間首先需要啟動init,故init的PID號永遠為1。init也是由其父進程fork()而來,是內(nèi)核空間中的用來專門引導(dǎo)用戶空間進程的機制。init是一個應(yīng)用程序,在/sbin/init下,是一個可執(zhí)行文件。
審核編輯:黃飛
?
評論
查看更多