Microkernel - ianchen0119/AwesomeCS GitHub Wiki

Mircokernel (微核心) 是作業系統核心架構的一種,其設計理念是盡可能的精簡作業系統核心的體積,只保留最必要的基礎功能:

  • 記憶體管理
  • 系統呼叫
  • 行程間通訊
  • 執行緒管理

從上圖可以清楚看到 Microkernel 與 monolithic kernel 的差異, Microkernel 大量的精簡 Kernel 的工作,將檔案系統、設備驅動都挪到了 User space 並利用了 IPC 讓行程之間能夠做溝通。

本篇文會向大家介紹 Microkernel 的歷史與應用場景。

Microkernel 的歷史

Microkernel 必定是多執行緒的,觀測其歷史可以得知 Microkernel 的發展分成了三個世代:

第一代 Microkernel

第一代的 Microkernel 只將部分功能挪到 User space 上面,其 system call 的數量與原始碼規模都還是遠比第二代要來的多。 其代表為 Mach (它是 GNU HURD 與 Mac OS X 採用的作業系統核心)。

補充 Mach 是由 CMU (卡內基美隆大學)所開發的 Microkernel ,主要用於作業系統方面的研究,是最早實現微核心作業系統的例子之一。

第二代 Microkernel

提供最基本的 OS 服務,其典型代表是 BlackBerry 黑莓機採用的 QNX,此外, L4 Microkernel 也是著名的代表之一。

第三代 Microkernel

其代表為 seL4 Microkernel ,它將記憶體管理的機制也丟到了 User space 當中,比起前一代,它擁有了更優異的 IPC Performance 以及更少量的 system call 。

IPC Performance

其他補充

POSIX API

作業系統核心的種類如此繁多,為了統一大部分接口的規範,IEEE 定義了一系列 API 互相關聯的標準的總稱,也就是我們會在 OS 恐龍本上看到的 POSIX API (其正式名稱為 IEEE Std 1003 ),而國際標準名稱又稱為 ISO/IEC 9945 ,當前的 POSIX 主要分為四個部分:

  1. Base Definitions
  2. System Interfaces
  3. Shell and Utilities
  4. Rationale

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 一樣。

Reference