華為“鴻蒙”所涉及的微內(nèi)核到底是什么?一文帶你認識微內(nèi)核

image

最近微內(nèi)核的概念常常被大家提及辞嗡,同時還有 Google Fuchisa 這樣的微內(nèi)核新星捆等,這里讓我們一起來認識下微內(nèi)核吧。 1背景龐大的 UNIX 家族

計算機技術在二戰(zhàn)后快速發(fā)展续室,構成計算機的主要基本單元從電子管發(fā)展到分立晶體管栋烤,再到后來的大規(guī)模集成電路。隨著計算機技術發(fā)展挺狰,計算機性能越來越強勁明郭,硬件越來越復雜,人們發(fā)現(xiàn)很難去直接管理計算機了丰泊,于是人們開始設計軟件用于管理越來越復雜的計算機系統(tǒng)薯定,這些軟件稱作系統(tǒng)級軟件。從最開始的批處理系統(tǒng)瞳购,多道程序系統(tǒng)话侄,分時系統(tǒng)到上世紀 60 年代開始出現(xiàn)通用操作系統(tǒng),計算機系統(tǒng)層出不窮,直到上世紀 70 年代才出現(xiàn)被大家廣泛接受廣泛使用的通用操作系統(tǒng)年堆。其中最經(jīng)典的當然就是 UNIX 系統(tǒng)了吞杭。

UNIX 系統(tǒng),1971 年誕生于大名鼎鼎的貝爾實驗室的一臺 PDP-11/24 機器上嘀韧,其后經(jīng)過不斷發(fā)展與傳播篇亭,在 80 年代取得了巨大成功,UNIX 被移植到眾多的處理器架構锄贷,并在眾多行業(yè)得到廣泛使用译蒂,甚至成為行業(yè)標準影響至今。

image

UNIX 以及類 UNIX 系統(tǒng)如 Linux 都是典型的宏內(nèi)核設計谊却,也就是把所有系統(tǒng)服務都放到內(nèi)核里柔昼,因為系統(tǒng)服務代碼之間存在大量數(shù)據(jù)交換和大量的服務請求,而在同一個代碼段內(nèi)進行函數(shù)調(diào)用 (C 語言) 或跳轉(zhuǎn) (匯編或者機器碼時代) 是最直接炎辨、最高效的方法捕透,在同一片地址空間也方便數(shù)據(jù)交換,所以這樣的宏內(nèi)核設計是很自然的碴萧。

但是隨著 UNIX 內(nèi)核功能的拓展 (文件系統(tǒng)乙嘀、TCP/IP 網(wǎng)絡協(xié)議棧、進程管理破喻、內(nèi)存管理虎谢、驅(qū)動程序等),UNIX 內(nèi)核代碼也相應增加了很多曹质,進而在可維護性. 穩(wěn)定性婴噩,安全性方面面臨一些挑戰(zhàn)。為了試圖解決這些挑戰(zhàn)羽德,人們開始嘗試使用微內(nèi)核的思想來設計系統(tǒng)內(nèi)核几莽。

2什么是微內(nèi)核?

微內(nèi)核設計的基本思想是簡化內(nèi)核功能,在內(nèi)核之外的用戶態(tài)盡可能多地實現(xiàn)系統(tǒng)服務宅静,同時加入相互之間的安全保護章蚣。內(nèi)核只提供最基礎的服務,比如多進程調(diào)度姨夹、多進程通信(IPC) 等纤垂。其中進程通信是作為連接應用與用戶態(tài)系統(tǒng)服務的橋梁。

下圖是宏內(nèi)核與微內(nèi)核的對比示意圖

image

宏內(nèi)核系統(tǒng)相關的服務基本都是放于內(nèi)核態(tài)內(nèi)核中匀伏,例如文件系統(tǒng)洒忧、設備驅(qū)動、虛擬內(nèi)存管理够颠、網(wǎng)絡協(xié)議棧等熙侍;而微內(nèi)核則把更多的系統(tǒng)服務(例如文件系統(tǒng)、POSIX 服務、網(wǎng)絡協(xié)議棧甚至外設驅(qū)動)放到用戶態(tài)應用蛉抓,形成一個個服務庆尘,等待其他應用的請求。而后來巷送,為了在宏內(nèi)核與微內(nèi)核之間揚長避短驶忌,也發(fā)展出了中間的混合內(nèi)核的形態(tài),部分服務也會放置于內(nèi)核中笑跛。

