2019年8月9日華為 餘承東 釋出HarmonyOS 1.0,HarmonyOS的釋出將一個計算機領域內非常專業的詞帶到了廣大公眾的視線內,這就是微核心
。
事實上,微核心
並不是一個新概念。早在1969年,UNIX系統開始設計的時候,類似微核心架構的作業系統就已經出現。1969年,丹麥電腦科學家Per Brinch Hansen
開發的RC 4000 Multiprogramming System
作業系統,是歷史上第一次將作業系統元件分離為各個相互互動的元件,將核心
簡化為僅用於通訊和支援系統,並使用管道共享記憶體
作為其程式間通訊的基礎。如今回看RC 4000 Multiprogramming System
雖然其本身並不是很成功,但激發了微核心概念。
繼續HarmonyOS的話題,看了HarmonyOS 1.0釋出會回放後,我有一個疑問:
什麼是單核心,什麼又是微核心,微核心相比於單核心真的有如此大的優勢嗎?
華為HarmonyOS 1.0釋出會直播回放:
https://www.bilibili.com/video/av62950256/
一、作業系統
瞭解微核心
與單核心
之前,首先了解一下作業系統
?
作業系統(Operating System)
是現代計算平臺的基礎與核心支撐系統,負責管理硬體資源
(包括輸入輸出裝置的初始化、分配與回收)、控制程式執行
、改善人機互動
以及為上層應用軟體提供執行環境
等。作業系統作為計算機之“魂”,是釋放硬體能力、構建應用生態的基礎
。
從應用的角度看,作業系統的作用:一是服務於應用,二是管理應用
。
- 一方面作業系統提供各種不同層次、不同功能的介面,以滿足上層應用的需求。
- 另一方面,作業系統負責對應用生命週期進行管理,包括初始化、啟動、排程、切換、銷燬等。
從硬體的角度看,作業系統主要包含兩類功能:
- 一方面作業系統將不同功能的硬體資源納入統一的管理。
例如,記憶體管理,作業系統識別電腦中存在的多種不連續的、有限的實體記憶體區域,再採用某種記憶體管理分配機制進行分配與管理。 - 另一方面作業系統負責將不同功能硬體資源進行抽象,將有限的、離散的資源抽象為無限的、連續的資源,並將硬體資源通過介面提供給上層應用呼叫,從而使上層應用無需關心硬體的具體細節。
例如,上層應用開發中,開發者無需關心實體記憶體硬體的容量、型號資訊,而是面向一個近似無限的、統一的虛擬地址空間。
通常而言,狹義
的作業系統指的是作業系統核心加上一個Shell
(即UNIX/Linux等作業系統中的命令列頁面)。隨著硬體種類和應用需求越來越豐富,大量共性功能沉澱到作業系統中,作業系統的內涵和外延不斷擴大,因此,廣義
的作業系統又可以進一步分為作業系統核心與作業系統框架
。作業系統核心負責對硬體資源的管理與抽象,為作業系統框架提供基礎的系統服務(作業系統核心又分為單核心、微核心等);作業系統框架則基於作業系統核心提供的服務為不同的應用提供API介面與執行環境。
二、單核心&微核心
現在作業系統大多采用單核心架構
(如UNIX、Linux等),作業系統將一些基本的、公共的、與硬體緊密相關的 (如中斷處理、記憶體管理、檔案系統、裝置驅動等)、執行頻率較高的功能(如程式排程、時鐘管理等)以及關鍵性的資料結構獨立出來,使之常駐記憶體,並對其進行保護。核心中採用模組化設計組織各個功能,所有模組執行於核心空間,模組間通訊直接呼叫模組間提供的介面函式實現。
單核心
可以理解為是個很大的程式,其內部又能夠被分為若干功能模組(或者是若干層)。單核心在執行的時,為一個單獨的二進位制大映象,模組間的通訊是通過直接呼叫其他模組中的函式實現的,而非訊息傳遞。
單核心中許多的功能模組都在同一個核心空間上執行,伴隨著作業系統的發展,核心模組的複雜度越來越高,作業系統在可靠性
與安全性
方面慢慢出現了一些問題,一個很小的bug都會使整個系統崩潰。為解決單核心存在的問題,許多研發人員嘗試對單核心架構進行解耦,將部分非核心功能(如檔案系統、裝置驅動等)從核心中拆分出來,作為一個獨立的服務執行於單獨的程式中,併為其提供程式間通訊的能力(IPC Inter Process Communication),核心中只保留最核心的功能(如記憶體管理、程式排程等),這種架構被稱為微核心架構。在微核心下服務與服務互相隔離,單個服務即使出現故障或受到安全攻擊,也不會導致整個作業系統的崩潰或被攻破,從而有效提供了作業系統的可靠性與安全性。
Minix
有興趣詳細研究微核心
實現與原理的同學,可以研究一下Minix
。
Minix
第一個版本於1987年釋出,是荷蘭電腦科學家Andrew S. Tanenbaum
為了教學而創作,如今為Andrew S. Tanenbaum
教授所著《作業系統:設計與實現》
的示例程式碼。
Minix
啟發了Linux核心
的創作。1990年,還在上大學的Linus Torvalds
從Minix
得到靈感,出於對作業系統的興趣,於1991年釋出了Linux。
Minix目前有三個主要的版本:
- Minix1
https://github.com/gdevic/minix1
Minix1是《作業系統:設計與實現》教材的演示程式碼,側重於教學和學習(年代久遠,很難編譯安裝)。 - Minix 2.0.4
http://download.minix3.org/previous-versions/Intel-2.0.4/
Minix 2.0.4側重於自學,連結中有詳細的安裝教程。 - Minix 3.2.1
http://download.minix3.org/iso/minix_R3.2.1-972156d.iso.bz2
Minix 3.2.1是個實用版本,有iso映像可供下載,安裝方便。
三、單核心VS微核心
自單核心與微核心這兩種架構出現伊始,人們就兩者的優劣與特點展開了深入的討論。
當前隨著物聯網時代的到來,使微核心架構的作業系統架構再次受到廣泛關注。
- 彈性擴充套件能力:
對於一個龐大的單核心來說,很難僅僅通過簡單的剪裁與擴充套件,使之滿足支援資源訴求從KB到TB級別的場景;而對於微核心,核心空間只包含核心功能,天然具備模組化解耦與彈性部署的能力。 - 功能安全:
由於單核心在故障隔離方面存在的缺陷,其安全與穩定性方面很難與微核心媲美。 - 程式間通訊:
微核心將非核心功能以單獨程式的方式執行於使用者態,不同系統功能的相互呼叫需要通過程式間通訊實現(IPC Inter Process Communication)。相比於單核心核心空間中模組間通訊採用函式,微核心採用程式間通訊,通訊效率較低。
當前智慧終端呈現多樣化的發展趨勢,面對物聯網時代的到來,微核心天生具備的模組化解耦、彈性部署的能力以及安全穩定的特性,非常符合物聯網的發展
,但程式間通訊(IPC Inter Process Communication)的效能
無疑成為微核心的軟肋
。
微核心雖然存在IPC效能軟肋,但IPC效能並非不可提升。
德國電腦科學家Jochen Liedtke(L3微核心與L4微核心系列的創造者)曾表示,高效能IPC的設計與實現必然是與體系結構相關的,過度的抽象將極大影響IPC的效能,而利用體系結構相關的狀態進行優化則可將IPC效能提升到極致
。
2019年華為HarmonyOS釋出會中,餘承東透露華為在微核心IPC優化方面的成果,採用微核心架構的HarmonyOS在IPC方面效能可以達到同樣採用微核心的Fuchsia作業系統的5倍
。
相信未來廣大技術研發人員不斷對IPC效能進行優化,微核心IPC的效能會有大的提升。
參考
維基百科 Regnecentralen:
https://en.wikipedia.org/wiki/Regnecentralen
維基百科 RC_4000_multiprogramming_system:
https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system
維基百科 微核心:
https://zh.wikipedia.org/wiki/%E5%BE%AE%E5%85%A7%E6%A0%B8
維基百科 Mach:
https://zh.wikipedia.org/wiki/Mach
現代作業系統:原理與實現
https://item.jd.com/12731379.html