淺析組件機制和操作系統的實(shí)現的論文
1 引言
當前,操作系統的功能不斷擴展,操作系統的類(lèi)型呈現出多樣化的趨向。一個(gè)小規模的開(kāi)發(fā)小組已經(jīng)不可能完全從頭開(kāi)始實(shí)現一個(gè)實(shí)用的操作系統,而一般情況下,探究人員只對操作系統的一些特定領(lǐng)域感喜好,而對于另外一些元素,如啟動(dòng)加載代碼、核心啟動(dòng)代碼、設備驅動(dòng)程序和內存分配代碼等往往不感喜好,但是一個(gè)可運行的原型系統又必須包含這些內容。編寫(xiě)這些基礎結構延緩了操作系統探究項目的進(jìn)度,同時(shí)也增加了進(jìn)行操作系統探究的代價(jià)。為了解決這一新問(wèn)題,猶他大學(xué)的flux探究小組開(kāi)發(fā)了oskit,它提供了一個(gè)框架和一組模塊化的、具有簡(jiǎn)單接口的庫以及一組清楚的、可重用的os組件。oskit可以用來(lái)構建操作系統內核、外層服務(wù)和其他核心os功能模塊。oskit提供了各種功能模塊,諸如簡(jiǎn)單自舉,一個(gè)可用于內核的最小化posix環(huán)境、和物理內存和其約束一致的內存管理、廣泛的調試支持,以及高層子系統如協(xié)議棧和文件系統。開(kāi)發(fā)者可以根據自己的探究喜好或所要考慮的性能來(lái)使用這些模塊,或用他們自己的模塊來(lái)替代標準的oskit模塊。
oskit公開(kāi)了它內部的實(shí)現細節,答應用戶(hù)從成熟的操作系統中不加修改地提取代碼,然后通過(guò)一小部分經(jīng)過(guò)仔細設計的粘接代碼將它們合并到一起,隔離它們的依靠性,并輸出良好定義的接口。oskit使用這一技術(shù)整合了許多穩定而成熟的源代碼,包括設備驅動(dòng)、文件系統、網(wǎng)絡(luò )協(xié)議等等。實(shí)踐表明,使用組件軟件架構和重用技術(shù)會(huì )給操作系統實(shí)現領(lǐng)域帶來(lái)大的影響。
2 組件技術(shù)簡(jiǎn)介
組件技術(shù)是一種較新的軟件開(kāi)發(fā)技術(shù)。到目前為止,還難以確定組件技術(shù)的明確定義。比如,對組件技術(shù)的常見(jiàn)說(shuō)法有以下這些摘要:“二進(jìn)制軟件單元”、“任意場(chǎng)合可部署的軟件”、“非凡適合第三方開(kāi)發(fā)”和“規范定義的接口”等等。大致上可以這樣理解摘要:所謂組件,其實(shí)就是一種可部署軟件的代碼包,其中包括某些可執行模塊。組件單獨開(kāi)發(fā)并作為軟件單元使用,它具有明確的接口,軟件就是通過(guò)這些接口調用組件所能提供的服務(wù),多種組件可以聯(lián)合起來(lái)構成更大型的組件乃至直接建立整個(gè)系統。組件的實(shí)現必須支持一種或者多種其用戶(hù)所希望獲得的接口。實(shí)現組件并不一定需要采用面向對象語(yǔ)言。為了構造新應用程序,軟件開(kāi)發(fā)人員找出適當的組件,將這些組件加入到正在開(kāi)發(fā)中的應用程序,同時(shí)對應用程序進(jìn)行測試并保證應用程序的組裝工作按照預定的規劃正常進(jìn)行。采用組件技術(shù)能降低開(kāi)發(fā)、測試和維護成本,提高可靠性和穩定性。
3 oskit組件綜述
oskit的組件庫提供了一般情況下更高層的功能,它通常只對外開(kāi)放一些相關(guān)的公用調用接口。目標系統通過(guò)oskit的面向對象的com接口來(lái)和這些組件進(jìn)行交互。以下幾節概述了oskit所提供的組件。
3. 1 引導程序
大多數操作系統多有自身的啟動(dòng)加載機制,彼此互不兼容。這種加載機制的多樣性并不是由于每個(gè)os所要求的自舉服務(wù)不同而引起,而是由于構建啟動(dòng)加載器的特定方式造成的。因為從操作系統探究的立場(chǎng)來(lái)看,啟動(dòng)加載器是一個(gè)令人不敢喜好的領(lǐng)域,因此os開(kāi)發(fā)者通常進(jìn)行一個(gè)最小化、快捷的設計。由于設計理念和要求的`稍微差別,每個(gè)啟動(dòng)加載器都不適用于下一個(gè)os。為了解決這個(gè)新問(wèn)題,oskit直接支持多啟動(dòng)標準,這一標準是由幾個(gè)os項目的成員共同設計的,它的目的是提供一個(gè)簡(jiǎn)單而通用的啟動(dòng)加載器和os內核間的接口,從而答應一個(gè)啟動(dòng)加載器加載任何兼容的os。
在進(jìn)行操作系統探究時(shí),多啟動(dòng)標準非常有用,這其中的主要原因是啟動(dòng)加載器在加載內核自身的同時(shí)還具有加載附加文件或者啟動(dòng)模塊的能力。這里的一個(gè)啟動(dòng)模塊只是一個(gè)普通文件,啟動(dòng)加載器不以任何方式解釋它,而僅僅把它隨同內核映像一起加載到保留物理內存塊中。在啟動(dòng)內核時(shí),啟動(dòng)加載器提供給內核以下內容摘要:物理地址的列表、所有已加載的啟動(dòng)模塊的大小,以及和每個(gè)模塊相聯(lián)系的由用戶(hù)定義的字符串。這些啟動(dòng)模塊和和它們相聯(lián)系的用戶(hù)定義的字符串由內核解釋。這樣做的目的是為了通過(guò)提供內核啟動(dòng)時(shí)需要的數據,諸如初始化程序、設備驅動(dòng)和文件系統服務(wù)器,來(lái)減輕內核啟動(dòng)的負擔。
3.2核心支持庫
oskit核心支持庫的主要用途是讓客戶(hù)os更輕易訪(fǎng)問(wèn)硬件設施。它包含了一個(gè)較大的實(shí)用函數和符號定義的集合,該集合對于管理模式代碼是非常具體的。和此相對應,oskit的大多數其他庫在用戶(hù)模式代碼中通常很有用。和oskit的其余部分所不同的是,多數核心支持代碼必須是針對特定系統結構的,而這些特定機器的細節對客戶(hù)os也是有用的。例如,在x86機器上,核心支持庫包含一些函數,用來(lái)創(chuàng )建和操縱x86頁(yè)表和段寄存器。其他oskit組件通常提供建立在這些低層機制上的和體系結構無(wú)關(guān)的設施,但是為了提供最大的靈活性,和特定結構相關(guān)的接口始終可以被訪(fǎng)問(wèn)。
oskit核心支持庫在x86體系結構上尤為重要,因為該體系結構的os級編程環(huán)境非凡復雜和模糊。核心支持庫仔細地設置了一個(gè)基本的32位執行環(huán)境(為了和ms-dos兼容,x86處理器通常以16位模式開(kāi)始),初始化段和頁(yè)轉換表,安裝一個(gè)中斷向量表,并提供缺省的陷阱和中斷處理程序。當然,客戶(hù)os能夠修改或重載這些行為。然而,在缺省情況下,核心支持庫自動(dòng)地做所有必要的工作,以便使處理器進(jìn)入一個(gè)方便的執行環(huán)境,此時(shí)中斷、陷阱、調試以及其他標準設施已經(jīng)如預期的那樣開(kāi)始工作。該庫在缺省情況下自動(dòng)地定位所有隨內核加載的啟動(dòng)模塊,并保留它們所在的物理內存。接下來(lái),應用程序可以很輕易使用它們?蛻(hù)os只需以標準c語(yǔ)言風(fēng)格提供一個(gè)main()函數。一切都設置好以后,內核支持庫將用所有參數和由啟動(dòng)加載器傳遞過(guò)來(lái)的環(huán)境變量來(lái)調用它。
3.3內存管理庫
如同在一個(gè)標準c語(yǔ)言庫中實(shí)現的malloc()一樣,內存管理代碼典型地用于用戶(hù)空間。通常并不適用于內核。設備驅動(dòng)經(jīng)常需要分配特定類(lèi)型的內存,并伴隨具體的調整屬性。例如,對于內建的dma控制器只能訪(fǎng)問(wèn)最初的16m物理內存。為解決這些內存管理新問(wèn)題,oskit包含了兩個(gè)簡(jiǎn)單而靈活的內存管理庫摘要:(1)基于隊列的內存管理器(或稱(chēng)lmm),它提供了功能強大且高效的原語(yǔ)來(lái)進(jìn)行分配管理,并支持在一個(gè)池中管理多種類(lèi)型的內存。(2)地址映射管理器(或稱(chēng)amm)被設計用來(lái)管理不必直接映射到物理內存或虛擬內存的地址空間,它對os的其他方面提供了類(lèi)似的支持,諸如進(jìn)程地址空間、分頁(yè)、空閑塊或ipc名字空間的管理。盡管這些庫可以很輕易地應用在用戶(hù)空間,但實(shí)際上它們是被非凡設計用來(lái)滿(mǎn)足os內核的需求。
3.4 最小c語(yǔ)言庫
成熟的os內核一般都包含著(zhù)相當數量的僅僅用來(lái)重新實(shí)現基本的c語(yǔ)言庫函數如printf()和malloc()的代碼。和此形成對比的是,oskit提供了一個(gè)最小化c語(yǔ)言函數庫,它圍繞著(zhù)最小化依靠性而不是最大化函數性和性能的原則來(lái)設計。
3.5調試支持
oskit的一個(gè)最實(shí)用的好處是摘要:給定一個(gè)適當的硬件設置,它馬上就能提供給os開(kāi)發(fā)者一個(gè)完全源代碼級的內核調試環(huán)境。oskit內核支持庫包括一個(gè)可用于gnu調試器(gdb)的串行存根模塊,它在客戶(hù)os環(huán)境中處理陷阱,并使用gdb的標準遠程調試協(xié)議通過(guò)一個(gè)串行程序和運行在另一臺機器上的gdb通信。甚至當客戶(hù)機os執行自己的陷阱處理時(shí),oskit的gdb存根模塊也是可用的。假如客戶(hù)os提供適當的鉤子,它甚至支持多線(xiàn)程調試。除了基本的調試器支持,oskit也提供了一個(gè)內存分配調試庫,它可以跟蹤內存分配并檢測一般的錯誤,如緩沖區溢出和釋放已釋放的內存。這個(gè)庫提供了和許多普通應用程序調試器相似的功能性,所不同的是它運行在由oskit提供的最小內核環(huán)境中
3.6 設備驅動(dòng)支持
在os開(kāi)發(fā)和維護中最艱巨的一個(gè)任務(wù)是支持多種多樣的i/o硬件。這些復雜的設備常會(huì )含有潛在的錯誤,而新硬件的發(fā)布又經(jīng)常伴隨著(zhù)不兼容的軟件接口。由于這些原因,oskit采用了為現有內核開(kāi)發(fā)的穩定的、經(jīng)過(guò)充分測試的驅動(dòng)程序。oskit使用了一種封裝技術(shù),將現有的驅動(dòng)程序代碼基本上未加修改地合并到oskit中。這些現有的驅動(dòng)程序被一個(gè)oskit粘結代碼層所包裝,從而使得這些驅動(dòng)程序可以在和開(kāi)發(fā)它們的環(huán)境完全不同的環(huán)境中工作。目前,來(lái)自linux的大多數以太網(wǎng)卡、scsi和ide磁盤(pán)的設備驅動(dòng)程序被包括進(jìn)來(lái),總數超過(guò)了五十種。用同樣的方式,來(lái)自freebsd的八個(gè)字符設備驅動(dòng)程序也被包含了進(jìn)來(lái),它們支持標準pc控制臺和串口及不同的多串口板。由于oskit把這些驅動(dòng)仔細地進(jìn)行了包裝,freebsd驅動(dòng)程序可以和linux驅動(dòng)程序一起工作。
3.7 協(xié)議棧
oskit提供了一個(gè)完整的tcp/ip網(wǎng)絡(luò )協(xié)議棧。如同驅動(dòng)程序一樣,有關(guān)網(wǎng)絡(luò )的代碼也可以通過(guò)封裝機制被合并進(jìn)來(lái)。oskit當前可以從linux中獲取網(wǎng)絡(luò )設備驅動(dòng)程序,它們是pc平臺可獲得的最大的免費資源。oskit的網(wǎng)絡(luò )組件繼續于freebsd4.4,它通常被認為具有更多成熟的網(wǎng)絡(luò )協(xié)議。這顯示了使用封裝機制將現有軟件包裝成靈活的組件的第二個(gè)優(yōu)點(diǎn)摘要:即從不同的資源中獲取最好的組件,并讓它們一起被使用。
3.8文件系統
通過(guò)使用封裝技術(shù),oskit吸收了netbsd的基于磁盤(pán)的文件系統代碼。netbsd之所以被選擇為首要資源庫,是因為在可用的系統中,它的文件系統代碼被最清楚地分離了出來(lái),而freebsd和linux的文件系統和它們的虛擬內存系統結合的更緊密。當前,oskit也把linux文件系統合并了進(jìn)來(lái),以便能夠支持多種類(lèi)型的文件系統格式,如windows95、os/2和system v的文件系統格式等等。
oskit文件系統輸出的com接口類(lèi)似于許多unix文件系統所使用的內部vfs接口。這些接口具有很好的粒度,使我們可以不必接觸oskit文件系統的內部。例如,oskit接口只接受簡(jiǎn)單的路徑名組件,答應平安封裝的代碼執行適當的訪(fǎng)問(wèn)許可檢查。
4 oskit的目前狀況
自從在1996年6月發(fā)布了oskit的第一個(gè)公開(kāi)發(fā)行版以來(lái),oskit已經(jīng)更新了多次,每次更新都增加了一些算法,并修正了一些錯誤。最新的發(fā)行版是2002年3月的版本。由此可見(jiàn),oskit一直處于操作系統開(kāi)發(fā)平臺的前沿,其自身也在不斷完善和發(fā)展。
5 結論
作為一個(gè)操作系統探究和開(kāi)發(fā)的平臺,oskit大大減輕了操作系統探究和開(kāi)發(fā)者的負擔。它可以讓開(kāi)發(fā)人員避開(kāi)復雜的底層,而把喜好集中和他們所感喜好的領(lǐng)域。開(kāi)發(fā)者可以用自己編寫(xiě)的組件來(lái)取代oskit中的部分組件,以滿(mǎn)足自己特定的需要,從而豐富了操作系統的應用層?傊,oskit滿(mǎn)足了實(shí)際客戶(hù)系統的需求,有助于操作系統的探究和開(kāi)發(fā)。
參考文獻
(1) 湯海京 基于面向對象操作系統開(kāi)發(fā)平臺(oskit)的分析和程序設計 http摘要://www-900.ibm.com/developerworks/linux/kernel/oskit/part1/
(2) michael hohmuth using the oskit as a base for l4 applications
(3) bryan ford kevin van maren jay lepreau stephen clawson bart robinson jeff turner
_ the flux os toolkit摘要: reusable components for os implementation
【淺析組件機制和操作系統的實(shí)現的論文】相關(guān)文章:
關(guān)于教師教育機制淺析論文01-01
淺析財政轉移支付機制的建構論文05-25
淺析一般智力的神經(jīng)機制論文01-12
故障診斷機制測試系統簡(jiǎn)介與實(shí)現論文04-28
淺析工程項目團隊激勵機制論文11-13
淺析構建重特大疾病保障機制論文05-27