3微內(nèi)核的發(fā)展歷史

微內(nèi)核這個概念從提出開始就在不斷地發(fā)展付魔、完善進步之中,到目前為止可以分為三代飞蹂。

第一代微內(nèi)核:從無到有

第一代微內(nèi)核的主要代表是 Mach几苍,該系統(tǒng)由卡內(nèi)基 - 梅隆大學的 Avie Tevanian 和 Richard Rashid 主導開發(fā)。在 Mach 剛剛開始設計時陈哑,UNIX 的發(fā)展正如日中天妻坝,所以 Mach 在設計時的一大目標就是兼容 UNIX,但是與 UNIX 不同的是 Mach 嘗試使用微內(nèi)核架構去設計惊窖。Mach 以 IPC 是作為所有系統(tǒng)服務與內(nèi)核交換數(shù)據(jù)的基礎機制刽宪,充分運用 IPC、虛擬內(nèi)存界酒、多進程等特性將冗余的系統(tǒng)服務移出內(nèi)核作為進程運行圣拄。

1986 年,經(jīng)過兩年的開發(fā)盾计,第一版的 Mach 發(fā)布后的第二年售担,Mach 就發(fā)布了第 2 版赁遗,不過由于時間倉促署辉,加之沒有足夠的人手與資金,所以此時 Mach 內(nèi)核并不提供完全的系統(tǒng)服務岩四。為了支撐系統(tǒng)上層運行哭尝,這一版的內(nèi)核包含了大量 4.3 版本的 BSD 系統(tǒng) (UNIX 的一個分支) 代碼提供系統(tǒng)服務,并且 BSD 系統(tǒng)服務運行在內(nèi)核狀態(tài)剖煌,這導致 Mach 內(nèi)核的代碼體積甚至大于常規(guī) UNIX 內(nèi)核材鹦。第一版和第二版的 Mach 主要做了如下工作:1. 驗證了微內(nèi)核的可行性;2. 在多處理器計算機上進行移植驗證了微內(nèi)核在多處理器計算機上的運行耕姊;3. 最后為了提高 IPC 的效率桶唐,Mach 使用共享內(nèi)存機制來完成 IPC。而 Mach 的共享內(nèi)存機制是在虛擬內(nèi)存技術的支持下實現(xiàn)的茉兰,只有需要對內(nèi)存進行寫入時才進行復制尤泽。這么一處理比每次都復制一遍內(nèi)存節(jié)省了內(nèi)存使用同時又加快了 IPC 機制的處理時間,這個改進稱為寫時復制,并且在如今的通用操作系統(tǒng)如 Linux 中常常用到坯约。

經(jīng)過測試熊咽,Mach 2.5 的效率最多比 UNIX 少 25%,但是考慮到 Mach 帶來的可靠性闹丐、可拓展性横殴、安全性,這個效率損失尚可以接受卿拴。當然此時 Mach 內(nèi)核還不算完全的微內(nèi)核衫仑。而考慮到微內(nèi)核可以更高效地利用多處理器計算機的處理器核心資源,人們期待著等 Mach 把系統(tǒng)服務都搬到內(nèi)核之外后可以把運行效率損失降下來堕花。同時 Mach 在微內(nèi)核方面小小的嘗試迅速吸引了大批公司與組織的注意惑畴,開放軟件基金會 (Open Software Foundation, OSF) 宣布下一代系統(tǒng) OSF/1 將基于 Mach 的內(nèi)核航徙, NeXTSTEP 也將使用 Mach2.5如贷, 甚至 IBM 也打算利用 Mach 構建 Workplace OS。蘋果公司這個時候也出手了到踏,蘋果公司也從此基于 Mach2.5 打造其操作系統(tǒng)內(nèi)核 XNU杠袱,XNU 的構成如下圖所示,Mach 作為內(nèi)核的內(nèi)環(huán)窝稿,外環(huán)右側是蘋果的驅(qū)動框架(I/O Kit)楣富,外環(huán)左側是 BSD 的系統(tǒng)服務代碼提供 UNIX 兼容的服務層,這三者共同協(xié)作向上層提供完整的系統(tǒng)服務伴榔。XNU 廣泛地使用在蘋果公司的 OSX纹蝴,IOS 等系統(tǒng)中。

