按照發(fā)布會(huì)的PPT來(lái)看,鴻蒙OS有三層架構(gòu),第一層是微內(nèi)核,第二層是基礎(chǔ)服務(wù),第三層是程序框架。所謂的第二層基礎(chǔ)服務(wù)應(yīng)該就是那些從內(nèi)核態(tài)空間移到用戶態(tài)空間的基礎(chǔ)服務(wù)程序。當(dāng)然,也可能部分還是運(yùn)行的內(nèi)核態(tài),更像是混合內(nèi)核。
當(dāng)下的鴻蒙OS依然是基于開(kāi)源框架,只是關(guān)鍵模塊自我研發(fā),也就是說(shuō),和各大手機(jī)廠商使用Android開(kāi)源系統(tǒng)實(shí)現(xiàn)各自的定制系統(tǒng)大概是一個(gè)意思。鴻蒙OS的愿景是2020年實(shí)現(xiàn)內(nèi)核和應(yīng)用框架自研,2021年實(shí)現(xiàn)軟硬件協(xié)同優(yōu)化。這里的軟硬件協(xié)同優(yōu)化,應(yīng)該是要解決進(jìn)程間通信(Inter-process communication, IPC)的性能問(wèn)題,這個(gè)后面會(huì)詳細(xì)說(shuō)一下。
關(guān)于鴻蒙OS不過(guò)多評(píng)價(jià),時(shí)間是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。接下來(lái)主要聊一聊微內(nèi)核的概念。
微內(nèi)核(Microkernel or μ-kernel),這個(gè)概念其實(shí)是相對(duì)于宏內(nèi)核(Monolithic kernel)而言的。
宏內(nèi)核與微內(nèi)核對(duì)比圖
我們常說(shuō)的Linux/UNIX就是基于宏內(nèi)核的,內(nèi)核提供了相當(dāng)多的功能,包括驅(qū)動(dòng),調(diào)度器,地址空間管理,進(jìn)程間通信,文件系統(tǒng),虛擬文件系統(tǒng),系統(tǒng)調(diào)用等,以Linux為例,其宏內(nèi)核的代碼量高達(dá)2700萬(wàn)行。
宏內(nèi)核系統(tǒng)架構(gòu)
而微內(nèi)核僅提供調(diào)度器,地址空間管理以及進(jìn)程間通信等最基礎(chǔ)的功能,MINIX 3的微內(nèi)核僅1.2萬(wàn)行代碼。
微內(nèi)核架構(gòu)
宏內(nèi)核與微內(nèi)核代碼量為什么會(huì)有這么大的區(qū)別呢?德國(guó)計(jì)算機(jī)科學(xué)家Jochen Liedtke提出的微內(nèi)核最小化原則,簡(jiǎn)單的講就是,宏內(nèi)核所提供的所有功能,可以扔到用戶態(tài)實(shí)現(xiàn)的,就一律扔到用戶態(tài),內(nèi)核僅保留絕對(duì)必要的功能。這有點(diǎn)像奧卡姆剃刀原理,如非必須,勿增實(shí)體。也就是說(shuō),宏內(nèi)核提供了大量的冗余功能,兼容了太多的硬件,代碼量自然就大。而微內(nèi)核甚至把硬件的驅(qū)動(dòng)程序從內(nèi)核剝離出去,使其運(yùn)行在用戶態(tài)。
早期的宏內(nèi)核,其實(shí)很像我們今天所說(shuō)的微內(nèi)核。早期設(shè)備本身的內(nèi)存空間有限,外設(shè)也極少,內(nèi)核需要支持的特性也很有限。但是隨著硬件的飛速發(fā)展,內(nèi)核需要支持更多的特性和更多的外設(shè),宏內(nèi)核架構(gòu)的復(fù)雜性和代碼規(guī)模也就飛速增加起來(lái)了,內(nèi)核程序間的耦合度也越來(lái)越大。當(dāng)然,CPU速度的提升以及內(nèi)存空間的增加,讓我們基本上可以無(wú)視內(nèi)核對(duì)性能的消耗。但是5G時(shí)代,一個(gè)萬(wàn)物互聯(lián)(Internet of Things, IoT)的時(shí)代,將有更多的小型智能設(shè)備接入互聯(lián)網(wǎng),低功耗、低內(nèi)存、安全性成為了新的要求,在這些設(shè)備上跑宏內(nèi)核的系統(tǒng)絕對(duì)不是好的選擇,由此,微內(nèi)核的熱度又起來(lái)了。
早在上個(gè)世紀(jì)八九十年代,微內(nèi)核一度被炒的熱火朝天。但是一直因?yàn)樾阅軉?wèn)題而沒(méi)有得到廣泛應(yīng)用。直到今天,微內(nèi)核在學(xué)界的熱度也遠(yuǎn)超工業(yè)界。每一次發(fā)展微內(nèi)核,都大致經(jīng)歷這樣的過(guò)程:把內(nèi)核的某些功能剝離出內(nèi)核,然后爆發(fā)性能問(wèn)題,然后再把一部分功能移回到內(nèi)核。這樣就出現(xiàn)了很多介于宏內(nèi)核和微內(nèi)核之間的內(nèi)核形態(tài),一般統(tǒng)稱為混合內(nèi)核。我們常見(jiàn)的Mac OS、Windows NT等用的就是這種混合內(nèi)核的架構(gòu)。
混合內(nèi)核
近幾年谷歌一直在研發(fā)Fuchsia系統(tǒng),使用的Zircon內(nèi)核,才算是真正意義上的微內(nèi)核。
那么,微內(nèi)核到底有什么優(yōu)點(diǎn)呢?
分布式支持:微內(nèi)核各模塊采用IPC傳遞信息,對(duì)于IPC而言,無(wú)論是在本機(jī),還是局域網(wǎng)或者廣域網(wǎng),只要賦予進(jìn)程和設(shè)備唯一的標(biāo)識(shí)符,微內(nèi)核的設(shè)計(jì)幾乎是天然支持分布式系統(tǒng)的。
模塊化、低耦合:由于大部分服務(wù)程序被轉(zhuǎn)移到用戶態(tài)空間,系統(tǒng)就可以按需啟動(dòng)這些服務(wù),按需接入外設(shè)。用戶態(tài)的進(jìn)程各自獨(dú)立,系統(tǒng)耦合度大大降低。
組件故障不會(huì)導(dǎo)致系統(tǒng)重啟,內(nèi)核只需要重啟故障組件就可以恢復(fù)正常,系統(tǒng)穩(wěn)定性可以大大提高。熟悉Linux內(nèi)核編程的人都知道,內(nèi)核代碼出問(wèn)題,往往會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰。而用戶態(tài)程序不僅不會(huì)導(dǎo)致系統(tǒng)崩潰,而且易于調(diào)試。
微內(nèi)核系統(tǒng)功能升級(jí)也更容易,由于宏內(nèi)核的很多功能都是運(yùn)行在內(nèi)核,跟隨系統(tǒng)一起啟動(dòng)。雖然可以使用補(bǔ)丁實(shí)現(xiàn)故障修復(fù)和功能升級(jí),但是依然有很多問(wèn)題無(wú)法通過(guò)補(bǔ)丁解決,還是要依賴版本更換和重啟整個(gè)系統(tǒng)。而微內(nèi)核只需要替換相關(guān)組件,然后重啟組件即可。
內(nèi)核代碼零缺陷:由于微內(nèi)核代碼量極少,可以從數(shù)學(xué)角度進(jìn)行形式化驗(yàn)證,從而保證內(nèi)核代碼完全沒(méi)有缺陷,也就是所謂的Bug free。但是這并不是說(shuō)整個(gè)系統(tǒng)沒(méi)有缺陷,系統(tǒng)本身還包括用戶態(tài)的服務(wù)程序,說(shuō)白了,只是把缺陷轉(zhuǎn)移到相對(duì)安全的用戶態(tài)罷了。
那為什么微內(nèi)核直到今天也沒(méi)廣泛應(yīng)用呢?
原因前面已經(jīng)說(shuō)了,微內(nèi)核的低效率是硬傷。微內(nèi)核依賴IPC實(shí)現(xiàn)通信,宏內(nèi)核的IPC效率就很不盡人意,微內(nèi)核則把IPC的低效率進(jìn)一步放大了。相對(duì)而言,宏內(nèi)核的文件系統(tǒng),驅(qū)動(dòng)等以線程的方式工作在內(nèi)核空間,它們之間的通信可以都在內(nèi)核完成,不需要上下文切換,可以直接訪問(wèn)共享資源,甚至可以直接相互調(diào)用接口達(dá)到通信的目的。而微內(nèi)核則需要通過(guò)IPC通信,觸發(fā)系統(tǒng)調(diào)用,內(nèi)存拷貝(異步通信需要拷貝兩次),運(yùn)行上下文切換,阻塞進(jìn)程,這些操作開(kāi)銷都很大。
Jochen Liedtke創(chuàng)造的L4 microkernel把IPC的系統(tǒng)開(kāi)銷降低了一個(gè)數(shù)量級(jí)。如何實(shí)現(xiàn)呢?
首先,直接棄用異步IPC,所有通信均使用同步的方式。
然后把通信數(shù)據(jù)盡可能直接使用寄存器傳遞(這個(gè)涉及CPU指令集,有機(jī)會(huì)再細(xì)說(shuō)),這樣可以減少數(shù)據(jù)拷貝、內(nèi)存尋址、調(diào)度器切換運(yùn)行上下文的開(kāi)銷。
最后為了解決同步通信造成進(jìn)程阻塞的問(wèn)題,引入了進(jìn)程直接切換的概念,即當(dāng)有數(shù)據(jù)發(fā)送時(shí),當(dāng)發(fā)送端發(fā)完數(shù)據(jù)時(shí),直接將上下文切換到接收進(jìn)程,迅速完成數(shù)據(jù)傳遞和接收。
除此之外,微內(nèi)核效率差的另一個(gè)原因則是每指令的存儲(chǔ)器周期比宏內(nèi)核要長(zhǎng)很多,這個(gè)就需要減少微內(nèi)核的緩存工作集來(lái)解決問(wèn)題了。
微內(nèi)核效率差的原因除了IPC、指令存儲(chǔ)周期長(zhǎng)外,還有一個(gè)觀念上的問(wèn)題。華為鴻蒙OS的愿景是支持多終端,統(tǒng)一開(kāi)發(fā)流程,也就是讓一個(gè)微內(nèi)核支持所有的應(yīng)用場(chǎng)景。而提高微內(nèi)核效率的一個(gè)解決方案卻是,設(shè)計(jì)單一目的(Single-purpose)、專用的微內(nèi)核。不知道華為鴻蒙OS是怎么解決這個(gè)問(wèn)題的,還有點(diǎn)小期待呢。
編輯:hfy
-
微內(nèi)核
+關(guān)注
關(guān)注
0文章
58瀏覽量
13593 -
鴻蒙系統(tǒng)
+關(guān)注
關(guān)注
183文章
2639瀏覽量
67711
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙OS與Fuchsia OS的異同
鴻蒙OS適用的全場(chǎng)景到底什么意思?
鴻蒙介紹
鴻蒙os系統(tǒng)是什么意思 鴻蒙os系統(tǒng)有什么作用
鴻蒙OS優(yōu)于安卓 未來(lái)將開(kāi)源
華為為什么會(huì)在東莞發(fā)布鴻蒙OS?你怎么看?
華為發(fā)布鴻蒙系統(tǒng):基于微內(nèi)核的全場(chǎng)景分布式OS
鴻蒙OS比騰訊、阿里強(qiáng)多了?那你怎么看華為的鴻蒙OS?
淺談鴻蒙OS的優(yōu)勢(shì)及意義
鴻蒙系統(tǒng)設(shè)計(jì):宏內(nèi)核vs微內(nèi)核的基礎(chǔ)邏輯
鴻蒙OS系統(tǒng)詳解
榮耀趙明:是否會(huì)使用鴻蒙 OS 系統(tǒng),要看鴻蒙 OS 的開(kāi)源進(jìn)度
華為系統(tǒng)openharmony 鴻蒙內(nèi)核的理解
華為鴻蒙系統(tǒng)openharmony的兩個(gè)基本概念
鴻蒙OS和開(kāi)源鴻蒙什么關(guān)系?

評(píng)論