微內核一直是學界的寵兒,並不是業界的寵兒。
2019年8月9日,華為在其全球開發者大會上,正式發布了全新的自有系統 HarmonyOS 鴻蒙:基於微內核的面向全場景的分布式作業系統。餘承東在現場表示, HarmonyOS 鴻蒙擁有分布架構、內核安全、生態共享、天生流暢四大優勢。
知乎答主@bacon xu 對全球開發者大會提到的微內核做了一個解答,從另一方面認識一個不同的鴻蒙OS:
在經過好幾代發展之後,微內核終於發展到了seL4,它成為了人類歷史上第一個用形式化證明的作業系統。
簡單點說,用數學方法從邏輯的角度可以證明這個作業系統是 Bug Free沒有 Bug的。但Linux就不可以,因為它的內核太複雜,沒有辦法證明,超出了人類人力所及範圍。正所謂成也蕭何,敗也蕭何。微內核的簡單,成就了它的高安全。
但是它的核心只保留了基本的資源管理:處理器的時間、內存、通訊、中斷等。所有其他功能統統都扔給了應用層管理,從而以服務的形式去提供功能。服務之間採用IPC通訊(進程間通訊)。
對比一下seL4的架構圖和Linux的架構圖,不難發現,Linux這種宏內核什麼都有,seL4的東西好像都被排在用戶空間裡。也正因為這個原因,seL4的核心非常小,不到9000行C代碼。
▲L4系統的架構
▲Linux的宏內核架構
對於微內核,由於用MMU(內存管理單元)對進程空間(內存區域)做了隔離保護,沒有授權的進程是無法訪問其他進程的空間。這就阻止了惡意程序對其他進程數據的竊取。
進程是一個作業系統的抽象概念。簡單的說:每個進程運行一段用戶編寫的代碼,從這個代碼看過去,它好像擁有自己的CPU和所有的一切資源(內存、設備等)。當然我們都知道,這是作業系統給它造成的假象。當進程需要額外的資源時,得向作業系統申請。和別的進程通訊時,也得和作業系統申請。
這個邏輯看起來什麼繁瑣,但好處是不言而喻的:
沒權限,什麼都別想幹。
想幹壞事?把你的資源全部收回!這個場景可以腦補一下用Windows Ctrl+Alt+del或者用Linux下的 Kill -9殺掉沒有響應的程序。
微內核連驅動都可以是進程的。也就說,只有內核不可以重啟,其他的組件統統可以重啟。但實際上它是最後防線,實踐中並不會用到。因為系統不可能帶著有重啟Bug的驅動運行,雖然不會造成系統奔潰,但用戶可不願意買帳。但對於寫驅動的程式設計師這是一個好消息,至少不太容易把內核搞死,可以反覆調試找問題。
在微內核的管理下,因為MMU的封鎖過於嚴格,用戶進程要存儲一個東西,必須請求內核,內核把數據丟給文件系統的進程處理。早期的辦法,只得把數據從用戶進程搬到文件系統進程。這個過程非常耗時,而且不幸的是,還沒什麼好辦法突破MMU的保護。
這是導致微內核性能低下的主要原因:CPU不支持微內核特性——微內核承受著性能上的懲罰——微內核不在主流的作業系統框架中——CPU們不會響應來自微內核的需求——CPU 不支持微內核特性。形成了一個惡性循環。
反觀Linux內核,如果驅動不好,搞死內核的事情是常有的事。但因為文件系統都在內核裡,內核可以直接訪問用戶空間的數據。而Linux採用的是系統調用,非IPC的方法,速度較之IPC要快。當然,Linux下也有IPC,但不幸的是,IPC在Linux下,性能也不咋地。不過Linux並不依賴IPC通訊,微內核卻十分依賴。
因為IPC這個腳後跟的原因,微內核一直被Linux這種宏內核吊打。學界想了很多辦法,L4提出了一個Fast IPC的辦法,只要你IPC通訊沒數據,可以借用CPU核心寄存器的辦法傳遞消息,速度大大加快。也有人想到了dIPC, direct IPC。用標籤內存的辦法進行隔離,傳遞數據,無需通過內核空間。大大加快了通訊速度。但標籤內存不符合現在計算機體系的架構,實踐中,採用的可能性較小。
上交的陳海波教授團隊,19年想了兩個辦法進行IPC的加速。一個是XPC,一個是Skybridge。其中XPC是硬體,增加了一點點CPU硬體修改,使得IPC通訊無需內核的參與,也無需數據拷貝;Skybridge,採用的是雙內核,一個RootKernel,類似type-1的虛化,專門負責IPC數據通訊,上層的Kernel為微內核。這樣IPC繞過了MMU 機制,也不會對微內核之上的MMU保護機制產生破壞。在IPC通訊的時候,無內核參與,無需拷貝。
再來看看Android的架構。Android因為採用了非常多的服務,不同於普通的應用,非常依賴於IPC通訊。為了提高速度,開發出了 IPC Binder Drivers 來加速 Linux下的IPC通訊。但效果不是太理想。XPC對Binder IPC的加速只有50多倍。
▲17年的dIPC也是吊打Linux的 IPC
SkyBridge和dIPC處於同一性能級別,XPC則更高。從論文上看,SkyBridge更實用一些,未來XPC還需要繼續依賴於硬體的革新。
目前市場上依然是宏內核的天下,如Linux、Unix、Windows等,微內核商業上較為有名氣的可算是QNX。好在巨頭們都看到了微內核的進步,Google搞了Fuchsia OS (內核 Zircon),華為有了鴻蒙,蘋果MAC和IOS也號稱微內核,微軟搞混合內核。一時間好不熱鬧。
個人堅信微內核是未來的方向。微內核不到1萬行的C代碼,只要處理器支持MMU,就可以跑出微內核的全特性。服務也是可擴展的,依據不同的應用使用不同的服務就好,類似於USB熱拔插。如同現在電腦沒有光碟機、硬碟、印表機,就用USB擴展。這也決定著微內核可以在各種場景下見到它的身影。手機上面可以弄一個Android Binder,堆上相關的庫就可以運行Android;伺服器上面弄一個Type-2的虛化或者容器,就可以運行各種各樣的服務。嵌入式的體積不成問題,應用更不是問題。尤其是華為手握CPU的設計和作業系統的設計,想做一個帶硬體優化的高性能系統並非難事。此舉將會引領學界和產業界對微內核的一個小高潮。
華為這次的發力,真正的用一種作業系統內核統一了大多數應用場景。配上他們自家的開發工具,相信應該是很好用的。對於華為的開源,還有鴻蒙的未來發展、生態都只是時間問題。
而推動的微內核發展,則更是一個開啟新紀元的事。
本文作者:知乎答主@bacon xu丨作業系統行業從業者