image

這個時候由于 UNIX 系統(tǒng)廣泛使用帶來的商業(yè)利益踪少,此時 BSD 系統(tǒng)開發(fā)者與 UNIX 的擁有者 AT&T 陷入了法律大戰(zhàn)塘安,Mach 使用的 BSD 相關代碼有了法律風險。提升性能的期望和規(guī)避法律風險的需求推動著 Mach 3.0 的開發(fā)援奢,Mach 3.0 的開發(fā)目標主要是為了替換 BSD 系統(tǒng)服務兼犯,同時盡量多地將系統(tǒng)服務放到內(nèi)核之外去運行,成為名副其實的微內(nèi)核設計集漾。經(jīng)過眾多開發(fā)者 3 年的努力切黔,Mach 3.0 于 1990 年發(fā)布,但是由于在系統(tǒng)服務之間完全使用 IPC 通信具篇,而不是向宏內(nèi)核那樣直接進行函數(shù)調(diào)用纬霞,即便是多處理器機器上運行也性能損失慘重,Mach 3.0 最多比 UNIX 損失 67% 運行效率驱显,這導致 Mach 3.0 以及其所代表的第一代微內(nèi)核設計被看衰诗芜。此后斷斷續(xù)續(xù)有在 Mach 的基礎上對性能進行提升的嘗試侨舆,但是均不太理想,至此 Mach 成為了微內(nèi)核第一代先驅(qū)者绢陌。

第二代微內(nèi)核:解決性能問題

第二代微內(nèi)核的主要代表是 L3 和 L4挨下,以及 QNX 系統(tǒng)使用的 Neutrino 內(nèi)核。前面第一代的微內(nèi)核 Mach 由于效率問題雖然失敗了脐湾,但是微內(nèi)核的理念并沒有被放棄臭笆,德國的計算機科學家 Jochen Liedtke 認為 Mach 的 IPC 效率低下的原因就是因為 IPC 部分不夠精簡,于是他開發(fā)了 L3 和 L4 微內(nèi)核秤掌,對 IPC 部分進行了很徹底的精簡:1. 內(nèi)核的 IPC 機制只是單純地傳遞信息愁铺,諸如安全權限檢查這類的代碼都省略掉,省略掉的功能全部由用戶進程自己處理闻鉴。如此一來 IPC 功能部分的代碼執(zhí)行時間大大縮短茵乱;2. IPC 不使用內(nèi)存?zhèn)鬟f消息,而使用寄存器傳遞消息孟岛,同時限制 IPC 每次傳遞的信息長度瓶竭,這樣省去了對內(nèi)存的訪問時間。L4 微內(nèi)核的 IPC 速度經(jīng)過測試要比 Mach 快 20 倍渠羞,這個令人驚訝的優(yōu)化效果吸引了眾多的目光斤贰,使微內(nèi)核的研究重新火熱起來。后面 L4 內(nèi)核又發(fā)展出了很多相關系統(tǒng)次询,比如 Pistachio荧恍,L4/MIPS,與 Fiasco 等等屯吊,這些內(nèi)核組成了 L4 的大家族送巡。

image

第二代微內(nèi)核的代表除了有 L4 內(nèi)核,也還有其他微內(nèi)核比如 Exokernel盒卸、Rambler 等骗爆,不過商業(yè)上最成功的則是目前黑莓公司旗下的 QNX 系統(tǒng)所使用的 Neutrino 內(nèi)核(QNX,1980 年誕生世落,最初以 QUICK UNIX 為名淮腾,后改為 QNX糟需;2004 年 QNX 被 Harman 國際收購屉佳;2010 年 Harman 國際下被黑莓收購,QNX 成為黑莓旗下的資產(chǎn))洲押,QNX 主要為高可靠領域提供解決方案武花,比如交通、能源杈帐、醫(yī)療体箕、航天航空等专钉。

image

第三代微內(nèi)核:主要重視安全問題等

