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