單內核(Monolithic kernel),是個很大的進程。它的內部又能夠被分為若干模塊(或是層次或其他)。但是在運行的時候,它是個單獨的二進制大映象。其模塊間的通訊是通過直接調用其他模塊中的函數實現的,而不是消息傳遞?!? [8] 單內核結構在硬件之上定義了一個高階的抽象界面,應用一組原語(或者叫系統(tǒng)調用)來實現操作系統(tǒng)的功能,例如進程管理,文件系統(tǒng),和存儲管理等等,這些功能由多個運行在核心態(tài)的模塊來完成。盡管每一個模塊都是單獨地服務這些操作,內核代碼是高度集成的,而且難以編寫正確。因為所有的模塊都在同一個內核空間上運行,一個很小的bug都會使整個系統(tǒng)崩潰。然而,如果開發(fā)順利,單內核結構就可以從運行效率上得到好處。
很多現代的單內核結構內核,如Linux和FreeBSD內核,能夠在運行時將模塊調入執(zhí)行,這就可以使擴充內核的功能變得更簡單,也可以使內核的核心部分變得更簡潔。單內核結構是非常有吸引力的一種設計,由于在同一個地址空間上實現所有低級操作的系統(tǒng)控制代碼的復雜性的效率會比在不同地址空間上實現更高些。 單核結構正趨向于容易被正確設計,所以它的發(fā)展會比微內核結構更迅速些。單內核結構的例子:傳統(tǒng)的UNIX內核----例如伯克利大學發(fā)行的版本,Linux內核。
微內核(Microkernelkernel)結構由一個非常簡單的硬件抽象層和一組比較關鍵的原語或系統(tǒng)調用組成,這些原語僅僅包括了建立一個系統(tǒng)必需的幾個部分,如線程管理,地址空間和進程間通信等。微核的目標是將系統(tǒng)服務的實現和系統(tǒng)的基本操作規(guī)則分離開來。例如,進程的輸入/輸出鎖定服務可以由運行在微核之外的一個服務組件來提供。這些非常模塊化的用戶態(tài)服務器用于完成操作系統(tǒng)中比較高級的操作,這樣的設計使內核中最核心的部分的設計更簡單。一個服務組件的失效并不會導致整個系統(tǒng)的崩潰,內核需要做的,僅僅是重新啟動這個組件,而不必影響其它的部分微內核將許多OS服務放入分離的進程,如文件系統(tǒng),設備驅動程序,而進程通過消息傳遞調用OS服務。微內核結構必然是多線程的,第一代微內核,在核心提供了較多的服務,因此被稱為'胖微內核',它的典型代表是MACH。它既是GNU HURD也是APPLE SERVER OS的核心,可以說,蒸蒸日上.第二代為微內核只提供最基本的OS服務,典型的OS是QNX,QNX在理論界很有名,被認為是一種先進的OS。 [8] 微內核只提供了很小一部分的硬件抽象,大部分功能由一種特殊的用戶態(tài)程序:服務器來完成。微核經常被用于機器人和醫(yī)療器械的嵌入式設計中,因為它的系統(tǒng)的關鍵部分都處在相互分開的,被保護的存儲空間中。這對于單核設計來說是不可能的,就算它采用了運行時加載模塊的方式。微內核的例子:AIX,BeOS,L4微內核系列,.Mach中用于GNU Hurd和Mac OS X,Minix,MorphOS,QNX,RadiOS,VSTa。
混合內核它很像微內核結構,只不過它的的組件更多的在核心態(tài)中運行,以獲得更快的執(zhí)行速度?;旌蟽群藢嵸|上是微內核,只不過它讓一些微核結構運行在用戶空間的代碼運行在內核空間,這樣讓內核的運行效率更高些。這是一種妥協做法,設計者參考了微內核結構的系統(tǒng)運行速度不佳的理論。然而后來的實驗證明,純微內核的系統(tǒng)實際上也可以是高效率的。大多數現代操作系統(tǒng)遵循這種設計范疇,微軟公司開發(fā)的Windows操作系統(tǒng)就是一個很好的例子。另外還有XNU,運行在蘋果Mac OS X上的內核,也是一個混合內核。混合內核的例子: BeOS 內核 ,DragonFly BSD,ReactOS 內核Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技術的操作系統(tǒng)。