內核是操作系統的核心部分,它管理著系統的各種資源。
內核可以看成連接應用程序和硬件的一座橋梁,是直接運行在硬件上的最基礎的軟件實體。
在一些簡單的硬件設備上可以沒有內核或操作系統而直接運行程序,比方單片機等。這些設備通常只是用于特定的場合,也通常功能比較單一。而對于一般計算機來說操作系統是必不可少的。對不同的操作系統,其內核實現也是有所區別的。
目前從內核架構來劃分,可分為微內核(Micro Kernel)和宏內核(Monolithic Kernel),“宏內核”這個翻譯其實不是很好,翻譯成“單內核”事實上更好一點。
對于微內核,用戶服務和內核服務分別運行在不同的地址空間中;對于宏內核不管是用戶服務還是內核服務事實上都是內核在統一管理,它們是運行在同一地址空間中的。
我們需要好好理解第5點,也就是用戶服務和內核服務運行的地址空間的問題。大家都知道Linux采用的是宏內核,但是它也區分內核空間和用戶空間,那不是有歧義了嗎?我們先看一張圖。

對于Linux來說,不管是應用還是內核都是由內存管理單元來做統一的內存管理的,用戶空間的程序確實不能訪問內核空間,但是對于內核來說,3GB-4GB的線性地址空間對整個內核都是共用的,同時內核中的VFS、System Call等模塊被劃分到內核中,它們之間的地址空間是相同的,這里的用戶服務按照我的理解就是這幾個內核模塊所需要的報備,如上圖所示。
我們來列張表來對比一下微內核和宏內核的具體區別:

內核管理著所有的系統資源,在微內核中用戶服務和內核服務在不同的地址空間中實現。在應用程序和硬件的通信中,內核進程和內存管理的極小的服務,而客戶端程序和運行在用戶空間的服務通過消息的傳遞來建立通信,它們之間不會有直接的交互,這樣一來,微內核中的執行速度相對就比較慢了,這是微內核架構的一個缺點。
在內核架構中,用戶服務是獨立于內核服務的,因此任何用戶服務崩潰都不會影響到內核服務,這就加強了操作系統的健壯性,這是微內核的優勢所在。另一點,微內核的擴展性強,添加一個功能,只需要建立一個新的服務到用戶空間當中,而內核空間不需要任何的修改。因此,微內核可移植性強、安全并且易于擴展。
宏內核同樣管理著用戶程序和硬件之間的系統資源,但是和微內核不一樣的是,在宏內核架構中,用戶服務和內核服務在同一空間中實現。具體一點,就是內核可以代表內核進程運行代碼,就是通常的內核進程;當用戶進程經過系統調用或者中斷進入到內核態時,內核也可以代表它運行代碼。這樣一來,宏內核需要管理的資源多于微內核,其大小就相對大一些了。
在宏內核架構當中,內核管理著CPU調度,內存管理,文件管理和系統調用等各模塊的的工作,由于用戶服務和內核服務被實現在同一空間中,這樣在執行速度上要比微內核快。然而,宏內核的劣勢也是顯而易見的,那就是當內核中的某個服務崩潰了,整個內核也會崩潰。另一點,想要在內核中添加新的功能就意味著內核中的各個模塊需要做相應的修改,因此其擴展性很弱。
宏內核在內核空間就實現了系統所有內存管理所需的一切業務,包括內存分配策略、虛擬內存管理分頁算法等,如下圖所示:

對于微內核的內存管理實現,有一個發展過程。在第一代的微內核架構中,內核代理了用戶空間的內存管理,控制著內存訪問的權限,如下圖所示。

內核中的某個服務負責管理缺頁異常并保存新分配的頁,只要有缺頁異常發生,請求就經過內核通知頁管理器。頁管理器必須進入特權模式下來獲取內存的訪問,然后回到用戶模式下。然后發送一個返回結果來觸發進程,當然這個過程也是需要經過內核的。處理缺頁異常或者保存新分配頁的整個過程是繁復而耗時的。
為了彌補性能上的損失,之后的微內核構架在內存管理上作了相應的改變。每個進程有3個內存管理原語(Primitves):map、grant和flush。如果進程想要共享它的內存頁那么它的可以通過map來映射內存頁給其它進程。當進程通過grant來讓渡它的內存頁給其它進程之后,該進程就喪失了這些內存頁的訪問權,直到讓渡進程不再刷新它們。如此一來,整個系統運行過程就成了這樣:在系統啟動時,內核將所有內存保存到一個叫做基本的系統進程 (basic system process) 當中,當然這個所謂有基本進程是運行在用戶空間中的,如果其它進程需要內存,就是再需要從內核中獲取,它可以直接向這個基本的系統進程索取。如下圖所示。

微內核和宏內核在設計上還存在一些其它的區別,比方IO管理方面,宏內核的設備驅動直接在內核中實現,硬件中斷也直接在內核中處理;但是在微內核中,內核是不直接處理IO中斷管理的,來自硬件的請求將被重定向到用戶服務中去,比方內核捕獲了一個中斷,那么內核發送給設備驅動服務就完事了,設備驅動服務會去處理這個中斷。
微內核效率比宏內核慢,但在安全性、可靠性方面要比宏內核好,在擴展性方面微內核也有優勢。
從內核構架發展趨勢來說,將來或許會有比Linux更為強勁的基于微內核架構的OS出現,讓我們拭目以待吧!
閱讀原文,關注作者知乎