在前面兩代的基礎上,第三代微內(nèi)核蓬勃發(fā)展累铅,許許多多微內(nèi)核都被開發(fā)出來跃须,主要代表有:seL4、Fiasco.OC娃兽、NOVA 等菇民。本來第一代微內(nèi)核的設計隔離了使內(nèi)核安全性降低的系統(tǒng)服務,讓系統(tǒng)服務漏洞不會影響內(nèi)核投储,進而提高了內(nèi)核安全性第练,可以說是關上了破壞系統(tǒng)的門, 但是第二代系統(tǒng)卻又給攻擊者開了個窗戶玛荞;由于第二代微內(nèi)核在內(nèi)核中省去了關于安全性檢查等步驟娇掏,把所有關于安全檢查功能的實現(xiàn)都交給系統(tǒng)服務自己去實現(xiàn),這導致系統(tǒng)服務的通信接口直接暴露給用戶態(tài)勋眯,任何進程都可能無限制地請求系統(tǒng)服務婴梧,系統(tǒng)服務不得不花費額外的代價來區(qū)分請求是否合法,容易造成拒絕服務攻擊客蹋。比如正常的文件服務應該是從虛擬文件系統(tǒng)服務 ->文件系統(tǒng)服務 ->磁盤驅(qū)動服務這個流程來完成的志秃,但是如果攻擊者如果繞過虛擬文件系統(tǒng)服務,直接無限制地請求攻擊者本身沒有權限訪問的文件系統(tǒng)服務嚼酝,使文件系統(tǒng)服務長期處于滿載狀態(tài)浮还,讓其他進程無法通過正常的虛擬文件系統(tǒng)得到文件系統(tǒng)服務。為了增強安全性闽巩,且不過分影響性能钧舌,人們開始研發(fā)第三代微內(nèi)核。

seL4 是在第二代內(nèi)核 L4 的基礎上發(fā)展而來的涎跨。seL4 不僅僅繼承了 L4 內(nèi)核家族的高性能特性洼冻,還具備基于端點 (enndpoint) 的 IPC 機制。這種 IPC 機制最大的特點是使用了能力空間的概念隅很,進程在使用 IPC 請求系統(tǒng)服務時必須具備相對應的能力撞牢,進程持有不可偽造的令牌來表示擁有請求某種服務的能力。令牌可以被復制叔营,可以被轉(zhuǎn)移屋彪,還可以通過 IPC 進行傳輸。令牌其實是一個指向存在于內(nèi)核空間內(nèi)核對象的指針绒尊,所以普通進程并不能修改自身以及其他進程的權限分配畜挥,但是內(nèi)核可以對令牌指定的權限進行控制,從而保證了用戶態(tài)不能繞過能力空間這個機制對系統(tǒng)服務造成濫用婴谱。

seL4 還是第一個完全通過形式化驗證的內(nèi)核蟹但,通俗說形式化驗證就是在數(shù)學軟件的幫助下使用數(shù)學語言自動化地推導檢查系統(tǒng)的每一個運行狀態(tài)躯泰。

4其他的微內(nèi)核系統(tǒng):Fuchsia,Minix

Fuchsia 是 Google 開發(fā)的一款全新操作系統(tǒng)华糖,試圖覆蓋手機麦向、平板甚至筆記本等一系列領域。Google 為該系統(tǒng)配備了 Vulkan 圖形接口客叉、3D 桌面渲染 Scenic磕蛇、Flutter 應用開發(fā)框架,還有一個稱為 zircon 的微內(nèi)核十办。zircon 內(nèi)核是從高通平臺的一個 Bootloader 項目:Little Kernel 發(fā)展而來秀撇。zircon 內(nèi)核屬于微內(nèi)核設計,只提供 IPC向族,進程管理呵燕,地址空間管理功能。zircon 區(qū)別于以進程或者以文件為核心的設計件相,zircon 是以內(nèi)存為核心來設計的再扭,內(nèi)存在 zircon 中是以對象的方式存在,可以通過 channel 通信機制傳遞虛擬內(nèi)存對象(Virtual memory object)的句柄夜矗,進程拿到句柄后可以把這塊內(nèi)存映射到自己的空間泛范。

