文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1003-0492(2022)03-056-06 中圖分類號(hào):TP316
★王訓(xùn),周東紅(寧波和利時(shí)智能科技有限公司,浙江寧波315048)
摘要:工業(yè)物聯(lián)網(wǎng)領(lǐng)域的設(shè)備具有配置多樣的硬件環(huán)境特點(diǎn),這種“碎片化”的特征催生了對(duì)應(yīng)操作系統(tǒng)很強(qiáng)的伸縮性需求,以實(shí)現(xiàn)不同底層硬件和功能部件進(jìn)行抽象,對(duì)上層提供統(tǒng)一的編程接口,為工業(yè)物聯(lián)網(wǎng)打造良好生態(tài)環(huán)境提供基礎(chǔ)。
1 引言
工業(yè)物聯(lián)網(wǎng)系統(tǒng)中適配的操作系統(tǒng)特殊的使用場(chǎng)景決定了其除具備傳統(tǒng)操作系統(tǒng)的設(shè)備資源管理功能外,還具備下列功能:屏蔽工業(yè)物聯(lián)網(wǎng)碎片化的特征,提供統(tǒng)一的編程接口;工業(yè)物聯(lián)網(wǎng)生態(tài)環(huán)境培育;降低工業(yè)物聯(lián)網(wǎng)應(yīng)用開發(fā)的成本和時(shí)間;為工業(yè)物聯(lián)網(wǎng)統(tǒng)一管理奠定基礎(chǔ)。由此可見,工業(yè)物聯(lián)網(wǎng)操作系統(tǒng)對(duì)實(shí)現(xiàn)智能制造、智能工廠等當(dāng)前熱門領(lǐng)域均起著至關(guān)重要的作用。
對(duì)工業(yè)物聯(lián)網(wǎng)操作的技術(shù)要求包括:內(nèi)核尺寸伸縮性強(qiáng),能適應(yīng)不同配置的硬件平臺(tái);內(nèi)核實(shí)時(shí)性強(qiáng),以滿足關(guān)鍵應(yīng)用的需要;內(nèi)核架構(gòu)可擴(kuò)展性強(qiáng),且足夠安全和可靠;操作系統(tǒng)核心、設(shè)備驅(qū)動(dòng)程序或應(yīng)用程序均可遠(yuǎn)程升級(jí);支持文件系統(tǒng)和外部存儲(chǔ);支持遠(yuǎn)程配置、遠(yuǎn)程管理等維護(hù)功能;支持完善的網(wǎng)絡(luò)功能等。而微內(nèi)核架構(gòu)的操作系統(tǒng)可完全滿足上述應(yīng)用需求,故本文針對(duì)微內(nèi)核操作系統(tǒng)的技術(shù)發(fā)展及關(guān)鍵技術(shù)進(jìn)行深入研究。
2 微內(nèi)核操作系統(tǒng)技術(shù)發(fā)展
2.1 傳統(tǒng)操作系統(tǒng)介紹
目前常見的EMO S(嵌入式操作系統(tǒng))有幾十種,但很多數(shù)是在物聯(lián)網(wǎng)興起之前就有,隨著物聯(lián)網(wǎng)概念的提升,這些操作系統(tǒng)都宣稱加入了物聯(lián)網(wǎng)特性的支持,而專門針對(duì)物聯(lián)網(wǎng)全新研發(fā)的嵌入式操作系統(tǒng)還是剛剛起步。
目前主流的嵌入式實(shí)時(shí)操作系有:Linux及實(shí)時(shí)性或輕量化的變種、uCOS—II、FreeRTOS、eCos、VxWorks、Nucleus、ThreadX、QNX等。它們主要特點(diǎn)是面向控制、通信等領(lǐng)域的實(shí)時(shí)性,輕量化,可定制裁剪,部分安全。但很少有一個(gè)操作系統(tǒng)同時(shí)擁有上述所有特點(diǎn),比如具有強(qiáng)實(shí)時(shí)性的,可能安全性上有所減弱;具有安全特性的,可能在性能上做出犧牲等。
如今幾乎所有的操作系統(tǒng)都聲稱有一些物聯(lián)網(wǎng)連接功能,現(xiàn)有的操作系統(tǒng)大多數(shù)符合下列屬性:使用內(nèi)存少、電源效率高、模塊化可配置通信堆棧,對(duì)特定的無(wú)線和傳感器技術(shù)提供強(qiáng)有力的支持。一些項(xiàng)目注重物聯(lián)網(wǎng)安全,許多非Linux操作項(xiàng)目專注于實(shí)時(shí)確定性(Real-time Determinism),這也是工業(yè)物聯(lián)網(wǎng)的一個(gè)要求。
2.2 微內(nèi)核操作系統(tǒng)的發(fā)展歷程
內(nèi)核按照軟件架構(gòu)可以分為微內(nèi)核(Micro kernel)和宏內(nèi)核(Monolithic kernel)兩種概念。
微內(nèi)核結(jié)構(gòu)是由一個(gè)非常簡(jiǎn)單的硬件抽象層和一組比較關(guān)鍵的原語(yǔ)或系統(tǒng)調(diào)用組成。這些原語(yǔ),僅僅包括了建立一個(gè)系統(tǒng)必需的幾個(gè)部分,如線程管理、地址空間和進(jìn)程間通信等。微內(nèi)核的目標(biāo)是將系統(tǒng)服務(wù)的實(shí)現(xiàn)和系統(tǒng)的基本操作規(guī)則分離開來(lái)。例如,進(jìn)程的輸入/ 輸出鎖定服務(wù)可以由運(yùn)行在微內(nèi)核之外的一個(gè)服務(wù)組件 來(lái)提供。這些非常模塊化的用戶態(tài)服務(wù)器用于完成操作 系統(tǒng)中比較高級(jí)的操作,使最內(nèi)核部分的設(shè)計(jì)更簡(jiǎn)單。 一個(gè)服務(wù)組件的失效并不會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰,內(nèi)核 需要做的,僅僅是重新啟動(dòng)這個(gè)組件,而不必影響其它 的部分。微內(nèi)核將許多OS服務(wù)放入分離的進(jìn)程,如文件系統(tǒng)、設(shè)備驅(qū)動(dòng)程序,而進(jìn)程通過消息傳遞調(diào)用OS服務(wù)。
宏內(nèi)核架構(gòu)的特性是整個(gè)內(nèi)核程序都是以內(nèi)核空間(Kernel Space)的身份及監(jiān)管者模式(Supervisor Mode)來(lái)運(yùn)行。相對(duì)于其它類型的操作系統(tǒng)架構(gòu),如微內(nèi)核架構(gòu)或混內(nèi)核架構(gòu)等,會(huì)附加一些后臺(tái)服務(wù)以及系統(tǒng)調(diào)用,通過這種方式來(lái)實(shí)現(xiàn)各種操作系統(tǒng)服務(wù),如進(jìn)程管理、共時(shí)(Concurrency)控制、存儲(chǔ)器管理等。即使有的宏內(nèi)核將其運(yùn)作從整體性運(yùn)作拆分成幾個(gè)服務(wù)模塊,并讓各模塊各自運(yùn)作,其操作系統(tǒng)的代碼依然是高度緊密的,很難修改成其他類型的操作系統(tǒng)架構(gòu)。此外,所有的模塊也都在同一塊定址空間內(nèi)運(yùn)行,倘若某個(gè)模塊有錯(cuò)誤,運(yùn)行時(shí)就會(huì)損及整個(gè)操作系統(tǒng)運(yùn)行。Linux就是比較典型的宏內(nèi)核操作系統(tǒng)。
輕量化、可裁剪,適用于工業(yè)現(xiàn)場(chǎng)的穩(wěn)定性和安全性等指標(biāo),意味著微內(nèi)核架構(gòu)是個(gè)不錯(cuò)的選擇。
在微內(nèi)核剛興起時(shí),學(xué)術(shù)界普遍認(rèn)為其優(yōu)點(diǎn)是顯而易見的:
(1)支持更加模塊化的設(shè)計(jì);
(2)小的內(nèi)核更易于更新與維護(hù),bug會(huì)更少。正如大家知道Windows的死機(jī)很多是由D evice Drivers造成的。如果把它們移出內(nèi)核,它們中的bug很可能就不會(huì)造成死機(jī);
(3)許多模塊的bug可被封閉在其模塊內(nèi),更加易于調(diào)試。如果文件系統(tǒng)、內(nèi)存管理和設(shè)備驅(qū)動(dòng)成為一個(gè)個(gè)獨(dú)立的進(jìn)程,則會(huì)讓Kernel維護(hù)更加高效,也十分有利于縮短整個(gè)操作系統(tǒng)的研發(fā)時(shí)間。
基于上述原因,很多學(xué)術(shù)研究人員和軟件廠家開始嘗試使用微內(nèi)核的概念設(shè)計(jì)操作系統(tǒng)。第一代微內(nèi)核操作系統(tǒng)的代表作品是Mach,由卡內(nèi)基梅隆大學(xué)(CMU)設(shè)計(jì),Mach發(fā)布了2個(gè)版本,主要完成了以下工作:從概念上驗(yàn)證了微內(nèi)核技術(shù)的可行性;在多處理器計(jì)算機(jī)上進(jìn)行移植驗(yàn)證了微內(nèi)核在多處理器計(jì)算機(jī)上的運(yùn)行;使用共享內(nèi)存機(jī)制完成進(jìn)程間通信(InterProcess Communication,IPC),從而提高了IP C的效率。后期甚至微軟也有所動(dòng)作,在設(shè)計(jì)Windows NT時(shí),他們把UI (User Interface)從Windows kernel中整個(gè)拿了出來(lái)。但是這一熱潮很快就冷了下來(lái),原因就是性能問題。微軟在Windows NT后續(xù)版本中,又把部分底層UI放回了Windows kernelo正如在Java剛開始流行時(shí),由于其具有許多C/ C++沒有的優(yōu)點(diǎn),很多人認(rèn)為它會(huì)很快取代C/C++成為第一編程語(yǔ)言。但直至今天也沒有發(fā)生,其中一個(gè)重要原因就是Java程序的性能落后于C程序,至今還限制著它在許多場(chǎng)合的應(yīng)用。
第一代的微內(nèi)核操作系統(tǒng)的性能,包括Mach在內(nèi),遠(yuǎn)不及宏內(nèi)核操作系統(tǒng)。所以大多數(shù)人又回到傳統(tǒng)技術(shù)中去了。但在九十年代后期,微內(nèi)核迎來(lái)了其生命中的第二春。一些研究人員認(rèn)真分析了微內(nèi)核系統(tǒng)性能差的原因,指出其性能差并非由根本內(nèi)在的因素造成,而是設(shè)計(jì)實(shí)現(xiàn)的失誤。為證明其論點(diǎn),他們?cè)O(shè)計(jì)并實(shí)現(xiàn)了幾個(gè)性能遠(yuǎn)超第一代的微內(nèi)核操作系統(tǒng),我們把它們稱為第二代微內(nèi)核系統(tǒng)。其中的一個(gè)代表作品就是德國(guó)計(jì)算科學(xué)家Jochen Liedtke設(shè)計(jì)的L4OL4不再是傳統(tǒng)Unix操作系統(tǒng)的簡(jiǎn)單重構(gòu),而是一種全新的設(shè)計(jì)。L4微內(nèi)核高性能的關(guān)鍵就是使用了同步IPC技術(shù),并且使用寄存器傳遞消息,而不是內(nèi)存拷貝。基于L4微內(nèi)核,Jochen Liedtke提出了一種構(gòu)建服務(wù)器模式操作系統(tǒng)的方法,整個(gè)系統(tǒng)服務(wù)由一系列服務(wù)器組成,比如內(nèi)存管理服務(wù)器、文件系統(tǒng)服務(wù)器等,每個(gè)服務(wù)器在對(duì)外提供服務(wù)的同時(shí)也可以調(diào)用其他服務(wù)器提供的服務(wù)。
由于第二代微內(nèi)核設(shè)計(jì)為了追求高性能,線程ID是一種全局共享靜態(tài)資源,任何任務(wù)中的線程都可以通過線程ID向其他服務(wù)器線程發(fā)起服務(wù)請(qǐng)求,造成了安全上的隱患。第三代微內(nèi)核應(yīng)運(yùn)而生,引入了Capability機(jī)制。任何操作系統(tǒng)內(nèi)核對(duì)象,比如線程、中斷和內(nèi)存等,都不能直接進(jìn)行操作,而是通過一種類似對(duì)象引用的機(jī)制即Capability進(jìn)行調(diào)用。目前,比較經(jīng)典支持Capability機(jī)制的第三代微內(nèi)核seL40seL4是在第二代微內(nèi)核L4基礎(chǔ)上發(fā)展而來(lái),因而其不僅繼承了L4微內(nèi)核高性能的優(yōu)點(diǎn),還具備基于斷點(diǎn)的IPC機(jī)制。這種機(jī)制最大的特點(diǎn)就是使用了能力空間的概念,進(jìn)程在使用IPC請(qǐng)求系統(tǒng)服務(wù)時(shí)必須具備相對(duì)應(yīng)的能力,并持有不可偽造的令牌來(lái)表示擁有請(qǐng)求某種服務(wù)的能力。令牌可以被復(fù)制,可以被轉(zhuǎn)移,還可以通過IPC進(jìn)行傳輸oSeL4是一個(gè)操作系統(tǒng)微內(nèi)核,也就是說,seL4本身不是一個(gè)完整的操作系統(tǒng),它提供很有限的API,沒有提供像傳統(tǒng)的操作系統(tǒng)Linux那樣的內(nèi)存管理、頁(yè)內(nèi)外交換、驅(qū)動(dòng)程序等oSeL4微內(nèi)核設(shè)計(jì)針對(duì)實(shí)時(shí)應(yīng)用,可潛在應(yīng)用于強(qiáng)調(diào)安全和關(guān)鍵性任務(wù)的領(lǐng)域內(nèi),如軍用和醫(yī)療行業(yè)。研究發(fā)現(xiàn)常用的攻擊方法對(duì)seL4無(wú)效,如惡意程序經(jīng)常采用的緩存溢出漏洞。
正因?yàn)槲?nèi)核原生的諸多優(yōu)勢(shì),目前其內(nèi)核架構(gòu)越來(lái)越被人們重視,被認(rèn)為其是一種面對(duì)未來(lái)的操作系統(tǒng)架構(gòu)。互聯(lián)網(wǎng)巨頭公司,同時(shí)也是操作系統(tǒng)研發(fā)的龍頭公司Google,在其以Linux宏內(nèi)核為操作系統(tǒng)內(nèi)核開發(fā)的Android操作系統(tǒng)成功以后,它已經(jīng)在積極地開發(fā)全新內(nèi)核的操作系統(tǒng)fuchsia,這一操作系統(tǒng)將不再是Linux宏內(nèi)核系統(tǒng)的衍生版,而是真正意義上的微內(nèi)核操作系統(tǒng)。并且,它將是一款基于權(quán)能安全機(jī)制的操作系統(tǒng)。無(wú)獨(dú)有偶,國(guó)內(nèi)通信巨頭華為公司,在完成自主研發(fā)的處理器芯片麒麟系列以后,其自主研發(fā)的微內(nèi)核架構(gòu)操作系統(tǒng)鴻蒙系統(tǒng)也正式推向市場(chǎng)。從全球性公司研發(fā)目標(biāo)中可以看到,微內(nèi)核是被當(dāng)代各大全球性公司認(rèn)可的內(nèi)核架構(gòu),也是未來(lái)非常有前景的一種內(nèi)核架構(gòu),其發(fā)展將會(huì)越來(lái)越標(biāo)準(zhǔn)化0而且,據(jù)稱無(wú)論是fuchsia系統(tǒng)還是鴻蒙系統(tǒng)都將會(huì)大大發(fā)揮微內(nèi)核中內(nèi)核服務(wù)分離的優(yōu)勢(shì),它將在多種平臺(tái)上運(yùn)行,包括智能手機(jī)的嵌入式設(shè)備和個(gè)人PC,并且還將兼容Android系統(tǒng)上的各種應(yīng)用。這種高分離性是微內(nèi)核架構(gòu)的優(yōu)勢(shì),同時(shí)也是宏內(nèi)核架構(gòu)為何始終無(wú)法將PC和智能移動(dòng)終端進(jìn)行統(tǒng)一的一大原因。從宏內(nèi)核U NIX發(fā)展的起點(diǎn)——標(biāo)準(zhǔn)化和輕便型,到Google最終選擇摒棄宏內(nèi)核而使用微內(nèi)核來(lái)開發(fā)下一代全新操作系統(tǒng),不難看出,微內(nèi)核的思想是非常符合包括工業(yè)物聯(lián)網(wǎng)在內(nèi)的未來(lái)社會(huì)發(fā)展的需要。在未來(lái),微內(nèi)核發(fā)展有望開發(fā)出顛覆傳統(tǒng)操作系統(tǒng)環(huán)境,將PC、移動(dòng)智能終端以及嵌入式設(shè)備進(jìn)行統(tǒng)一的,具有跨時(shí)代意義的微內(nèi)核操作系統(tǒng)[1]。
3 微內(nèi)核操作系統(tǒng)關(guān)鍵技術(shù)解析
3.1 實(shí)時(shí)任務(wù)調(diào)度技術(shù)
為了滿足工業(yè)物聯(lián)網(wǎng)產(chǎn)品應(yīng)用需求,該微內(nèi)核操作系統(tǒng)支持兩種任務(wù)調(diào)度策略:基于優(yōu)先級(jí)的搶占式調(diào)度策略、時(shí)間片輪轉(zhuǎn)策略,并支持多級(jí)優(yōu)先級(jí)配置。
應(yīng)用任務(wù)可以通過接口創(chuàng)建另一個(gè)任務(wù),并設(shè)置該任務(wù)的優(yōu)先級(jí)。出于安全性考慮,當(dāng)一個(gè)任務(wù)創(chuàng)建另外一個(gè)任務(wù)時(shí),只能把另外一個(gè)任務(wù)優(yōu)先級(jí)設(shè)置不高于該任務(wù),即任務(wù)不能創(chuàng)建比自己優(yōu)先級(jí)還高的子任務(wù)。
基于優(yōu)先級(jí)的搶占式調(diào)度策略采用基于位圖的調(diào)度算法,該調(diào)度算法將每個(gè)任務(wù)的優(yōu)先級(jí)映射到了一個(gè)調(diào)度的二維表,該二維表用32個(gè)字節(jié)表示,每個(gè)字節(jié)8位,一共256位,共代表256個(gè)優(yōu)先級(jí),如圖1所示。
圖1 微內(nèi)核操作系統(tǒng)任務(wù)優(yōu)先級(jí)示意圖
將操作系統(tǒng)所有處于Ready狀態(tài)的任務(wù)按照上 述關(guān)系映射到該優(yōu)先級(jí)位圖中。操作系統(tǒng)在每次進(jìn) 行任務(wù)(假定其優(yōu)先級(jí)為prio)調(diào)度時(shí),首先從位圖 中選擇出優(yōu)先級(jí)最高的任務(wù),選擇過程通過上圖中 的ScheduleRdyGrp映射優(yōu)先級(jí)最高組Y,然后通過ScheduleRdyBitMap進(jìn)行映射確定在Y組中X列中的最高 優(yōu)先級(jí)。任務(wù)就緒時(shí)需要計(jì)算其對(duì)應(yīng)的ScheduleRdyGrp和ScheduleRdyTbl[n]值,其具體算法為:ScheduleRdyGrp |= ScheduleRdyBitMap[prio>>3]; ScheduleRdyTbl[prio>>3] |= ScheduleRdyBitMap[prio&0x07]; 上面所述的X、Y映射關(guān)系表OSPriHighMap,偽 代碼如圖2所示。
圖2 微內(nèi)核操作系統(tǒng)基于位圖的優(yōu)先級(jí)映射關(guān)系
這樣無(wú)論系統(tǒng)負(fù)載高低,都能夠使系統(tǒng)任務(wù)調(diào)度切換時(shí)間復(fù)雜度相同,從而提高系統(tǒng)調(diào)度的確定性。查詢?nèi)蝿?wù)就緒態(tài)下的優(yōu)先級(jí)可以最終抽象為如下表示。對(duì)于相同優(yōu)先級(jí)的任務(wù)進(jìn)行采用輪轉(zhuǎn)調(diào)度算法,每個(gè)優(yōu)先級(jí)任務(wù)對(duì)應(yīng)一組任務(wù)隊(duì)列,依次進(jìn)行輪轉(zhuǎn)調(diào)度。
Y = OSPriHighMap[ScheduleRdyGrp];
X = OSPriHighMap[ScheduleRdyTbl[Y]];
prio = Y<<3 + X;
3.2 進(jìn)程間高效IP C通信技術(shù)
為了解決進(jìn)程間通信效率問題,微內(nèi)核操作系統(tǒng)設(shè)計(jì)了一種基于用戶空間共享內(nèi)存的進(jìn)程間通信機(jī)制,該機(jī)制采用進(jìn)程間內(nèi)存授權(quán)管理的方法,建立了高效的消息隊(duì)列、事件、信號(hào)量通信機(jī)制。通過該技術(shù)的應(yīng)用,能夠有效避免進(jìn)程通信過程中內(nèi)核空間與用戶空間切換頻繁問題,并提升進(jìn)程間通信安全性。
seL4微內(nèi)核提供了線程間傳遞消息的機(jī)制,這個(gè)機(jī)制也用來(lái)傳遞用戶程序與內(nèi)核提供的服務(wù)之間的通信。消息被傳送到同步或異步IPC端點(diǎn),這些端點(diǎn)由其它線程約定,其它消息類型由內(nèi)核[2]。
每個(gè)消息包含一些消息字,還可以包含一些句柄。消息的傳遞是盡量通過通用寄存器來(lái)完成,但是硬件平臺(tái)的通用寄存器的數(shù)量是十分有限的,在寄存器放不下的就要放到被稱為IPC緩存(IPC buffer)的內(nèi)存中,每個(gè)線程控制塊有一個(gè)IPC通信用的緩存區(qū)buffer,用來(lái)在IPC或內(nèi)核對(duì)象調(diào)用時(shí)傳遞額外的參數(shù),所謂額外的參數(shù),即無(wú)法存儲(chǔ)在寄存器里的數(shù)據(jù),不同的平臺(tái)可以使用的寄存器不同,所以這個(gè)定義與平臺(tái)相關(guān)。每個(gè)IPC消息包含一個(gè)標(biāo)識(shí),其數(shù)據(jù)結(jié)構(gòu)包含標(biāo)簽label、消息長(zhǎng)度length、句柄數(shù)量extraCaps、接收句柄capsUnwrapped等4個(gè)字段。消息的長(zhǎng)度和句柄的數(shù)量決定了消息寄存器的使用及發(fā)送線程想要傳遞的句柄的數(shù)量。內(nèi)核不解釋label字段°label字段只是被當(dāng)作消息的第一個(gè)數(shù)據(jù)被傳送。用戶程序可以對(duì)label字段進(jìn)行自定義°capsUnwrapped字段只被接收方使用,用來(lái)指明哪個(gè)句柄被接收。
同步端點(diǎn)允許少量的數(shù)據(jù)及句柄在線程間同步傳遞。所謂同步,即信息發(fā)出去后發(fā)送者要等待應(yīng)答。如果發(fā)送者不是要發(fā)送的狀態(tài),而且接收者正好處于接收狀態(tài),這個(gè)消息就不被傳遞。如果發(fā)出IP C同步請(qǐng)求,沒有接收者準(zhǔn)備好,則阻塞,排隊(duì)等待,直到有接收者,則消息發(fā)送給第一個(gè)準(zhǔn)備好了的接收者。如果發(fā)出等待請(qǐng)求給內(nèi)核,但沒有線程向它發(fā)消息,則阻塞并排隊(duì)等待請(qǐng)求,直到有發(fā)送者,就接收第一個(gè)發(fā)送者的消息。同步消息中可以有句柄,消息中的句柄必須有Grant權(quán)限,沒有Grant權(quán)限的句柄,不會(huì)隨消息的傳遞而傳遞。句柄存在于消息的caps字段,caps中的每一項(xiàng)被當(dāng)作CPTR解釋為線程句柄空間中的一個(gè)句柄。消息中句柄的數(shù)量存于消息標(biāo)記(message tag)中的extraCaps字段中。基本的IPC概念是端點(diǎn)(EndPoint)之間的任務(wù)。端點(diǎn)是一個(gè)內(nèi)核對(duì)象,其中包含了一個(gè)線程隊(duì)列和一個(gè)狀態(tài)(state)標(biāo)志,該標(biāo)志用來(lái)記錄隊(duì)列中的線程是處于要發(fā)送(Send)消息的狀態(tài),還是處于等待接收消息(Wait)的狀態(tài)。它扮演了一個(gè)“一個(gè)或多個(gè)發(fā)送者”與“一個(gè)或多個(gè)接收者”之間單向通信的作用。這個(gè)全局的標(biāo)識(shí)符是不暴露給參與IPC的各方的,無(wú)論是發(fā)送者,還是接收者,都是使用一個(gè)本地端點(diǎn)地址來(lái)工作。一個(gè)端點(diǎn)上,可能有多個(gè)線程用來(lái)發(fā)送或接收消息。當(dāng)一個(gè)線程對(duì)調(diào)用端點(diǎn)發(fā)送與接收消息時(shí),內(nèi)核將扮演在它們之間傳遞消息的角色。沒有伙伴的線程,即僅有發(fā)送任務(wù)無(wú)接收任務(wù),或僅有接收任務(wù)無(wú)發(fā)送任務(wù),將被掛起(suspend),算法中并未規(guī)定,哪些線程首先被喚醒(resume),一般是先進(jìn)先出(FIFO)。
異步端點(diǎn)(Asynchronous EndPoint,AsyncEP)允許非阻塞異步發(fā)送消息,但異步消息中不能有句柄。
因?yàn)橥粫r(shí)間一個(gè)端點(diǎn)(EndPoint)只能接收一個(gè)消息,而一個(gè)服務(wù)者希望為N個(gè)客戶端提供服務(wù),于是每個(gè)客戶端都拿到了這個(gè)端點(diǎn)的一個(gè)引用,內(nèi)核提供了一個(gè)標(biāo)記(badge)的辦法,有標(biāo)記的句柄就是標(biāo)記句柄(badged endpoint capability)。每個(gè)標(biāo)記由產(chǎn)生它的服務(wù)線程(Server)定義,因?yàn)檫@個(gè)句柄就是服務(wù)線程通過C Node_Mint()之類的手段得到的。
在一些應(yīng)用場(chǎng)景中,一個(gè)動(dòng)作涉及到多個(gè)請(qǐng)求方,如果這時(shí)權(quán)限符合配置策略規(guī)則,這些請(qǐng)求任務(wù)就會(huì)同時(shí)發(fā)出同樣的消息,可是,只有一個(gè)句柄是接收方所調(diào)用的,所以作為接收者,當(dāng)接通收到消息后,要檢査一下標(biāo)記,看是哪個(gè)請(qǐng)求方標(biāo)識(shí)。也就是作為服務(wù)接收者在解析服務(wù)請(qǐng)求時(shí),要通過標(biāo)記的方式檢査一下來(lái)源,檢測(cè)消息發(fā)送者的合法性。內(nèi)核提供了標(biāo)識(shí)(identify)系統(tǒng),可以通過査看標(biāo)識(shí)的方式追溯消息來(lái)源。
3.3 安全內(nèi)存管理技術(shù)
為了解決工業(yè)嵌入式產(chǎn)品軟件內(nèi)存異常帶來(lái)的安全故障問題,在微內(nèi)核操作系統(tǒng)軟件架構(gòu)中利用內(nèi)存管理單元硬件,建立內(nèi)核與用戶內(nèi)存空間隔離的管理機(jī)制。該機(jī)制能夠?qū)?nèi)核空間與用戶所占用的內(nèi)存空間、用戶空間的進(jìn)程與進(jìn)程之間內(nèi)存隔離。經(jīng)驗(yàn)證測(cè)試,該技術(shù)能夠有效解決某一軟件模塊內(nèi)存溢出所帶來(lái)的整體系統(tǒng)內(nèi)存數(shù)據(jù)故障問題,從而提高內(nèi)存管理的安全性。
微內(nèi)核架構(gòu)下不為內(nèi)核對(duì)象動(dòng)態(tài)分配內(nèi)存,內(nèi)核對(duì)象必須在用戶程序控制的內(nèi)存區(qū)中通過U ntyped Memory句柄創(chuàng)建。這個(gè)機(jī)制可以顯式地控制應(yīng)用程序能夠使用的內(nèi)存數(shù)量,提供應(yīng)用程序間的內(nèi)存隔離。在系統(tǒng)啟動(dòng)的時(shí)候,先預(yù)申請(qǐng)一塊內(nèi)存給內(nèi)存用,包括代碼、數(shù)據(jù)、棧等段。余下的內(nèi)存留給初始化線程,初始線程啟動(dòng)時(shí),還有一些其它的內(nèi)核句柄傳給它。新創(chuàng)建的原始內(nèi)存對(duì)象都是最初的這個(gè)原始內(nèi)存對(duì)象的子對(duì)象。用戶態(tài)程序利用Untyped_Retype()創(chuàng)建對(duì)象,得到的是句柄,通過這個(gè)句柄進(jìn)行后續(xù)操作。把虛擬地址管理、虛實(shí)映射管理、物理內(nèi)存(原始內(nèi)存)管理等分開,每一部分都允許應(yīng)用程序自己決定如何使用的內(nèi)存管理策略,對(duì)于應(yīng)用程序申請(qǐng)內(nèi)核對(duì)象,在客戶程序間分享授權(quán)信息。內(nèi)核也提供原始內(nèi)存重用機(jī)制,重用一段內(nèi)存區(qū)域是允許的,但要求那段原始內(nèi)存上沒有搖擺的引用,即沒有別的句柄指向這段內(nèi)存空間,跟蹤對(duì)象的引用、繼承關(guān)系。其不允許頁(yè)表共享,但允許頁(yè)共享。
內(nèi)核啟動(dòng)過程建立虛擬地址與物理地址的映射關(guān)系。以ZYNQ7000芯片為例,操作系統(tǒng)內(nèi)核建立的地址映射關(guān)系如圖3所示。
圖3 微內(nèi)核操作系統(tǒng)虛擬地址與物理地理映射實(shí)例
線程(Thread)是程序執(zhí)行單位,程序通過管理線程來(lái)管理CPU時(shí)間及程序執(zhí)行的上下文環(huán)境。線程管理數(shù)據(jù)結(jié)構(gòu)是線程控制塊(Thread Control Block, TCB)。每個(gè)線程控制塊都有一個(gè)句柄空間cspace和虛擬地址空間vspace與之關(guān)聯(lián)。虛擬地址空間vspace可以同時(shí)被多個(gè)線程共享°vspace分配虛擬內(nèi)存時(shí),首先選擇一個(gè)合適的虛擬地址,然后找到一塊合適的物理內(nèi)存,接下來(lái)標(biāo)記物理內(nèi)存被使用,然后將虛擬地址返回給用戶ovspace實(shí)現(xiàn)的虛擬內(nèi)存,類似于Linux系統(tǒng)的虛擬內(nèi)存映射(mmap),所以當(dāng)申請(qǐng)的空間小于4kB時(shí)會(huì)分配4kB空間。
微內(nèi)核操作系統(tǒng)的內(nèi)存共享是基于頁(yè)的,要共享頁(yè)必須將頁(yè)加入對(duì)應(yīng)程序的頁(yè)表。一個(gè)頁(yè)被N個(gè)程序加入自己的頁(yè)表,這個(gè)頁(yè)就是共享內(nèi)存。cspace用于創(chuàng)建每個(gè)內(nèi)核對(duì)象對(duì)應(yīng)的句柄空間。每個(gè)內(nèi)核對(duì)象必須對(duì)應(yīng)一個(gè)句柄空間,每次創(chuàng)建內(nèi)核對(duì)象,必須先分配句柄空間,App隨后創(chuàng)建并初始化alloc.cspace。
4 典型應(yīng)用
和利時(shí)集團(tuán)基于微內(nèi)核架構(gòu)已經(jīng)設(shè)計(jì)出自己的面向工業(yè)物聯(lián)網(wǎng)的微內(nèi)核操作系統(tǒng),并成功應(yīng)用于公司的DCS、SIS、PLC、MC等系列產(chǎn)品,目前已經(jīng)支持了ARM.MIPS.POWERP等主流嵌入式處理器平臺(tái),并分別在基于ZYNQ7000系列芯片、龍芯2K1000系列芯片、MPC83XX系列芯片的控制器硬件基礎(chǔ)上,完成了操作系統(tǒng)的開發(fā)與驗(yàn)證測(cè)試工作。
具體的微內(nèi)核操作系統(tǒng)的設(shè)計(jì)方案如圖4所示。
圖4 基于微內(nèi)核操作系統(tǒng)的應(yīng)用開發(fā)分層圖
5 結(jié)論
本文通過研究微內(nèi)核操作系統(tǒng)的技術(shù)發(fā)展過程及關(guān)鍵技術(shù),得出其具備易于擴(kuò)充、易于移植、可提高系統(tǒng)的可靠性、提供多種操作環(huán)境、適宜于分布式計(jì)算、有助于多處理器系統(tǒng)的實(shí)現(xiàn)、支持實(shí)時(shí)服務(wù)等特點(diǎn),因此其是當(dāng)前完全適用于工業(yè)物聯(lián)網(wǎng)應(yīng)用場(chǎng)景的輕量級(jí)操作系統(tǒng)。
作者簡(jiǎn)介:
王訓(xùn)(1983-),男,北京人,高級(jí)工程師,學(xué)士,現(xiàn)就職于寧波和利時(shí)智能科技有限公司,主要研究方向?yàn)楣I(yè)自動(dòng)化軟件。
周東紅(1970-),男,浙江東陽(yáng)人,高級(jí)工程師,博士,現(xiàn)就職于寧波和利時(shí)智能科技有限公司,主要研究方向?yàn)楣I(yè)自動(dòng)化控制及工業(yè)物聯(lián)網(wǎng)。
參考文獻(xiàn):
[1]彭星海.基于X86架構(gòu)的微內(nèi)核操作系統(tǒng)的研究和實(shí)現(xiàn)[D].成都:電子科技大學(xué),2020.
[2]林禹清.面向控制領(lǐng)域的微內(nèi)核系統(tǒng)服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2019.
[3]錢振江.微內(nèi)核架構(gòu)內(nèi)存管理的形式化設(shè)計(jì)和驗(yàn)證方法研究[J].電子學(xué)報(bào),2017, 45⑴:251 -256.
摘自《自動(dòng)化博覽》2022年第三期