2019年8月9日華為 餘承東 釋出HarmonyOS 1.0,HarmonyOS的釋出将一個計算機領域内非常專業的詞帶到了廣大公衆的視線内,這就是<code>微核心</code>。
事實上,<code>微核心</code>并不是一個新概念。早在1969年,UNIX系統開始設計的時候,類似微核心架構的作業系統就已經出現。1969年,丹麥計算機科學家<code>Per Brinch Hansen</code>開發的<code>RC 4000 Multiprogramming System</code>作業系統,是曆史上第一次将作業系統元件分離為各個互相互動的元件,将<code>核心</code>簡化為僅用于通信和支援系統,并使用<code>管道共享記憶體</code>作為其程序間通信的基礎。如今回看<code>RC 4000 Multiprogramming System</code>雖然其本身并不是很成功,但激發了微核心概念。
繼續HarmonyOS的話題,看了HarmonyOS 1.0釋出會回放後,我有一個疑問:
<code>什麼是宏核心,什麼又是微核心,微核心相比于宏核心真的有如此大的優勢嗎?</code>
華為HarmonyOS 1.0釋出會直播回放:
https://www.bilibili.com/video/av62950256/
了解<code>微核心</code>與<code>宏核心</code>之前,首先了解一下<code>作業系統</code>?
<code>作業系統(Operating System)</code>是現代計算平台的基礎與核心支撐系統,負責<code>管理硬體資源</code>(包括輸入輸出裝置的初始化、配置設定與回收)、<code>控制程式運作</code>、<code>改善人機互動</code>以及<code>為上層應用軟體提供運作環境</code>等。作業系統作為計算機之“魂”,是<code>釋放硬體能力、建構應用生态的基礎</code>。
從應用的角度看,作業系統的作用:<code>一是服務于應用,二是管理應用</code>。
一方面作業系統提供各種不同層次、不同功能的接口,以滿足上層應用的需求。
另一方面,作業系統負責對應用生命周期進行管理,包括初始化、啟動、排程、切換、銷毀等。
從硬體的角度看,作業系統主要包含兩類功能:
一方面作業系統将不同功能的硬體資源納入統一的管理。
例如,記憶體管理,作業系統識别電腦中存在的多種不連續的、有限的實體記憶體區域,再采用某種記憶體管理配置設定機制進行配置設定與管理。
另一方面作業系統負責将不同功能硬體資源進行抽象,将有限的、離散的資源抽象為無限的、連續的資源,并将硬體資源通過接口提供給上層應用調用,進而使上層應用無需關心硬體的具體細節。
例如,上層應用開發中,開發者無需關心實體記憶體硬體的容量、型号資訊,而是面向一個近似無限的、統一的虛拟位址空間。
通常而言,<code>狹義</code>的作業系統指的是<code>作業系統核心加上一個Shell</code>(即UNIX/Linux等作業系統中的指令行頁面)。随着硬體種類和應用需求越來越豐富,大量共性功能沉澱到作業系統中,作業系統的内涵和外延不斷擴大,是以,<code>廣義</code>的作業系統又可以進一步分為<code>作業系統核心與作業系統架構</code>。作業系統核心負責對硬體資源的管理與抽象,為作業系統架構提供基礎的系統服務(作業系統核心又分為宏核心、微核心等);作業系統架構則基于作業系統核心提供的服務為不同的應用提供API接口與運作環境。
現在作業系統大多采用<code>宏核心架構</code>(如UNIX、Linux等),<code>作業系統将一些基本的、公共的、與硬體緊密相關的 (如中斷處理、記憶體管理、檔案系統、裝置驅動等)、運作頻率較高的功能(如程序排程、時鐘管理等)以及關鍵性的資料結構獨立出來,使之常駐記憶體,并對其進行保護。核心中采用子產品化設計組織各個功能,所有子產品運作于核心空間,子產品間通信直接調用子產品間提供的接口函數實作。</code>
<code>宏核心</code>可以了解為是個很大的程序,其内部又能夠被分為若幹功能子產品(或者是若幹層)。宏核心在運作的時,為一個單獨的二進制大映象,子產品間的通訊是通過直接調用其他子產品中的函數實作的,而非消息傳遞。
宏核心中許多的功能子產品都在同一個核心空間上運作,伴随着作業系統的發展,核心子產品的複雜度越來越高,作業系統在<code>可靠性</code>與<code>安全性</code>方面慢慢出現了一些問題,一個很小的bug都會使整個系統崩潰。為解決宏核心存在的問題,許多研發人員嘗試<code>對宏核心架構進行解耦,将部分非核心功能(如檔案系統、裝置驅動等)從核心中拆分出來,作為一個獨立的服務運作于單獨的程序中,并為其提供程序間通信的能力(IPC Inter Process Communication),核心中隻保留最核心的功能(如記憶體管理、程序排程等),這種架構被稱為微核心架構。在微核心下服務與服務互相隔離,單個服務即使出現故障或受到安全攻擊,也不會導緻整個作業系統的崩潰或被攻破,進而有效提供了作業系統的可靠性與安全性。</code>
有興趣詳細研究<code>微核心</code>實作與原理的同學,可以研究一下<code>Minix</code>。
<code>Minix</code>第一個版本于1987年釋出,是荷蘭計算機科學家<code>Andrew S. Tanenbaum</code>為了教學而創作,如今為<code>Andrew S. Tanenbaum</code>教授所著<code>《作業系統:設計與實作》</code>的示例代碼。
<code>Minix</code>啟發了<code>Linux核心</code>的創作。1990年,還在上大學的<code>Linus Torvalds</code>從<code>Minix</code>得到靈感,出于對作業系統的興趣,于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映像可供下載下傳,安裝友善。
自宏核心與微核心這兩種架構出現伊始,人們就兩者的優劣與特點展開了深入的讨論。
目前随着物聯網時代的到來,使微核心架構的作業系統架構再次受到廣泛關注。
彈性擴充能力:
對于一個龐大的宏核心來說,很難僅僅通過簡單的剪裁與擴充,使之滿足支援資源訴求從KB到TB級别的場景;而對于微核心,核心空間隻包含核心功能,天然具備子產品化解耦與彈性部署的能力。
功能安全:
由于宏核心在故障隔離方面存在的缺陷,其安全與穩定性方面很難與微核心媲美。
程序間通信:
微核心将非核心功能以單獨程序的方式運作于使用者态,不同系統功能的互相調用需要通過程序間通信實作(IPC Inter Process Communication)。相比于宏核心核心空間中子產品間通信采用函數,微核心采用程序間通信,通信效率較低。
目前智能終端呈現多樣化的發展趨勢,面對物聯網時代的到來,<code>微核心天生具備的子產品化解耦、彈性部署的能力以及安全穩定的特性,非常符合物聯網的發展</code>,但程序間通信(IPC Inter Process Communication)的<code>性能</code>無疑成為<code>微核心的軟肋</code>。
微核心雖然存在IPC性能軟肋,但IPC性能并非不可提升。
德國計算機科學家Jochen Liedtke(L3微核心與L4微核心系列的創造者)曾表示,<code>高性能IPC的設計與實作必然是與體系結構相關的,過度的抽象将極大影響IPC的性能,而利用體系結構相關的狀态進行優化則可将IPC性能提升到極緻</code>。
2019年華為HarmonyOS釋出會中,餘承東透露華為在微核心IPC優化方面的成果,<code>采用微核心架構的HarmonyOS在IPC方面性能可以達到同樣采用微核心的Fuchsia作業系統的5倍</code>。
相信未來廣大技術研發人員不斷對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