Minix 系統(tǒng)則由荷蘭阿姆斯特丹的 Vrije 大學的 Andrew S.Tanenbaum 教授所開發(fā)。該系統(tǒng)最大的特點是可以故障隔離紊撕,自動重啟失敗的服務罢荡。Minix 使用分層設計,最底層的微內(nèi)核提供中斷處理对扶、進程管理区赵、進程通信等服務,這一層運行在內(nèi)核態(tài)浪南;中間層提供輪回服務 (Reincarnation Server)笼才、文件服務、進程管理络凿、X 圖形服務以及驅(qū)動等骡送,這一層運行在用戶態(tài);最上層為用戶進程絮记。其中輪回服務負責在中間層的服務出現(xiàn)崩潰時重啟這些服務摔踱,從而保證服務的自我修復。Minix 由于其自我修復特性被英特爾管理引擎(ME)所選用到千,該管理引擎主要負責管理英特爾芯片的內(nèi)部模塊昌渤。

5微內(nèi)核的優(yōu)缺點優(yōu)點

  1. 系統(tǒng)服務模塊化,可移植性高憔四;

  2. 內(nèi)核安全性提高 (模塊內(nèi)部的 bug 不影響內(nèi)核穩(wěn)定膀息,將黑客利用軟件漏洞造成的破壞限制在單個模塊內(nèi)部);

  3. 可以多套系統(tǒng)服務共存了赵,相當于同時運行多種操作系統(tǒng)潜支;

  4. 穩(wěn)定統(tǒng)一的接口 (可以獨立維護私有驅(qū)動以及服務,不需要跟內(nèi)核源碼綁定)柿汛;

  5. 在商業(yè)上冗酿,微內(nèi)核可以避免代碼受到一些開源協(xié)議的影響,比如 GPL 協(xié)議络断;

  6. 內(nèi)核精簡裁替,可以進行形式化驗證,利用數(shù)學證明內(nèi)核的安全性貌笨;

  7. 數(shù)學可證明的實時性弱判;

  8. 非常適合多處理器系統(tǒng)設計,在多處理器核心計算機上锥惋,互相依賴的系統(tǒng)服務可以同時運行昌腰;

缺點

  1. 通過進程通信的方式交換數(shù)據(jù)或者調(diào)用系統(tǒng)服務,而不是使用系統(tǒng)調(diào)用膀跌,造成額外的操作系統(tǒng)開銷遭商;

  2. 使用一些頻繁使用的系統(tǒng)服務時,比如網(wǎng)絡收發(fā)數(shù)據(jù)捅伤,造成的進程上下文切換對操作系統(tǒng)來說也是一個負擔劫流;

  3. 由于系統(tǒng)服務高度模塊化,系統(tǒng)服務之間存在大量的內(nèi)存復制丛忆;

  4. 對互相之間存在復雜調(diào)用關系的系統(tǒng)服務困介,難以設計通信接口;

  5. 系統(tǒng)服務與內(nèi)核在地址空間上分離蘸际,造成代碼局部性差座哩,降低了 cache 命中率;

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粮彤,一起剝皮案震驚了整個濱河市根穷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌导坟,老刑警劉巖坛掠,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茂嗓,居然都是意外死亡惭适,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門递递,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喷橙,“玉大人啥么,你說我怎么就攤上這事》∮猓” “怎么了悬荣?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疙剑。 經(jīng)常有香客問我氯迂,道長,這世上最難降的妖魔是什么言缤? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任嚼蚀,我火速辦了婚禮,結果婚禮上管挟,老公的妹妹穿的比我還像新娘轿曙。我一直安慰自己,他們只是感情好哮独,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布拳芙。 她就那樣靜靜地躺著,像睡著了一般皮璧。 火紅的嫁衣襯著肌膚如雪舟扎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天悴务,我揣著相機與錄音睹限,去河邊找鬼。 笑死讯檐,一個胖子當著我的面吹牛羡疗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播别洪,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叨恨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挖垛?” 一聲冷哼從身側響起痒钝,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痢毒,沒想到半個月后送矩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡哪替,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年栋荸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晌块,死狀恐怖爱沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摸袁,我是刑警寧澤钥顽,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布义屏,位于F島的核電站靠汁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闽铐。R本人自食惡果不足惜蝶怔,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兄墅。 院中可真熱鬧踢星,春花似錦、人聲如沸隙咸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽五督。三九已至藏否,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充包,已是汗流浹背副签。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留基矮,地道東北人淆储。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像家浇,于是被迫代替她去往敵國和親本砰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容