一文讀懂微核心

xiaxveliang發表於2021-05-14

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 TorvaldsMinix得到靈感,出於對作業系統的興趣,於1991年釋出了Linux。

Minix目前有三個主要的版本:

三、單核心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

作業系統的發展:
https://www.feng.com/post/6209622

有關微核心:
https://mp.weixin.qq.com/s/MLCR7qqGFWyyP0KcZqW3Kw

相關文章