華為“鴻蒙”所涉及的微核心到底是什麼?一文帶你認識微核心
微核心
最近微核心的概念常常被大家提及,同時還有Google Fuchisa這樣的微核心新星,這裡讓我們一起來認識下微核心吧。
背景龐大的UNIX家族
計算機技術在二戰後快速發展,構成計算機的主要基本單元從電子管發展到分立電晶體,再到後來的大規模積體電路。隨著計算機技術發展,計算機效能越來越強勁,硬體越來越複雜,人們發現很難去直接管理計算機了,於是人們開始設計軟體用於管理越來越複雜的計算機系統,這些軟體稱作系統級軟體。從最開始的批處理系統,多道程式系統,分時系統到上世紀60年代開始出現通用作業系統,計算機系統層出不窮,直到上世紀70年代才出現被大家廣泛接受廣泛使用的通用作業系統。其中最經典的當然就是UNIX系統了。
UNIX系統,1971年誕生於大名鼎鼎的貝爾實驗室的一臺PDP-11/24機器上,其後經過不斷髮展與傳播,在80年代取得了巨大成功,UNIX被移植到眾多的處理器架構,並在眾多行業得到廣泛使用,甚至成為行業標準影響至今。
UNIX以及類UNIX系統如Linux都是典型的單核心設計,也就是把所有系統服務都放到核心裡,因為系統服務程式碼之間存在大量資料交換和大量的服務請求,而在同一個程式碼段內進行函式呼叫(C語言)或跳轉(彙編或者機器碼時代)是最直接、最高效的方法,在同一片地址空間也方便資料交換,所以這樣的單核心設計是很自然的。
但是隨著UNIX核心功能的擴充(檔案系統、TCP/IP網路協議棧、程式管理、記憶體管理、驅動程式等),UNIX核心程式碼也相應增加了很多,進而在可維護性.穩定性,安全性方面面臨一些挑戰。為了試圖解決這些挑戰,人們開始嘗試使用微核心的思想來設計系統核心。
什麼是微核心?
微核心設計的基本思想是簡化核心功能,在核心之外的使用者態儘可能多地實現系統服務,同時加入相互之間的安全保護。核心只提供最基礎的服務,比如多程式排程、多程式通訊(IPC)等。其中程式通訊是作為連線應用與使用者態系統服務的橋樑。
下圖是單核心與微核心的對比示意圖
單核心系統相關的服務基本都是放於核心態核心中,例如檔案系統、裝置驅動、虛擬記憶體管理、網路協議棧等;而微核心則把更多的系統服務(例如檔案系統、POSIX服務、網路協議棧甚至外設驅動)放到使用者態應用,形成一個個服務,等待其他應用的請求。而後來,為了在單核心與微核心之間揚長避短,也發展出了中間的混合核心的形態,部分服務也會放置於核心中。
微核心的發展歷史
微核心這個概念從提出開始就在不斷地發展、完善進步之中,到目前為止可以分為三代。
第一代微核心:從無到有
第一代微核心的主要代表是Mach,該系統由卡內基-梅隆大學的Avie Tevanian和Richard Rashid主導開發。在Mach剛剛開始設計時,UNIX的發展正如日中天,所以Mach在設計時的一大目標就是相容UNIX,但是與UNIX不同的是Mach嘗試使用微核心架構去設計。Mach以IPC是作為所有系統服務與核心交換資料的基礎機制,充分運用IPC、虛擬記憶體、多程式等特性將冗餘的系統服務移出核心作為程式執行。
1986年,經過兩年的開發,第一版的Mach釋出後的第二年,Mach就釋出了第2版,不過由於時間倉促,加之沒有足夠的人手與資金,所以此時Mach核心並不提供完全的系統服務。為了支撐系統上層執行,這一版的核心包含了大量4.3版本的BSD系統(UNIX的一個分支)程式碼提供系統服務,並且BSD系統服務執行在核心狀態,這導致Mach核心的程式碼體積甚至大於常規UNIX核心。第一版和第二版的Mach主要做了如下工作:1. 驗證了微核心的可行性;2. 在多處理器計算機上進行移植驗證了微核心在多處理器計算機上的執行;3. 最後為了提高IPC的效率,Mach使用共享記憶體機制來完成IPC。而Mach的共享記憶體機制是在虛擬記憶體技術的支援下實現的,只有需要對記憶體進行寫入時才進行復制。這麼一處理比每次都複製一遍記憶體節省了記憶體使用同時又加快了IPC機制的處理時間,這個改進稱為寫時複製,並且在如今的通用作業系統如Linux中常常用到。
經過測試,Mach 2.5的效率最多比UNIX少25%,但是考慮到Mach帶來的可靠性、可擴充性、安全性,這個效率損失尚可以接受。當然此時Mach核心還不算完全的微核心。而考慮到微核心可以更高效地利用多處理器計算機的處理器核心資源,人們期待著等Mach把系統服務都搬到核心之外後可以把執行效率損失降下來。同時Mach在微核心方面小小的嘗試迅速吸引了大批公司與組織的注意,開放軟體基金會(Open Software Foundation, OSF)宣佈下一代系統OSF/1將基於Mach的核心, NeXTSTEP也將使用Mach2.5, 甚至IBM也打算利用Mach構建Workplace OS。蘋果公司這個時候也出手了,蘋果公司也從此基於Mach2.5打造其作業系統核心XNU,XNU的構成如下圖所示,Mach作為核心的內環,外環右側是蘋果的驅動框架(I/O Kit),外環左側是BSD的系統服務程式碼提供UNIX相容的服務層,這三者共同協作向上層提供完整的系統服務。XNU廣泛地使用在蘋果公司的OSX,IOS等系統中。
這個時候由於UNIX系統廣泛使用帶來的商業利益,此時BSD系統開發者與UNIX的擁有者AT&T陷入了法律大戰,Mach使用的BSD相關程式碼有了法律風險。提升效能的期望和規避法律風險的需求推動著Mach 3.0的開發,Mach 3.0的開發目標主要是為了替換BSD系統服務,同時儘量多地將系統服務放到核心之外去執行,成為名副其實的微核心設計。經過眾多開發者3年的努力,Mach 3.0於1990年釋出,但是由於在系統服務之間完全使用IPC通訊,而不是向單核心那樣直接進行函式呼叫,即便是多處理器機器上執行也效能損失慘重,Mach 3.0最多比UNIX損失 67% 執行效率,這導致Mach 3.0以及其所代表的第一代微核心設計被看衰。此後斷斷續續有在Mach的基礎上對效能進行提升的嘗試,但是均不太理想,至此Mach成為了微核心第一代先驅者。
第二代微核心:解決效能問題
第二代微核心的主要代表是L3和L4,以及QNX系統使用的Neutrino核心。前面第一代的微核心Mach由於效率問題雖然失敗了,但是微核心的理念並沒有被放棄,德國的電腦科學家Jochen Liedtke認為Mach的IPC效率低下的原因就是因為IPC部分不夠精簡,於是他開發了L3和L4微核心,對IPC部分進行了很徹底的精簡:1. 核心的IPC機制只是單純地傳遞資訊,諸如安全許可權檢查這類的程式碼都省略掉,省略掉的功能全部由使用者程式自己處理。如此一來IPC功能部分的程式碼執行時間大大縮短;2. IPC不使用記憶體傳遞訊息,而使用暫存器傳遞訊息,同時限制IPC每次傳遞的資訊長度,這樣省去了對記憶體的訪問時間。L4微核心的IPC速度經過測試要比Mach快20倍,這個令人驚訝的最佳化效果吸引了眾多的目光,使微核心的研究重新火熱起來。後面L4核心又發展出了很多相關係統,比如Pistachio,L4/MIPS,與Fiasco等等,這些核心組成了L4的大家族。
第二代微核心的代表除了有L4核心,也還有其他微核心比如Exokernel、Rambler等,不過商業上最成功的則是目前黑莓公司旗下的QNX系統所使用的Neutrino核心(QNX,1980年誕生,最初以QUICK UNIX為名,後改為QNX;2004年QNX被Harman國際收購;2010年Harman國際下被黑莓收購,QNX成為黑莓旗下的資產),QNX主要為高可靠領域提供解決方案,比如交通、能源、醫療、航天航空等。
第三代微核心:主要重視安全問題等
在前面兩代的基礎上,第三代微核心蓬勃發展,許許多多微核心都被開發出來,主要代表有:seL4、Fiasco.OC、NOVA等。本來第一代微核心的設計隔離了使核心安全性降低的系統服務,讓系統服務漏洞不會影響核心,進而提高了核心安全性,可以說是關上了破壞系統的門, 但是第二代系統卻又給攻擊者開了個窗戶;由於第二代微核心在核心中省去了關於安全性檢查等步驟,把所有關於安全檢查功能的實現都交給系統服務自己去實現,這導致系統服務的通訊介面直接暴露給使用者態,任何程式都可能無限制地請求系統服務,系統服務不得不花費額外的代價來區分請求是否合法,容易造成拒絕服務攻擊。比如正常的檔案服務應該是從虛擬檔案系統服務->檔案系統服務->磁碟驅動服務這個流程來完成的,但是如果攻擊者如果繞過虛擬檔案系統服務,直接無限制地請求攻擊者本身沒有許可權訪問的檔案系統服務,使檔案系統服務長期處於滿載狀態,讓其他程式無法透過正常的虛擬檔案系統得到檔案系統服務。為了增強安全性,且不過分影響效能,人們開始研發第三代微核心。
seL4是在第二代核心L4的基礎上發展而來的。seL4不僅僅繼承了L4核心家族的高效能特性,還具備基於端點(enndpoint)的IPC機制。這種IPC機制最大的特點是使用了能力空間的概念,程式在使用IPC請求系統服務時必須具備相對應的能力,程式持有不可偽造的令牌來表示擁有請求某種服務的能力。令牌可以被複制,可以被轉移,還可以透過IPC進行傳輸。令牌其實是一個指向存在於核心空間核心物件的指標,所以普通程式並不能修改自身以及其他程式的許可權分配,但是核心可以對令牌指定的許可權進行控制,從而保證了使用者態不能繞過能力空間這個機制對系統服務造成濫用。
seL4還是第一個完全透過形式化驗證的核心,通俗說形式化驗證就是在數學軟體的幫助下使用數學語言自動化地推導檢查系統的每一個執行狀態。seL4形式化驗證相關論文。
其他的微核心系統:Fuchsia,Minix
Fuchsia是Google開發的一款全新作業系統,試圖覆蓋手機、平板甚至筆記本等一系列領域。Google為該系統配備了Vulkan圖形介面、3D桌面渲染Scenic、Flutter應用開發框架,還有一個稱為zircon的微核心。zircon核心是從高通平臺的一個Bootloader專案:Little Kernel發展而來。zircon核心屬於微核心設計,只提供IPC,程式管理,地址空間管理功能。zircon區別於以程式或者以檔案為核心的設計,zircon是以記憶體為核心來設計的,記憶體在zircon中是以物件的方式存在,可以透過channel通訊機制傳遞虛擬記憶體物件(Virtual memory object)的控制程式碼,程式拿到控制程式碼後可以把這塊記憶體對映到自己的空間。
Minix系統則由荷蘭阿姆斯特丹的Vrije大學的Andrew S.Tanenbaum教授所開發。該系統最大的特點是可以故障隔離,自動重啟失敗的服務。Minix使用分層設計,最底層的微核心提供中斷處理、程式管理、程式通訊等服務,這一層執行在核心態;中間層提供輪迴服務(Reincarnation Server)、檔案服務、程式管理、X圖形服務以及驅動等,這一層執行在使用者態;最上層為使用者程式。其中輪迴服務負責在中間層的服務出現崩潰時重啟這些服務,從而保證服務的自我修復。Minix由於其自我修復特性被英特爾管理引擎(ME)所選用,該管理引擎主要負責管理英特爾晶片的內部模組。
微核心的優缺點
優點
1-系統服務模組化,可移植性高;
2-核心安全性提高(模組內部的bug不影響核心穩定,將駭客利用軟體漏洞造成的破壞限制在單個模組內部);
3-可以多套系統服務共存,相當於同時執行多種作業系統;
4-穩定統一的介面(可以獨立維護私有驅動以及服務,不需要跟核心原始碼繫結);
5-在商業上,微核心可以避免程式碼受到一些開源協議的影響,比如GPL協議;
6-核心精簡,可以進行形式化驗證,利用數學證明核心的安全性;
7-數學可證明的實時性;
8-非常適合多處理器系統設計,在多處理器核心計算機上,互相依賴的系統服務可以同時執行;
缺點
1-透過程式通訊的方式交換資料或者呼叫系統服務,而不是使用系統呼叫,造成額外的作業系統開銷;
2-使用一些頻繁使用的系統服務時,比如網路收發資料,造成的程式上下文切換對作業系統來說也是一個負擔;
3-由於系統服務高度模組化,系統服務之間存在大量的記憶體複製;
4-對互相之間存在複雜呼叫關係的系統服務,難以設計通訊介面;
5-系統服務與核心在地址空間上分離,造成程式碼區域性性差,降低了cache命中率;你「在看」嗎?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545820/viewspace-2651142/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 華為鴻蒙系統HarmonyOS學習之十:鴻蒙HarmonyOS微核心技術鴻蒙
- 一文讀懂微核心
- 微核心架構架構
- 作業系統微核心和Dubbo微核心,有何不同?作業系統
- Dubbo的微核心機制
- 作業系統微核心和Dubbo微核心各自優缺點!作業系統
- 微核心專題系列
- JBoss 微核心 VS OSGI
- [HarmonyOS][鴻蒙專欄開篇]快速入門OpenHarmony的LiteOS微核心鴻蒙
- 人智化轉型 華為雲微認證帶你實力進階
- 一文帶你認識DockerDocker
- 工作流的微核心架構架構
- 一文帶你快速認識“華為3D內容平臺”!3D
- 帶你熟悉鴻蒙輕核心Kconfig使用指南鴻蒙
- 認識linux核心(linux核心的作用)Linux
- 帶你瞭解什麼是核心匯流排架構架構
- 聊了聊單核心和微核心,並吹了一波 Linux單核Linux
- 一文帶你認識Spring事務Spring
- 以微出行為核心,發展城市交通
- 一文帶你認識LPWA通訊技術
- 學華為雲微認證 搭上“區塊鏈”的快車區塊鏈
- 微前端概述(Micro Frontends) 以及相比單體應用,微前端能帶來什麼好處前端
- 華為雲微認證助你輕鬆玩轉前沿科技
- 微核心架構在大型前端系統中的應用架構前端
- 認識node核心模組--深入EventEmitterMIT
- 瞭解什麼是微前端前端
- 自我認知微調
- 華為人才生態數字化平臺 & 華為雲微認證釋出
- TiDB 在微眾銀行核心批量場景的實踐TiDB
- 【Spring專場】「MVC容器」不看原始碼就帶你認識核心流程以及運作原理SpringMVC原始碼
- 【Spring專場】「IOC容器」不看原始碼就帶你認識核心流程以及運作原理Spring原始碼
- 【Spring專場】「AOP容器」不看原始碼就帶你認識核心流程以及運作原理Spring原始碼
- DAO 的核心是什麼?
- 什麼是防火牆?—Vecloud微雲防火牆Cloud
- 帶你真正認識ViewView
- 一文帶你看懂Springboot核心功能及優缺點Spring Boot
- crm的核心是什麼?CRM對企業的核心作用是什麼?
- 帶你認識Photoshop的混合模式模式