微內(nèi)核操作系統(tǒng)(Microkernel Operating System)結(jié)構(gòu),是20世紀80年代后期發(fā)展起來的。由于它能有效地支持多處理機運行,故非常適用于分布式系統(tǒng)環(huán)境。
當前比較流行的、能支持多處理機運行的操作系統(tǒng),幾乎全部都采用了微內(nèi)核結(jié)構(gòu),如卡耐基梅隆大學研制的Mach OS,便屬于微內(nèi)核結(jié)構(gòu)操作系統(tǒng);又如當前廣泛使用的Windows操作系統(tǒng),也采用了微內(nèi)核結(jié)構(gòu)。
那么,問題來了,嵌入式領(lǐng)域的RTOS屬于微內(nèi)核操作系統(tǒng)嗎?
要想搞明白這個問題,首先你要了解什么是是微內(nèi)核操作系統(tǒng)。
1.微內(nèi)核操作系統(tǒng)的基本概念
為了提高操作系統(tǒng)的“正確性”、“靈活性”、“易維護性”和”可擴充性”,在進行現(xiàn)代操作系統(tǒng)結(jié)構(gòu)設(shè)計時,即使在單處理機環(huán)境下,大多也采用基于客戶/服務器模式(即C/S模式)的微內(nèi)核結(jié)構(gòu),將操作系統(tǒng)劃分為兩大部分:微內(nèi)核和多個服務器。
至于什么是微內(nèi)核操作系統(tǒng)結(jié)構(gòu),現(xiàn)在尚無一致公認的定義,但我們可以從下面四個方面,對微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)進行描述。
1) 足夠小的內(nèi)核
在微內(nèi)核操作系統(tǒng)中,內(nèi)核是指精心設(shè)計的、能實現(xiàn)現(xiàn)代OS最基本的核心功能的部分。
微內(nèi)核并非是一個完整的OS,而只是操作系統(tǒng)中最基本的部分,它通常用于:
① 實現(xiàn)與硬件緊密相關(guān)的處理;
② 實現(xiàn)一些較基本的功能;
③ 負責客戶和服務器之間的通信。
它們只是為構(gòu)建通用OS提供一個重要基礎(chǔ),這樣就可以確保把操作系統(tǒng)內(nèi)核做得很小。
2) 基于客戶/服務器模式
由于客戶/服務器(Client/Server)模式,具有非常多的優(yōu)點,故在單機微內(nèi)核操作系統(tǒng)中幾乎無一例外地都采用客戶/服務器模式,將操作系統(tǒng)中最基本的部分放入內(nèi)核中,而把操作系統(tǒng)的絕大部分功能都放在微內(nèi)核外面的一組服務器(進程)中實現(xiàn)。例如用于提供對進程(線程)進行管理的進程(線程)服務器,提供虛擬存儲器管理功能的虛擬存儲器服務器,提供I/O設(shè)備管理的I/O設(shè)備管理服務器等,它們都是被作為進程來實現(xiàn)的,運行在用戶態(tài),客戶與服務器之間是借助微內(nèi)核提供的消息傳遞機制來實現(xiàn)信息交互的。
3) 應用“機制與策略分離”原理
在現(xiàn)代操作系統(tǒng)的結(jié)構(gòu)設(shè)計中,經(jīng)常利用“機制與策略分離”的原理來構(gòu)造OS結(jié)構(gòu)。所謂機制,是指實現(xiàn)某一功能的具體執(zhí)行機構(gòu)。而策略,則是在機制的基礎(chǔ)上,借助于某些參數(shù)和算法來實現(xiàn)該功能的優(yōu)化,或達到不同的功能目標。通常,機制處于一個系統(tǒng)的基層,而策略則處于系統(tǒng)的高層。在傳統(tǒng)的OS中,將機制放在OS的內(nèi)核的較低層,把策略放在內(nèi)核的較高層次中。而在微內(nèi)核操作系統(tǒng)中,通常將機制放在OS的微內(nèi)核中。正因為如此,才有可能將內(nèi)核做得很小。
4) 采用面向?qū)ο蠹夹g(shù)
操作系統(tǒng)是一個極其復雜的大型軟件系統(tǒng),我們不僅可以通過結(jié)構(gòu)設(shè)計來分解操作系統(tǒng)的復雜度,還可以基于面向?qū)ο蠹夹g(shù)中的“抽象”和“隱蔽”原則控制系統(tǒng)的復雜性,再進一步利用“對象”、“封裝和“繼承”等概念來確保操作系統(tǒng)的“正確性”、“可靠性”、“易修改性”、“易擴展性”等,并提高操作系統(tǒng)的設(shè)計速度。正因為面向?qū)ο蠹夹g(shù)能帶來如此多的好處,故面向?qū)ο蠹夹g(shù)被廣泛應用于現(xiàn)代操作系統(tǒng)的設(shè)計中。
2.微內(nèi)核的基本功能
1) 進程(線程)管理
大多數(shù)的微內(nèi)核OS,對于進程管理功能的實現(xiàn),都采用“機制與策略分離”的原理。例如,為實現(xiàn)進程(線程)調(diào)度功能,須在進程管理中設(shè)置一個或多個進程(線程)優(yōu)先級隊列;能將指定優(yōu)先級進程(線程)從所在隊列中取出,并將其投入執(zhí)行。由于這一部分屬于調(diào)度功能的機制部分,應將它放入微內(nèi)核中。應如何確定每類用戶(進程)的優(yōu)先級,以及應如何修改它們的優(yōu)先級等,都屬于策略問題,可將它們放入微內(nèi)核外的進程(線程)管理服務器中。
2) 低級存儲器管理
通常在微內(nèi)核中,只配置最基本的低級存儲器管理機制。如用于實現(xiàn)將用戶空間的邏輯地址變換為內(nèi)存空間的物理地址的頁表機制和地址變換機制,這一部分是依賴于機器的,因此放入微內(nèi)核。而實現(xiàn)虛擬存儲器管理的策略,則包含應采取何種頁面置換算法,采用何種內(nèi)存分配與回收策略等,應將這部分放在微內(nèi)核外的存儲器管理服務器中去實現(xiàn)。
3) 中斷和陷入處理
大多數(shù)微內(nèi)核操作系統(tǒng)都是將與硬件緊密相關(guān)的一小部分放入微內(nèi)核中處理。此時微內(nèi)核的主要功能,是捕獲所發(fā)生的中斷和陷入事件,并進行相應的前期處理。如進行中斷現(xiàn)場保護,識別中斷和陷入的類型,然后將有關(guān)事件的信息轉(zhuǎn)換成消息后,把它發(fā)送給相關(guān)的服務器。由服務器根據(jù)中斷或陷入的類型,調(diào)用相應的處理程序來進行后期處理。
在微內(nèi)核OS中是將進程管理、存儲器管理以及I/O管理這些功能一分為二,屬于機制的很小一部分放入微內(nèi)核中,另外絕大部分放在微內(nèi)核外的各種服務器中來實現(xiàn)。事實上,其中大多數(shù)服務器都比微內(nèi)核大。這進一步說明了為什么能在采用客戶/服務器模式后,還能把微內(nèi)核做得很小的原因。
3.微內(nèi)核操作系統(tǒng)的優(yōu)點
1) 提高了系統(tǒng)的可擴展性
由于微內(nèi)核OS的許多功能是由相對獨立的服務器軟件來實現(xiàn)的,當開發(fā)了新的硬件和軟件時,微內(nèi)核OS只須在相應的服務器中增加新的功能,或再增加一個專門的服務器。與此同時,也必然改善系統(tǒng)的靈活性,不僅可在操作系統(tǒng)中增加新的功能,還可修改原有功能,以及刪除已過時的功能,以形成一個更為精干有效的操作系統(tǒng)。
2) 增強了系統(tǒng)的可靠性
這一方面是由于微內(nèi)核是出于精心設(shè)計和嚴格測試的,容易保證其正確性;另一方面是它提供了規(guī)范而精簡的應用程序接口(API),為微內(nèi)核外部的程序編制高質(zhì)量的代碼創(chuàng)造了條件。此外,由于所有服務器都是運行在用戶態(tài),服務器與服務器之間采用的是消息傳遞通信機制,因此,當某個服務器出現(xiàn)錯誤時,不會影響內(nèi)核,也不會影響其它服務器。
3) 可移植性
隨著硬件的快速發(fā)展,出現(xiàn)了各種各樣的硬件平臺,作為一個好的操作系統(tǒng),必須具備可移植性,使其能較容易地運行在不同的計算機硬件平臺上。在微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)中,所有與特定CPU和I/O設(shè)備硬件有關(guān)的代碼,均放在內(nèi)核和內(nèi)核下面的硬件隱藏層中,而操作系統(tǒng)其它絕大部分(即各種服務器)均與硬件平臺無關(guān),因而,把操作系統(tǒng)移植到另一個計算機硬件平臺上所需作的修改是比較小的。
4) 提供了對分布式系統(tǒng)的支持
由于在微內(nèi)核OS中,客戶和服務器之間以及服務器和服務器之間的通信,是采用消息傳遞通信機制進行的,致使微內(nèi)核OS能很好地支持分布式系統(tǒng)和網(wǎng)絡系統(tǒng)。事實上,只要在分布式系統(tǒng)中賦予所有進程和服務器惟一的標識符,在微內(nèi)核中再配置一張系統(tǒng)映射表(即進程和服務器的標識符與它們所駐留的機器之間的對應表),在進行客戶與服務器通信時,只需在所發(fā)送的消息中標上發(fā)送進程和接收進程的標識符,微內(nèi)核便可利用系統(tǒng)映射表,將消息發(fā)往目標,而無論目標是駐留在哪臺機器上。
5) 融入了面向?qū)ο蠹夹g(shù)
在設(shè)計微內(nèi)核OS時,采用了面向?qū)ο蟮募夹g(shù),其中的“封裝”,“繼承”,“對象類”和“多態(tài)性”,以及在對象之間采用消息傳遞機制等,都十分有利于提高系統(tǒng)的“正確性”、“可靠性”、“易修改性”、“易擴展性”等,而且還能顯著地減少開發(fā)系統(tǒng)所付出的開銷。
4.微內(nèi)核操作系統(tǒng)存在的問題
應當指出,在微內(nèi)核OS中,由于采用了非常小的內(nèi)核,以及客戶/服務器模式和消息傳遞機制,這些雖給微內(nèi)核OS帶來了許多優(yōu)點,但由此也使微內(nèi)核OS存在著潛在的缺點。其中最主要的是,較之早期OS,微內(nèi)核OS的運行效率有所降低。
效率降低的最主要的原因是,在完成一次客戶對OS提出的服務請求時,需要利用消息實現(xiàn)多次交互和進行用戶/內(nèi)核模式及上下文的多次切換。然而,在早期的OS中,用戶進程在請求取得OS服務時,一般只需進行兩次上下文的切換:一次是在執(zhí)行系統(tǒng)調(diào)用后,由用戶態(tài)轉(zhuǎn)向系統(tǒng)態(tài)時;另一次是在系統(tǒng)完成用戶請求的服務后,由系統(tǒng)態(tài)返回用戶態(tài)時。在微內(nèi)核OS中,由于客戶和服務器及服務器和服務器之間的通信,都需通過微內(nèi)核,致使同樣的服務請求至少需要進行四次上下文切換。第一次是發(fā)生在客戶發(fā)送請求消息給內(nèi)核,以請求取得某服務器特定的服務時;第二次是發(fā)生在由內(nèi)核把客戶的請求消息發(fā)往服務器時;第三次是當服務器完成客戶請求后,把響應消息發(fā)送到內(nèi)核時;第四次是在內(nèi)核將響應消息發(fā)送給客戶時。
實際情況是往往還會引起更多的上下文切換。例如,當某個服務器自身尚無能力完成客戶請求,而需要其它服務器的幫助時,其中的文件服務器還需要磁盤服務器的幫助,這時就需要進行八次上下文的切換。
審核編輯:黃飛
?
評論