內(nèi)核分類
單內(nèi)核(Monolithic kernel),是個(gè)很大的進(jìn)程。它的內(nèi)部又能夠被分為若干模塊(或是層次或其他)。但是在運(yùn)行的時(shí)候,它是個(gè)單獨(dú)的二進(jìn)制大映象。其模塊間的通訊是通過直接調(diào)用其他模塊中的函數(shù)實(shí)現(xiàn)的,而不是消息傳遞?!? [8] 單內(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)是非常有吸引力的一種設(shè)計(jì),由于在同一個(gè)地址空間上實(shí)現(xiàn)所有低級(jí)操作的系統(tǒng)控制代碼的復(fù)雜性的效率會(huì)比在不同地址空間上實(shí)現(xiàn)更高些。 單核結(jié)構(gòu)正趨向于容易被正確設(shè)計(jì),所以它的發(fā)展會(huì)比微內(nèi)核結(jié)構(gòu)更迅速些。單內(nèi)核結(jié)構(gòu)的例子:傳統(tǒng)的UNIX內(nèi)核----例如伯克利大學(xué)發(fā)行的版本,Linux內(nèi)核。
微內(nèi)核(Microkernelkernel)結(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。 [8] 微內(nèi)核只提供了很小一部分的硬件抽象,大部分功能由一種特殊的用戶態(tài)程序:服務(wù)器來完成。微核經(jīng)常被用于機(jī)器人和醫(yī)療器械的嵌入式設(shè)計(jì)中,因?yàn)樗南到y(tǒng)的關(guān)鍵部分都處在相互分開的,被保護(hù)的存儲(chǔ)空間中。這對(duì)于單核設(shè)計(jì)來說是不可能的,就算它采用了運(yùn)行時(shí)加載模塊的方式。微內(nèi)核的例子:AIX,BeOS,L4微內(nèi)核系列,.Mach中用于GNU Hurd和Mac OS X,Minix,MorphOS,QNX,RadiOS,VSTa。
混合內(nèi)核它很像微內(nèi)核結(jié)構(gòu),只不過它的的組件更多的在核心態(tài)中運(yùn)行,以獲得更快的執(zhí)行速度?;旌蟽?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ì)范疇,微軟公司開發(fā)的Windows操作系統(tǒng)就是一個(gè)很好的例子。另外還有XNU,運(yùn)行在蘋果Mac OS X上的內(nèi)核,也是一個(gè)混合內(nèi)核?;旌蟽?nèi)核的例子: BeOS 內(nèi)核 ,DragonFly BSD,ReactOS 內(nèi)核Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技術(shù)的操作系統(tǒng)。





