什么是微內(nèi)核?
微內(nèi)核設(shè)計(jì)的基本思想是簡化內(nèi)核功能,在內(nèi)核之外的用戶態(tài)盡可能多地實(shí)現(xiàn)系統(tǒng)服務(wù),同時(shí)加入相互之間的安全保護(hù)。內(nèi)核只提供最基礎(chǔ)的服務(wù),比如多進(jìn)程調(diào)度、多進(jìn)程通信(IPC)等。其中進(jìn)程通信是作為連接應(yīng)用與用戶態(tài)系統(tǒng)服務(wù)的橋梁。
宏內(nèi)核與微內(nèi)核的對(duì)比示意圖
宏內(nèi)核系統(tǒng)相關(guān)的服務(wù)基本都是放于內(nèi)核態(tài)內(nèi)核中,例如文件系統(tǒng)、設(shè)備驅(qū)動(dòng)、虛擬內(nèi)存管理、網(wǎng)絡(luò)協(xié)議棧等;而微內(nèi)核則把更多的系統(tǒng)服務(wù)(例如文件系統(tǒng)、POSIX服務(wù)、網(wǎng)絡(luò)協(xié)議棧甚至外設(shè)驅(qū)動(dòng))放到用戶態(tài)應(yīng)用,形成一個(gè)個(gè)服務(wù),等待其他應(yīng)用的請(qǐng)求。而后來,為了在宏內(nèi)核與微內(nèi)核之間揚(yáng)長避短,也發(fā)展出了中間的混合內(nèi)核的形態(tài),部分服務(wù)也會(huì)放置于內(nèi)核中。
微內(nèi)核的發(fā)展歷史
微內(nèi)核這個(gè)概念從提出開始就在不斷地發(fā)展、完善進(jìn)步之中,到目前為止可以分為三代。
第一代微內(nèi)核:從無到有
第一代微內(nèi)核的主要代表是Mach,該系統(tǒng)由美國卡耐基梅隆大學(xué)的AvieTevanian和RichardRashid主導(dǎo)開發(fā)。在Mach剛剛開始設(shè)計(jì)時(shí),UNIX的發(fā)展正如日中天,所以Mach在設(shè)計(jì)時(shí)的一大目標(biāo)就是兼容UNIX,但是與UNIX不同的是Mach嘗試使用微內(nèi)核架構(gòu)去設(shè)計(jì)。Mach以IPC是作為所有系統(tǒng)服務(wù)與內(nèi)核交換數(shù)據(jù)的基礎(chǔ)機(jī)制,充分運(yùn)用IPC、虛擬內(nèi)存、多進(jìn)程等特性將冗余的系統(tǒng)服務(wù)移出內(nèi)核作為進(jìn)程運(yùn)行。
1986年,經(jīng)過兩年的開發(fā),第一版的Mach發(fā)布后的第二年,Mach就發(fā)布了第2版,不過由于時(shí)間倉促,加之沒有足夠的人手與資金,所以此時(shí)Mach內(nèi)核并不提供完全的系統(tǒng)服務(wù)。
為了支撐系統(tǒng)上層運(yùn)行,這一版的內(nèi)核包含了大量4.3版本的BSD系統(tǒng)(UNIX的一個(gè)分支)代碼提供系統(tǒng)服務(wù),并且BSD系統(tǒng)服務(wù)運(yùn)行在內(nèi)核狀態(tài),這導(dǎo)致Mach內(nèi)核的代碼體積甚至大于常規(guī)UNIX內(nèi)核。
第一版和第二版的Mach主要做了如下工作:
1.驗(yàn)證了微內(nèi)核的可行性;
2.在多處理器計(jì)算機(jī)上進(jìn)行移植驗(yàn)證了微內(nèi)核在多處理器計(jì)算機(jī)上的運(yùn)行;
3.最后為了提高IPC的效率,Mach使用共享內(nèi)存機(jī)制來完成IPC。
而Mach的共享內(nèi)存機(jī)制是在虛擬內(nèi)存技術(shù)的支持下實(shí)現(xiàn)的,只有需要對(duì)內(nèi)存進(jìn)行寫入時(shí)才進(jìn)行復(fù)制。這么一處理比每次都復(fù)制一遍內(nèi)存節(jié)省了內(nèi)存使用同時(shí)又加快了IPC機(jī)制的處理時(shí)間,這個(gè)改進(jìn)稱為寫時(shí)復(fù)制,并且在如今的通用操作系統(tǒng)如Linux中常常用到。
經(jīng)過測試,Mach2.5的效率最多比UNIX少25%,但是考慮到Mach帶來的可靠性、可拓展性、安全性,這個(gè)效率損失尚可以接受。
當(dāng)然此時(shí)Mach內(nèi)核還不算完全的微內(nèi)核。而考慮到微內(nèi)核可以更高效地利用多處理器計(jì)算機(jī)的處理器核心資源,人們期待著等Mach把系統(tǒng)服務(wù)都搬到內(nèi)核之外后可以把運(yùn)行效率損失降下來。
同時(shí)Mach在微內(nèi)核方面小小的嘗試迅速吸引了大批公司與組織的注意,開放軟件基金會(huì)(OpenSoftwareFoundation,OSF)宣布下一代系統(tǒng)OSF/1將基于Mach的內(nèi)核,NeXTSTEP也將使用Mach2.5,甚至IBM也打算利用Mach構(gòu)建WorkplaceOS。蘋果公司這個(gè)時(shí)候也出手了,蘋果公司也從此基于Mach2.5打造其操作系統(tǒng)內(nèi)核XNU,XNU的構(gòu)成如下圖所示,Mach作為內(nèi)核的內(nèi)環(huán),外環(huán)右側(cè)是蘋果的驅(qū)動(dòng)框架(I/OKit),外環(huán)左側(cè)是BSD的系統(tǒng)服務(wù)代碼提供UNIX兼容的服務(wù)層,這三者共同協(xié)作向上層提供完整的系統(tǒng)服務(wù)。XNU廣泛地使用在蘋果公司的OSX、IOS等系統(tǒng)中。
這個(gè)時(shí)候由于UNIX系統(tǒng)廣泛使用帶來的商業(yè)利益,此時(shí)BSD系統(tǒng)開發(fā)者與UNIX的擁有者AT&T陷入了法律大戰(zhàn),Mach使用的BSD相關(guān)代碼有了法律風(fēng)險(xiǎn)。
提升性能的期望和規(guī)避法律風(fēng)險(xiǎn)的需求推動(dòng)著Mach3.0的開發(fā),Mach3.0的開發(fā)目標(biāo)主要是為了替換BSD系統(tǒng)服務(wù),同時(shí)盡量多地將系統(tǒng)服務(wù)放到內(nèi)核之外去運(yùn)行,成為名副其實(shí)的微內(nèi)核設(shè)計(jì)。
經(jīng)過眾多開發(fā)者3年的努力,Mach3.0于1990年發(fā)布,但是由于在系統(tǒng)服務(wù)之間完全使用IPC通信,而不是向宏內(nèi)核那樣直接進(jìn)行函數(shù)調(diào)用,即便是多處理器機(jī)器上運(yùn)行也性能損失慘重,Mach3.0最多比UNIX損失67%運(yùn)行效率,這導(dǎo)致Mach3.0以及其所代表的第一代微內(nèi)核設(shè)計(jì)被看衰。此后斷斷續(xù)續(xù)有在Mach的基礎(chǔ)上對(duì)性能進(jìn)行提升的嘗試,但是均不太理想,至此Mach成為了微內(nèi)核第一代先驅(qū)者。
第二代微內(nèi)核:解決性能問題
第二代微內(nèi)核的主要代表是L3和L4,以及QNX系統(tǒng)使用的Neutrino內(nèi)核。前面第一代的微內(nèi)核Mach由于效率問題雖然失敗了,但是微內(nèi)核的理念并沒有被放棄,德國的計(jì)算機(jī)科學(xué)家JochenLiedtke認(rèn)為Mach的IPC效率低下的原因就是因?yàn)镮PC部分不夠精簡,于是他開發(fā)了L3和L4微內(nèi)核,對(duì)IPC部分進(jìn)行了很徹底的精簡:
1.內(nèi)核的IPC機(jī)制只是單純地傳遞信息,諸如安全權(quán)限檢查這類的代碼都省略掉,省略掉的功能全部由用戶進(jìn)程自己處理。如此一來IPC功能部分的代碼執(zhí)行時(shí)間大大縮短;
2.IPC不使用內(nèi)存?zhèn)鬟f消息,而使用寄存器傳遞消息,同時(shí)限制IPC每次傳遞的信息長度,這樣省去了對(duì)內(nèi)存的訪問時(shí)間。L4微內(nèi)核的IPC速度經(jīng)過測試要比Mach快20倍,這個(gè)令人驚訝的優(yōu)化效果吸引了眾多的目光,使微內(nèi)核的研究重新火熱起來。后面L4內(nèi)核又發(fā)展出了很多相關(guān)系統(tǒng),比如Pistachio、L4/MIPS與Fiasco等等,這些內(nèi)核組成了L4的大家族。
第二代微內(nèi)核的代表除了有L4內(nèi)核,也還有其他微內(nèi)核比如Exokernel、Rambler等,不過商業(yè)上最成功的則是目前黑莓公司旗下的QNX系統(tǒng)所使用的Neutrino內(nèi)核(QNX,1980年誕生,最初以QUICKUNIX為名,后改為QNX;2004年QNX被Harman國際收購;2010年Harman國際下被黑莓收購,QNX成為黑莓旗下的資產(chǎn)),QNX主要為高可靠領(lǐng)域提供解決方案,比如交通、能源、醫(yī)療、航天航空等。
第三代微內(nèi)核:主要重視安全問題等
在前面兩代的基礎(chǔ)上,第三代微內(nèi)核蓬勃發(fā)展,許許多多微內(nèi)核都被開發(fā)出來,主要代表有:seL4、Fiasco.OC、NOVA等。
本來第一代微內(nèi)核的設(shè)計(jì)隔離了使內(nèi)核安全性降低的系統(tǒng)服務(wù),讓系統(tǒng)服務(wù)漏洞不會(huì)影響內(nèi)核,進(jìn)而提高了內(nèi)核安全性,可以說是關(guān)上了破壞系統(tǒng)的門,但是第二代系統(tǒng)卻又給攻擊者開了個(gè)窗戶。
由于第二代微內(nèi)核在內(nèi)核中省去了關(guān)于安全性檢查等步驟,把所有關(guān)于安全檢查功能的實(shí)現(xiàn)都交給系統(tǒng)服務(wù)自己去實(shí)現(xiàn),這導(dǎo)致系統(tǒng)服務(wù)的通信接口直接暴露給用戶態(tài),任何進(jìn)程都可能無限制地請(qǐng)求系統(tǒng)服務(wù),系統(tǒng)服務(wù)不得不花費(fèi)額外的代價(jià)來區(qū)分請(qǐng)求是否合法,容易造成拒絕服務(wù)攻擊。
比如正常的文件服務(wù)應(yīng)該是從虛擬文件系統(tǒng)服務(wù)-》文件系統(tǒng)服務(wù)-》磁盤驅(qū)動(dòng)服務(wù)這個(gè)流程來完成的,但是如果攻擊者如果繞過虛擬文件系統(tǒng)服務(wù),直接無限制地請(qǐng)求攻擊者本身沒有權(quán)限訪問的文件系統(tǒng)服務(wù),使文件系統(tǒng)服務(wù)長期處于滿載狀態(tài),讓其他進(jìn)程無法通過正常的虛擬文件系統(tǒng)得到文件系統(tǒng)服務(wù)。為了增強(qiáng)安全性,且不過分影響性能,人們開始研發(fā)第三代微內(nèi)核。
seL4是在第二代內(nèi)核L4的基礎(chǔ)上發(fā)展而來的。seL4不僅僅繼承了L4內(nèi)核家族的高性能特性,還具備基于端點(diǎn)(enndpoint)的IPC機(jī)制。
這種IPC機(jī)制最大的特點(diǎn)是使用了能力空間的概念,進(jìn)程在使用IPC請(qǐng)求系統(tǒng)服務(wù)時(shí)必須具備相對(duì)應(yīng)的能力,進(jìn)程持有不可偽造的令牌來表示擁有請(qǐng)求某種服務(wù)的能力。令牌可以被復(fù)制,可以被轉(zhuǎn)移,還可以通過IPC進(jìn)行傳輸。令牌其實(shí)是一個(gè)指向存在于內(nèi)核空間內(nèi)核對(duì)象的指針,所以普通進(jìn)程并不能修改自身以及其他進(jìn)程的權(quán)限分配,但是內(nèi)核可以對(duì)令牌指定的權(quán)限進(jìn)行控制,從而保證了用戶態(tài)不能繞過能力空間這個(gè)機(jī)制對(duì)系統(tǒng)服務(wù)造成濫用。
seL4還是第一個(gè)完全通過形式化驗(yàn)證的內(nèi)核,通俗說形式化驗(yàn)證就是在數(shù)學(xué)軟件的幫助下使用數(shù)學(xué)語言自動(dòng)化地推導(dǎo)檢查系統(tǒng)的每一個(gè)運(yùn)行狀態(tài)。seL4形式化驗(yàn)證相關(guān)論文。
其他的微內(nèi)核系統(tǒng):Fuchsia、Minix
Fuchsia是Google開發(fā)的一款全新操作系統(tǒng),試圖覆蓋手機(jī)、平板甚至筆記本等一系列領(lǐng)域。Google為該系統(tǒng)配備了Vulkan圖形接口、3D桌面渲染Scenic、Flutter應(yīng)用開發(fā)框架,還有一個(gè)稱為zircon的微內(nèi)核。
zircon內(nèi)核是從高通平臺(tái)的一個(gè)Bootloader項(xiàng)目:LittleKernel發(fā)展而來。zircon內(nèi)核屬于微內(nèi)核設(shè)計(jì),只提供IPC、進(jìn)程管理、地址空間管理功能。zircon區(qū)別于以進(jìn)程或者以文件為核心的設(shè)計(jì),zircon是以內(nèi)存為核心來設(shè)計(jì)的,內(nèi)存在zircon中是以對(duì)象的方式存在,可以通過channel通信機(jī)制傳遞虛擬內(nèi)存對(duì)象(Virtualmemoryobject)的句柄,進(jìn)程拿到句柄后可以把這塊內(nèi)存映射到自己的空間。
Minix系統(tǒng)則由荷蘭阿姆斯特丹的Vrije大學(xué)的AndrewS.Tanenbaum教授所開發(fā)。
該系統(tǒng)最大的特點(diǎn)是可以故障隔離,自動(dòng)重啟失敗的服務(wù)。
Minix使用分層設(shè)計(jì),最底層的微內(nèi)核提供中斷處理、進(jìn)程管理、進(jìn)程通信等服務(wù),這一層運(yùn)行在內(nèi)核態(tài);中間層提供輪回服務(wù)(ReincarnationServer)、文件服務(wù)、進(jìn)程管理、X圖形服務(wù)以及驅(qū)動(dòng)等,這一層運(yùn)行在用戶態(tài),最上層為用戶進(jìn)程。
其中輪回服務(wù)負(fù)責(zé)在中間層的服務(wù)出現(xiàn)崩潰時(shí)重啟這些服務(wù),從而保證服務(wù)的自我修復(fù)。Minix由于其自我修復(fù)特性被英特爾管理引擎(ME)所選用,該管理引擎主要負(fù)責(zé)管理英特爾芯片的內(nèi)部模塊。
-
微內(nèi)核架構(gòu)
+關(guān)注
關(guān)注
0文章
5瀏覽量
6539 -
微內(nèi)核
+關(guān)注
關(guān)注
0文章
57瀏覽量
13430
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論