內(nèi)核是操作系統(tǒng)最基本的部分。它是為眾多應(yīng)用程序提供對(duì)計(jì)算機(jī)硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內(nèi)核決定一個(gè)程序在什么時(shí)候?qū)δ巢糠钟布僮鞫嚅L時(shí)間。直接對(duì)硬件操作是非常復(fù)雜的,所以內(nèi)核通常提供一種硬件抽象的方法來完成這些操作。硬件抽象隱藏了復(fù)雜性,為應(yīng)用軟件和硬件提供了一套簡潔,統(tǒng)一的接口,使程序設(shè)計(jì)更為簡單。
嚴(yán)格地說,內(nèi)核并不是計(jì)算機(jī)系統(tǒng)中必要的組成部分。程序可以直接地被調(diào)入計(jì)算機(jī)中執(zhí)行,這樣的設(shè)計(jì)說明了設(shè)計(jì)者不希望提供任何硬件抽象和操作系統(tǒng)的支持,它常見于早期計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)中。最終,一些輔助性程序,例如程序加載器和調(diào)試器,被設(shè)計(jì)到機(jī)器核心當(dāng)中,或者固化在只讀存儲(chǔ)器里。這些變化發(fā)生時(shí),操作系統(tǒng)內(nèi)核的概念就漸漸明晰起來了。
目錄[隱藏] |
單內(nèi)核結(jié)構(gòu)在硬件之上定義了一個(gè)高階的抽象界面,應(yīng)用一組原語(或者叫系統(tǒng)調(diào)用)來實(shí)現(xiàn)操作系統(tǒng)的功能,例如進(jìn)程管理,文件系統(tǒng),和存儲(chǔ)管理等等,這些功能由多個(gè)運(yùn)行在核心態(tài)的模塊來完成。
盡管每一個(gè)模塊都是單獨(dú)地服務(wù)這些操作,內(nèi)核代碼是高度集成的,而且難以編寫正確。因?yàn)樗械哪K都在同一個(gè)內(nèi)核空間上運(yùn)行,一個(gè)很小的bug都會(huì)使整個(gè)系統(tǒng)崩潰。然而,如果開發(fā)順利,單內(nèi)核結(jié)構(gòu)就可以從運(yùn)行效率上得到好處。
很多現(xiàn)代的單內(nèi)核結(jié)構(gòu)內(nèi)核,如Linux和FreeBSD內(nèi)核,能夠在運(yùn)行時(shí)將模塊調(diào)入執(zhí)行,這就可以使擴(kuò)充內(nèi)核的功能變得更簡單,也可以使內(nèi)核的核心部分變得更簡潔。
單內(nèi)核結(jié)構(gòu)的例子:
微內(nèi)核結(jié)構(gòu)由一個(gè)非常簡單的硬件抽象層和一組比較關(guān)鍵的原語或系統(tǒng)調(diào)用組成,這些原語僅僅包括了建立一個(gè)系統(tǒng)必需的幾個(gè)部分,如 線程管理,地址空間和進(jìn)程間通信等。
微核的目標(biāo)是將系統(tǒng)服務(wù)的實(shí)現(xiàn)和系統(tǒng)的基本操作規(guī)則分離開來。例如,進(jìn)程的輸入/輸出鎖定服務(wù)可以由運(yùn)行在微核之外的一個(gè)服務(wù)組件來提供。這些非常模塊化的用戶態(tài)服務(wù)器用于完成操作系統(tǒng)中比較高級(jí)的操作,這樣的設(shè)計(jì)使內(nèi)核中最核心的部分的設(shè)計(jì)更簡單。一個(gè)服務(wù)組件的失效并不會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰,內(nèi)核需要做的,僅僅是重新啟動(dòng)這個(gè)組件,而不必影響其它的部分
微內(nèi)核將許多OS服務(wù)放入分離的進(jìn)程,如文件系統(tǒng),設(shè)備驅(qū)動(dòng)程序,而進(jìn)程通過消息傳遞調(diào)用OS服務(wù).微內(nèi)核結(jié)構(gòu)必然是多線程的,第一代微內(nèi)核,在核心提供了較多的服務(wù),因此被稱為'胖微內(nèi)核',它的典型代表是MACH,它既是GNU HURD也是APPLE SERVER OS 的核心,可以說,蒸蒸日上.第二代為內(nèi)核只提供最基本的OS服務(wù),典型的OS是QNX,QNX在理論界很有名,被認(rèn)為是一種先進(jìn)的OS.
微內(nèi)核的例子:
單內(nèi)核結(jié)構(gòu)是非常有吸引力的一種設(shè)計(jì),由于在同一個(gè)地址空間上實(shí)現(xiàn)所有低級(jí)操作的系統(tǒng)控制代碼的復(fù)雜性的效率會(huì)比在不同地址空間上實(shí)現(xiàn)更高些。
20世紀(jì)90年代初,單內(nèi)核結(jié)構(gòu)被認(rèn)為是過時(shí)的。把Linux設(shè)計(jì)成為單內(nèi)核結(jié)構(gòu)而不是微內(nèi)核引起了無數(shù)的爭議。
現(xiàn)在,單核結(jié)構(gòu)正趨向于容易被正確設(shè)計(jì),所以它的發(fā)展會(huì)比微內(nèi)核結(jié)構(gòu)更迅速些。兩個(gè)陣營中都有成功的案例。微核經(jīng)常被用于機(jī)器人和醫(yī)療器械的嵌入式設(shè)計(jì)中,因?yàn)樗南到y(tǒng)的關(guān)鍵部分都處在相互分開的,被保護(hù)的存儲(chǔ)空間中。這對(duì)于單核設(shè)計(jì)來說是不可能的,就算它采用了運(yùn)行時(shí)加載模塊的方式。
盡管Mach是眾所周知的多用途的微內(nèi)核,人們還是開發(fā)了除此之外的幾個(gè)微內(nèi)核。L3是一個(gè)演示性的內(nèi)核,只是為了證明微內(nèi)核設(shè)計(jì)并不總是低運(yùn)行速度。它的后續(xù)版本L4甚至可以將Linux內(nèi)核在單獨(dú)的地址空間作為它的一個(gè)進(jìn)程來運(yùn)行。
QNX是一個(gè)從20世紀(jì)80年代就開始設(shè)計(jì)的微內(nèi)核系統(tǒng)。它比Mach更接近微內(nèi)核的理念。它被用于一些特殊的領(lǐng)域,在這些情況下由于軟件錯(cuò)誤導(dǎo)致系統(tǒng)失效是不允許的。例如航天飛機(jī)上的機(jī)械手,還有研磨望遠(yuǎn)鏡鏡片的機(jī)器,一點(diǎn)點(diǎn)失誤就會(huì)導(dǎo)致上千美元的損失。
很多人相信,由于Mach不能夠解決一些提出微內(nèi)核理論時(shí)針對(duì)的問題,所以微內(nèi)核技術(shù)毫無用處。Mach的愛好者表明這是非常狹隘的觀點(diǎn),遺憾的是似乎所有人都開始接受這種觀點(diǎn)。
混合內(nèi)核實(shí)質(zhì)上是微內(nèi)核,只不過它讓一些微核結(jié)構(gòu)運(yùn)行在用戶空間的代碼運(yùn)行在內(nèi)核空間,這樣讓內(nèi)核的運(yùn)行效率更高些。這是一種妥協(xié)做法,設(shè)計(jì)者參考了微內(nèi)核結(jié)構(gòu)的系統(tǒng)運(yùn)行速度不佳的理論。然而后來的實(shí)驗(yàn)證明,純微內(nèi)核的系統(tǒng)實(shí)際上也可以是高效率的。大多數(shù)現(xiàn)代操作系統(tǒng)遵循這種設(shè)計(jì)范疇,微軟視窗就是一個(gè)很好的例子。另外還有XNU,運(yùn)行在蘋果Mac OS X上的內(nèi)核,也是一個(gè)混合內(nèi)核。
混合內(nèi)核的例子:
一些人認(rèn)為可以在運(yùn)行時(shí)加載模塊的單核系統(tǒng)和混合內(nèi)核系統(tǒng)沒有區(qū)別。這是不正確的?;旌弦馕吨鼜膯魏撕臀⒑讼到y(tǒng)中都吸取了一定的設(shè)計(jì)模式,例如一些非關(guān)鍵的代碼在用戶空間運(yùn)行,另一些在內(nèi)核空間運(yùn)行,單純是為了效率的原因。
外內(nèi)核系統(tǒng),也被稱為縱向結(jié)構(gòu)操作系統(tǒng),使一種比較極端的設(shè)計(jì)方法。
它的設(shè)計(jì)理念是讓用戶程序的設(shè)計(jì)者來決定硬件接口的設(shè)計(jì)。外內(nèi)核本身非常的小,它通常只負(fù)責(zé)系統(tǒng)保護(hù)和系統(tǒng)資源復(fù)用相關(guān)的服務(wù)。
傳統(tǒng)的內(nèi)核設(shè)計(jì)(包括單核和微核)都對(duì)硬件作了抽象,把硬件資源或設(shè)備驅(qū)動(dòng)程序都隱藏在硬件抽象層下。比方說,在這些系統(tǒng)中,如果分配一段物理存儲(chǔ),應(yīng)用程序并不知道它的實(shí)際位置。
而外核的目標(biāo)就是讓應(yīng)用程序直接請(qǐng)求一塊特定的物理空間,一塊特定的磁盤塊等等。系統(tǒng)本身只保證被請(qǐng)求的資源當(dāng)前是空閑的,應(yīng)用程序就允許直接存取它。既然外核系統(tǒng)只提供了比較低級(jí)的硬件操作,而沒有像其他系統(tǒng)一樣提供高級(jí)的硬件抽象,那么就需要增加額外的運(yùn)行庫支持。這些運(yùn)行庫運(yùn)行在外核之上,給用戶程序提供了完整的功能。
理論上,這種設(shè)計(jì)可以讓各種操作系統(tǒng)運(yùn)行在一個(gè)外核之上,如Windows和Unix。并且設(shè)計(jì)人員可以根據(jù)運(yùn)行效率調(diào)整系統(tǒng)的各部分功能。
現(xiàn)在,外核設(shè)計(jì)還停留在研究階段,沒有任何一個(gè)商業(yè)系統(tǒng)采用了這種設(shè)計(jì)。幾種概念上的操作系統(tǒng)正在被開發(fā),如劍橋大學(xué)的Nemesis,格拉斯哥大學(xué)的Citrix系統(tǒng)和瑞士計(jì)算機(jī)科學(xué)院的一套系統(tǒng)。麻省理工學(xué)院也在進(jìn)行著這類研究。
TUNES Project和UnununiumOS都進(jìn)行無內(nèi)核的嘗試. 無內(nèi)核的系統(tǒng)is not limited to a single centralizing entry point.
聯(lián)系客服