Mircokernel (微核心) 是作業系統核心架構的一種,其設計理念是盡可能的精簡作業系統核心的體積,只保留最必要的基礎功能:
從上圖可以清楚看到 Microkernel 與 monolithic kernel 的差異, Microkernel 大量的精簡 Kernel 的工作,將檔案系統、設備驅動都挪到了 User space 並利用了 IPC 讓行程之間能夠做溝通。
本篇文會向大家介紹 Microkernel 的歷史與應用場景。
Microkernel 必定是多執行緒的,觀測其歷史可以得知 Microkernel 的發展分成了三個世代:
第一代的 Microkernel 只將部分功能挪到 User space 上面,其 system call 的數量與原始碼規模都還是遠比第二代要來的多。
其代表為 Mach (它是 GNU HURD 與 Mac OS X 採用的作業系統核心)。
補充
Mach 是由 CMU (卡內基美隆大學)所開發的 Microkernel ,主要用於作業系統方面的研究,是最早實現微核心作業系統的例子之一。
提供最基本的 OS 服務,其典型代表是 BlackBerry 黑莓機採用的 QNX,此外, L4 Microkernel 也是著名的代表之一。
其代表為 seL4 Microkernel ,它將記憶體管理的機制也丟到了 User space 當中,比起前一代,它擁有了更優異的 IPC Performance 以及更少量的 system call 。
作業系統核心的種類如此繁多,為了統一大部分接口的規範,IEEE 定義了一系列 API 互相關聯的標準的總稱,也就是我們會在 OS 恐龍本上看到的 POSIX API (其正式名稱為 IEEE Std 1003 ),而國際標準名稱又稱為 ISO/IEC 9945 ,當前的 POSIX 主要分為四個部分:
POSIX 這個名稱是由理察·斯托曼應 IEEE 所要求而提議的一個簡稱, POSIX 是 Portable Operating System Interface 的縮寫, POSIX 中的 X 代表 Unix API 的傳承。
Linux kernel 逐一實現了 POSIX 標準,但並沒有參加正式的 POSIX 認證。
Microsoft 的 Windows NT 聲稱部分其實現了 POSIX 標準。
以 AOSP 為例,我們都知道 Android 作業系統使用了 Linux kernel 做為作業系統的核心,有趣的是,可不只有一個作業核心運作在 Android 的底層:
以上圖為例, AOSP 採用 Trusty kernel 做為 TEE 核心,TEE 核心能夠保護敏感的資料以預防原架構下的作業系統被入侵時,敏感資料也遭到竊取。
其工作原理為限制 CPU 無法存取外一個 OS 的記憶體區段以達到保護的功效,敏感的資料包括:
為了達到這些目的,我們也可以從架構圖發現 Trusty Dispatcher 是在 ARM 的最高特權模式下工作的。
至於如何做到 Kernel 間的溝通,通常會透過 API 將所需的資料放在兩者共享的 Shared memory 上面,這就像是另類的 IPC 一樣。