Microkernel 簡介#
Microkernel(微核心)是作業系統核心架構的一種,其設計理念是盡可能精簡作業系統核心的體積,只保留最必要的基礎功能:
- 記憶體管理
- 系統呼叫(System Call)
- 行程(Process)間通訊
- 執行緒(Thread)管理
從 OS-structure 的圖示可以清楚看到 Microkernel 與 Monolithic Kernel 的差異:Microkernel 大量精簡 Kernel 的工作,將檔案系統、設備驅動都挪到了 User space 並利用了 IPC 讓行程之間能夠做溝通。
本篇文章會向大家介紹 Microkernel 的歷史與應用場景。
Microkernel 的歷史#
Microkernel 必定是多執行緒的,觀測其歷史可以得知 Microkernel 的發展分成了三個世代。
| 世代 | 代表核心 | 特性 |
|---|---|---|
| 第一代 | Mach(GNU HURD、Mac OS X 採用) | 只將部分功能挪到 User space,系統呼叫的數量與原始碼規模都遠比第二代來得多 |
| 第二代 | QNX(BlackBerry 黑莓機採用)、L4 | 提供最基本的 OS 服務 |
| 第三代 | seL4 | 將記憶體管理的機制也丟到 User space,比前一代擁有更優異的 IPC Performance 以及更少量的系統呼叫 |
補充:Mach 是由 CMU(卡內基美隆大學)所開發的 Microkernel,主要用於作業系統方面的研究,是最早實作微核心作業系統的例子之一。
其他補充#
POSIX API#
作業系統核心的種類如此繁多,為了統一大部分介面的規範,IEEE 定義了一系列 API 互相關聯的標準的總稱,也就是我們會在 OS 恐龍本上看到的 POSIX API(其正式名稱為 IEEE Std 1003),而國際標準名稱又稱為 ISO/IEC 9945。當前的 POSIX 主要分為四個部分:
- Base Definitions
- System Interfaces
- Shell and Utilities
- 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 的最高特權模式(Privilege Mode)下工作的。至於如何做到 Kernel 間的溝通,通常會透過 API 將所需的資料放在兩者共享的 Shared memory 上面,這就像是另類的 IPC 一樣。
原文出處#
- 原書/iThome:https://ithelp.ithome.com.tw/articles/10280016