基于靈活內(nèi)核的構(gòu)件化驅(qū)動程序

字號:

1 操作系統(tǒng)體系結(jié)構(gòu)的爭論
     一般而言操作系統(tǒng)提供兩種功能 [2] :⒈有系統(tǒng)地在互相競爭的進(jìn)程之間分配計算機資源;⒉作為計算機的擴展,提供功能強大的編程環(huán)境和應(yīng)用環(huán)境。由于計算機硬件的快速發(fā)展和用戶要求的提高,操作系統(tǒng)的復(fù)雜性與日俱增,系統(tǒng)的體系結(jié)構(gòu)對系統(tǒng)性能的影響也越來越明顯。
     關(guān)于操作系統(tǒng)體系結(jié)構(gòu)的討論一直沒有停息過,大多數(shù)的操作系統(tǒng)采用兩種體系結(jié)構(gòu)之一:一個是整體內(nèi)核 (Monolithic kernel or Macro-kernel) 操作系統(tǒng),另一個是微內(nèi)核 (Micro-kernel) 操作系統(tǒng)。
     1.1 整體內(nèi)核操作系統(tǒng)
     整體內(nèi)核操作系統(tǒng)有如下特征:操作系統(tǒng)功能定義模塊,系統(tǒng)服務(wù)和驅(qū)動程序都在內(nèi)核空間,分別定義成不同的功能模塊;任何模塊可以遵循特定的接口規(guī)范來調(diào)用其它模塊;所有模塊必須連接在一起,形成一個可執(zhí)行文件,使用時整個文件都應(yīng)完整裝載到計算機的內(nèi)存中;所有模塊都運行于超級用戶的模式下,可直接取用計算機的硬件資源;應(yīng)用程序若要取用這種資源,如掃描儀,它需要執(zhí)行系統(tǒng)調(diào)用,請求一個系統(tǒng)模塊幫它獲取相應(yīng)的資源。這里的系統(tǒng)調(diào)用實際上是這樣做的:首先將計算機切換到超級用戶模式,然后進(jìn)入操作系統(tǒng)的某個模塊。傳統(tǒng)的操作系統(tǒng)都是整體內(nèi)核的,例如 Microsoft DOS , Linux , Unix , Windows95 等。
     1.2 微內(nèi)核操作系統(tǒng) [5]
     微內(nèi)核是從功能上說,它由操作系統(tǒng)最基礎(chǔ)的抽象模塊構(gòu)成的,整體內(nèi)核系統(tǒng)中包含的許多系統(tǒng)服務(wù)以及驅(qū)動程序都被放在了核外,核內(nèi)一般只包括進(jìn)程管理、 I/O 處理、內(nèi)存管理、進(jìn)程間通訊等。 MACH 是非常典型的微內(nèi)核系統(tǒng), MACH 的核內(nèi)包括的抽象功能模塊有任務(wù),線程,內(nèi)存對象,消息和端口,它們提供了管理和處理虛擬內(nèi)存,調(diào)度和進(jìn)程間通信的機制。模塊化的特點使 MACH 擁有可裁剪性,可擴展性,可移植性等良好特性,而這些特性是整體內(nèi)核操作系統(tǒng)很難具備的。除了 MACH 之外,微內(nèi)核操作系統(tǒng)還有 QNX 、 MINIX 、 CHORUS 、 AMORBA 等。
     2 微內(nèi)核系統(tǒng)和整體內(nèi)核系統(tǒng)的比較
     簡而言之,微內(nèi)核將操作系統(tǒng)的許多服務(wù)移到了用戶空間,而傳統(tǒng)的操作系統(tǒng)通常是將其放在核內(nèi)的,這對系統(tǒng)的性能產(chǎn)生了顯著的影響。微內(nèi)核系統(tǒng)和整體內(nèi)核系統(tǒng)比較具有以下優(yōu)點:
     魯棒性 (Robustness) 微內(nèi)核系統(tǒng)將許多系統(tǒng)服務(wù)放到用戶空間,由于這些服務(wù)程序是運行在完全獨立的內(nèi)存空間中 ( 當(dāng)然這里不包括內(nèi)核級的服務(wù)程序 ) ,程序本身存在的 BUG 和不可預(yù)知的錯誤就不會那么容易導(dǎo)致內(nèi)核的崩潰。
     安全性 (Security) 微內(nèi)核系統(tǒng)的許多模塊獨立地運行于核外,因此可以以模塊為單位把安全問題分解,使得系統(tǒng)服務(wù)程序嚴(yán)格按照安全要求運行,而不是“隨心所欲”。
     可配置性 (Configurability) 一般微內(nèi)核系統(tǒng)中的服務(wù)程序可以在整個系統(tǒng)不重新啟動的情況下被更換,這一點對于整體內(nèi)核的操作系統(tǒng)是難以實現(xiàn)的。
     易于編程 內(nèi)核中的代碼通常需要使用特殊的內(nèi)存分配和輸入輸出等例行程序,用戶態(tài)的代碼要比核態(tài)的代碼容易編寫,它無須去考慮內(nèi)核特定的一些限制。
     降低內(nèi)存的固定使用量 分配給內(nèi)核的內(nèi)存 ( 代碼和數(shù)據(jù) ) 一般地說必須駐留在內(nèi)存中,不允許被交換出內(nèi)存。被移到用戶空間的核態(tài)代碼越多,內(nèi)核常駐內(nèi)存的程序量就越少,移到核外的系統(tǒng)服務(wù)程序只有在被用到時才會裝入內(nèi)存。
     實時性能 系統(tǒng)運行于核態(tài)時,為了防止打斷一些臨界處理,會暫時禁止中斷。內(nèi)核中的代碼越少,禁止中斷的機會就越少。
     可擴展性 (extensibility) 在微內(nèi)核系統(tǒng)中添加系統(tǒng)模塊就像編寫用戶程序一樣簡單,只要它遵從系統(tǒng)提供的設(shè)計接口,而整體內(nèi)核系統(tǒng)添加模塊首先需要你對操作系統(tǒng)內(nèi)部工作機制有一定的了解,在編寫好模塊程序之后,還需要重新編譯內(nèi)核,以便把添加的模塊連接到內(nèi)核中去。
     前面提到的都是微內(nèi)核系統(tǒng)的進(jìn)步之處,當(dāng)然微內(nèi)核系統(tǒng)也并非完美無缺,微內(nèi)核系統(tǒng)和整體內(nèi)核系統(tǒng)相比也有不足之處:
     微內(nèi)核規(guī)模并不小 大多數(shù)微內(nèi)核系統(tǒng)的內(nèi)核規(guī)模并不小,盡管“微內(nèi)核”的名字讓人產(chǎn)生這種錯覺。 QNX 操作系統(tǒng)是一個例外,如果內(nèi)核做得很大相應(yīng)系統(tǒng)的 RAM 使用量就會有所增長;
     效率的缺失 將許多系統(tǒng)的服務(wù)置于核外,就需要給這些服務(wù)程序之間提供相應(yīng)形式化的消息傳遞機制 (Message Passing Interface or Remote Procedure Call) 。在整體內(nèi)核操作系統(tǒng)中,不同的系統(tǒng)服務(wù)模塊總是通過系統(tǒng)內(nèi)存來互相傳遞信息,而微內(nèi)核結(jié)構(gòu)中就只有用正式的機制,這樣會導(dǎo)致性能的降低,在 Linus 和 Tanenbaum 的有名的那場關(guān)于微內(nèi)核與整體內(nèi)核的爭論 [3] 了這個問題;
     出現(xiàn)的新問題 系統(tǒng)的部件之間會出現(xiàn)一些新類型的死鎖或其他的條件錯誤,而這些在整體內(nèi)核的系統(tǒng)中是不會出現(xiàn)的。
     3 研究現(xiàn)狀
     由于操作系統(tǒng)體系結(jié)構(gòu)爭論的廣泛性,大多數(shù)從事操作系統(tǒng)研究和實現(xiàn)的學(xué)者們都意識到無論整體內(nèi)核還是微內(nèi)核結(jié)構(gòu)都不是盡善盡美的。這場爭論帶來的另一積極后果是,雙方的支持者都試圖有所改變,以彌補自身系統(tǒng)存在的缺陷。
     一直以來,微內(nèi)核結(jié)構(gòu)的支持者對整體內(nèi)核系統(tǒng)的可移植性都存在質(zhì)疑,整體內(nèi)核的操作系統(tǒng)也盡量使其內(nèi)核模塊化,減少模塊之間的依賴性,這樣就提高了系統(tǒng)的可維護(hù)性和系統(tǒng)的可移植性。
     整體內(nèi)核的支持者對微內(nèi)核結(jié)構(gòu)最有力的反擊往往是效率問題,的確由于微內(nèi)核系統(tǒng)將很多系統(tǒng)服務(wù)放在核外,系統(tǒng)的效率難免會受影響。因此最近幾年微內(nèi)核的支持者忙于研究如何提高系統(tǒng)的效率,一種途徑是尋找更優(yōu)的進(jìn)程間通訊機制,以便從根本上提高效率,另一種結(jié)果是一些微內(nèi)核系統(tǒng)把有的系統(tǒng)服務(wù)又重新置于內(nèi)核之中,這從某種程度上確實提高了效率,但是其代價是一定程度上違背了微內(nèi)核的初衷。
     近幾年由于嵌入式系統(tǒng)的飛快發(fā)展,微內(nèi)核操作系統(tǒng)的研究又成為熱點,這主要是因為嵌入式系統(tǒng)資源有限,而整體內(nèi)核系統(tǒng)的內(nèi)核一般都要占據(jù)很大的內(nèi)存空間,這是嵌入式系統(tǒng)無法容忍的。嵌入式系統(tǒng)看好微內(nèi)核的另一重要原因是魯棒性和可動態(tài)配置,因為許多嵌入式系統(tǒng)應(yīng)用是用于控制系統(tǒng),控制失靈往往會造成難以估計的災(zāi)難。微內(nèi)核的缺點在嵌入式系統(tǒng)的應(yīng)用中仍然非常突出,嵌入式系統(tǒng)通常都要求較高的效率。
     從上面的論述中可以看出,微內(nèi)核和整體內(nèi)核的爭論問題,最后歸結(jié)為穩(wěn)定性和效率的選擇問題。迄今為止,仍沒有很完美的解決方案,一般是根據(jù)問題的重點決定采用某種方案。