淺析組件機制和操作系統(tǒng)的實現(xiàn)
1 引言
當前,操作系統(tǒng)的功能不斷擴展,操作系統(tǒng)的類型呈現(xiàn)出多樣化的趨向。一個小規(guī)模的開發(fā)小組已經(jīng)不可能完全從頭開始實現(xiàn)一個實用的操作系統(tǒng),而一般情況下,探究人員只對操作系統(tǒng)的一些特定領域感喜好,而對于另外一些元素,如啟動加載代碼、核心啟動代碼、設備驅動程序和內(nèi)存分配代碼等往往不感喜好,但是一個可運行的原型系統(tǒng)又必須包含這些內(nèi)容。編寫這些基礎結構延緩了操作系統(tǒng)探究項目的進度,同時也增加了進行操作系統(tǒng)探究的代價。為了解決這一新問題,猶他大學的FLUX探究小組開發(fā)了OSKit,它提供了一個框架和一組模塊化的、具有簡單接口的庫以及一組清楚的、可重用的OS組件。OSKit可以用來構建操作系統(tǒng)內(nèi)核、外層服務和其他核心OS功能模塊。OSKit提供了各種功能模塊,諸如簡單自舉,一個可用于內(nèi)核的最小化POSIX環(huán)境、和物理內(nèi)存和其約束一致的內(nèi)存管理、廣泛的調(diào)試支持,以及高層子系統(tǒng)如協(xié)議棧和文件系統(tǒng)。開發(fā)者可以根據(jù)自己的探究喜好或所要考慮的性能來使用這些模塊,或用他們自己的模塊來替代標準的OSKit模塊。
OSKit公開了它內(nèi)部的實現(xiàn)細節(jié),答應用戶從成熟的操作系統(tǒng)中不加修改地提取代碼,然后通過一小部分經(jīng)過仔細設計的粘接代碼將它們合并到一起,隔離它們的依靠性,并輸出良好定義的接口。OSKit使用這一技術整合了許多穩(wěn)定而成熟的源代碼,包括設備驅動、文件系統(tǒng)、網(wǎng)絡協(xié)議等等。實踐表明,使用組件軟件架構和重用技術會給操作系統(tǒng)實現(xiàn)領域帶來大的影響。
2 組件技術簡介
組件技術是一種較新的軟件開發(fā)技術。到目前為止,還難以確定組件技術的明確定義。比如,對組件技術的常見說法有以下這些摘要:“二進制軟件單元”、“任意場合可部署的軟件”、“非凡適合第三方開發(fā)”和“規(guī)范定義的接口”等等。大致上可以這樣理解摘要:所謂組件,其實就是一種可部署軟件的代碼包,其中包括某些可執(zhí)行模塊。組件單獨開發(fā)并作為軟件單元使用,它具有明確的接口,軟件就是通過這些接口調(diào)用組件所能提供的服務,多種組件可以聯(lián)合起來構成更大型的組件乃至直接建立整個系統(tǒng)。組件的實現(xiàn)必須支持一種或者多種其用戶所希望獲得的接口。實現(xiàn)組件并不一定需要采用面向對象語言。為了構造新應用程序,軟件開發(fā)人員找出適當?shù)慕M件,將這些組件加入到正在開發(fā)中的應用程序,同時對應用程序進行測試并保證應用程序的組裝工作按照預定的規(guī)劃正常進行。采用組件技術能降低開發(fā)、測試和維護成本,提高可靠性和穩(wěn)定性。
3 Oskit組件綜述
OSKIT的組件庫提供了一般情況下更高層的功能,它通常只對外開放一些相關的公用調(diào)用接口。目標系統(tǒng)通過OSKit的面向對象的COM接口來和這些組件進行交互。以下幾節(jié)概述了OSKit所提供的組件。
3. 1 引導程序
大多數(shù)操作系統(tǒng)多有自身的啟動加載機制,彼此互不兼容。這種加載機制的多樣性并不是由于每個OS所要求的自舉服務不同而引起,而是由于構建啟動加載器的特定方式造成的。因為從操作系統(tǒng)探究的立場來看,啟動加載器是一個令人不敢喜好的領域,因此OS開發(fā)者通常進行一個最小化、快捷的設計。由于設計理念和要求的稍微差別,每個啟動加載器都不適用于下一個OS。為了解決這個新問題,OSKit直接支持多啟動標準,這一標準是由幾個OS項目的成員共同設計的,它的目的是提供一個簡單而通用的啟動加載器和OS內(nèi)核間的接口,從而答應一個啟動加載器加載任何兼容的OS。
在進行操作系統(tǒng)探究時,多啟動標準非常有用,這其中的主要原因是啟動加載器在加載內(nèi)核自身的同時還具有加載附加文件或者啟動模塊的能力。這里的一個啟動模塊只是一個普通文件,啟動加載器不以任何方式解釋它,而僅僅把它隨同內(nèi)核映像一起加載到保留物理內(nèi)存塊中。在啟動內(nèi)核時,啟動加載器提供給內(nèi)核以下內(nèi)容摘要:物理地址的列表、所有已加載的啟動模塊的大小,以及和每個模塊相聯(lián)系的由用戶定義的字符串。這些啟動模塊和和它們相聯(lián)系的用戶定義的字符串由內(nèi)核解釋。這樣做的目的是為了通過提供內(nèi)核啟動時需要的數(shù)據(jù),諸如初始化程序、設備驅動和文件系統(tǒng)服務器,來減輕內(nèi)核啟動的負擔。
3.2核心支持庫
OSKit核心支持庫的主要用途是讓客戶OS更輕易訪問硬件設施。它包含了一個較大的實用函數(shù)和符號定義的集合,該集合對于管理模式代碼是非常具體的。和此相對應,OSKit的大多數(shù)其他庫在用戶模式代碼中通常很有用。和OSKit的其余部分所不同的是,多數(shù)核心支持代碼必須是針對特定系統(tǒng)結構的,而這些特定機器的細節(jié)對客戶OS也是有用的。例如,在x86機器上,核心支持庫包含一些函數(shù),用來創(chuàng)建和操縱x86頁表和段寄存器。其他OSKit組件通常提供建立在這些低層機制上的和體系結構無關的設施,但是為了提供最大的靈活性,和特定結構相關的接口始終可以被訪問。
OSKit核心支持庫在x86體系結構上尤為重要,因為該體系結構的OS級編程環(huán)境非凡復雜和模糊。核心支持庫仔細地設置了一個基本的32位執(zhí)行環(huán)境(為了和MS-DOS兼容,x86處理器通常以16位模式開始),初始化段和頁轉換表,安裝一個中斷向量表,并提供缺省的陷阱和中斷處理程序。當然,客戶OS能夠修改或重載這些行為。然而,在缺省情況下,核心支持庫自動地做所有必要的工作,以便使處理器進入一個方便的執(zhí)行環(huán)境,此時中斷、陷阱、調(diào)試以及其他標準設施已經(jīng)如預期的那樣開始工作。該庫在缺省情況下自動地定位所有隨內(nèi)核加載的啟動模塊,并保留它們所在的物理內(nèi)存。接下來,應用程序可以很輕易使用它們?蛻鬙S只需以標準C語言風格提供一個main()函數(shù)。一切都設置好以后,內(nèi)核支持庫將用所有參數(shù)和由啟動加載器傳遞過來的環(huán)境變量來調(diào)用它。
3.3內(nèi)存管理庫
如同在一個標準C語言庫中實現(xiàn)的malloc()一樣,內(nèi)存管理代碼典型地用于用戶空間。通常并不適用于內(nèi)核。設備驅動經(jīng)常需要分配特定類型的內(nèi)存,并伴隨具體的調(diào)整屬性。例如,對于內(nèi)建的DMA控制器只能訪問最初的16M物理內(nèi)存。為解決這些內(nèi)存管理新問題,OSKit包含了兩個簡單而靈活的內(nèi)存管理庫摘要:(1)基于隊列的內(nèi)存管理器(或稱LMM),它提供了功能強大且高效的原語來進行分配管理,并支持在一個池中管理多種類型的內(nèi)存。(2)地址映射管理器(或稱AMM)被設計用來管理不必直接映射到物理內(nèi)存或虛擬內(nèi)存的地址空間,它對OS的其他方面提供了類似的支持,諸如進程地址空間、分頁、空閑塊或IPC名字空間的管理。盡管這些庫可以很輕易地應用在用戶空間,但實際上它們是被非凡設計用來滿足OS內(nèi)核的需求。
成熟的OS內(nèi)核一般都包含著相當數(shù)量的僅僅用來重新實現(xiàn)基本的C語言庫函數(shù)如printf()和malloc()的代碼。和此形成對比的是,OSKit提供了一個最小化C語言函數(shù)庫,它圍繞著最小化依靠性而不是最大化函數(shù)性和性能的原則來設計。
3.5調(diào)試支持
OSKit的一個最實用的好處是摘要:給定一個適當?shù)挠布O置,它馬上就能提供給OS開發(fā)者一個完全源代碼級的內(nèi)核調(diào)試環(huán)境。OSKit內(nèi)核支持庫包括一個可用于GNU調(diào)試器(GDB)的串行存根模塊,它在客戶OS環(huán)境中處理陷阱,并使用GDB的標準遠程調(diào)試協(xié)議通過一個串行程序和運行在另一臺機器上的GDB通信。甚至當客戶機OS執(zhí)行自己的陷阱處理時,OSKit的GDB存根模塊也是可用的。假如客戶OS提供適當?shù)你^子,它甚至支持多線程調(diào)試。除了基本的調(diào)試器支持,OSKit也提供了一個內(nèi)存分配調(diào)試庫,它可以跟蹤內(nèi)存分配并檢測一般的錯誤,如緩沖區(qū)溢出和釋放已釋放的內(nèi)存。這個庫提供了和許多普通應用程序調(diào)試器相似的功能性,所不同的是它運行在由OSKit提供的最小內(nèi)核環(huán)境中
3.6 設備驅動支持
在OS開發(fā)和維護中最艱巨的一個任務是支持多種多樣的I/O硬件。這些復雜的設備常會含有潛在的錯誤,而新硬件的發(fā)布又經(jīng)常伴隨著不兼容的軟件接口。由于這些原因,OSKit采用了為現(xiàn)有內(nèi)核開發(fā)的穩(wěn)定的、經(jīng)過充分測試的驅動程序。OSKit使用了一種封裝技術,將現(xiàn)有的驅動程序代碼基本上未加修改地合并到OSKit中。這些現(xiàn)有的驅動程序被一個OSKit粘結代碼層所包裝,從而使得這些驅動程序可以在和開發(fā)它們的環(huán)境完全不同的環(huán)境中工作。目前,來自Linux的大多數(shù)以太網(wǎng)卡、SCSI和IDE磁盤的設備驅動程序被包括進來,總數(shù)超過了五十種。用同樣的方式,來自FreeBSD的八個字符設備驅動程序也被包含了進來,它們支持標準PC控制臺和串口及不同的多串口板。由于OSKit把這些驅動仔細地進行了包裝,F(xiàn)reeBSD驅動程序可以和Linux驅動程序一起工作。
3.7 協(xié)議棧
OSKit提供了一個完整的TCP/IP網(wǎng)絡協(xié)議棧。如同驅動程序一樣,有關網(wǎng)絡的代碼也可以通過封裝機制被合并進來。OSKit當前可以從Linux中獲取網(wǎng)絡設備驅動程序,它們是PC平臺可獲得的最大的免費資源。OSKit的網(wǎng)絡組件繼續(xù)于FreeBSD4.4,它通常被認為具有更多成熟的網(wǎng)絡協(xié)議。這顯示了使用封裝機制將現(xiàn)有軟件包裝成靈活的組件的第二個優(yōu)點摘要:即從不同的資源中獲取最好的組件,并讓它們一起被使用。
3.8文件系統(tǒng)
通過使用封裝技術,OSKit吸收了NetBSD的基于磁盤的文件系統(tǒng)代碼。NetBSD之所以被選擇為首要資源庫,是因為在可用的系統(tǒng)中,它的文件系統(tǒng)代碼被最清楚地分離了出來,而FreeBSD和Linux的文件系統(tǒng)和它們的虛擬內(nèi)存系統(tǒng)結合的更緊密。當前,OSKit也把Linux文件系統(tǒng)合并了進來,以便能夠支持多種類型的文件系統(tǒng)格式,如Windows95、OS/2和System V的文件系統(tǒng)格式等等。
OSKit文件系統(tǒng)輸出的COM接口類似于許多Unix文件系統(tǒng)所使用的內(nèi)部VFS接口。這些接口具有很好的粒度,使我們可以不必接觸OSKit文件系統(tǒng)的內(nèi)部。例如,OSKit接口只接受簡單的路徑名組件,答應平安封裝的代碼執(zhí)行適當?shù)脑L問許可檢查。
4 OSKit的目前狀況
自從在1996年6月發(fā)布了OSKit的第一個公開發(fā)行版以來,OSKit已經(jīng)更新了多次,每次更新都增加了一些算法,并修正了一些錯誤。最新的發(fā)行版是2002年3月的版本。由此可見,OSKit一直處于操作系統(tǒng)開發(fā)平臺的前沿,其自身也在不斷完善和發(fā)展。
5 結論
作為一個操作系統(tǒng)探究和開發(fā)的平臺,OSKit大大減輕了操作系統(tǒng)探究和開發(fā)者的負擔。它可以讓開發(fā)人員避開復雜的底層,而把喜好集中和他們所感喜好的領域。開發(fā)者可以用自己編寫的組件來取代OSKit中的部分組件,以滿足自己特定的需要,從而豐富了操作系統(tǒng)的應用層?傊琌SKit滿足了實際客戶系統(tǒng)的需求,有助于操作系統(tǒng)的探究和開發(fā)。
參考文獻
(1) 湯海京 基于面向對象操作系統(tǒng)開發(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
【淺析組件機制和操作系統(tǒng)的實現(xiàn)】相關文章:
淺談組件機制和操作系統(tǒng)的實現(xiàn)11-30
簡析組件機制和操作系統(tǒng)的實現(xiàn)11-17
淺析環(huán)境共同侵權行為的構成要件及實現(xiàn)機制11-16
淺析酒店管理中的員工激勵機制11-19
淺談校本課程開發(fā)的探究本性與實現(xiàn)機制06-17
淺析高職生心理健康教育機制的共建12-05
淺析石油企業(yè)人力資源薪酬激勵機制06-15
淺析深化和發(fā)展勞動和勞動價值理論12-05
- 相關推薦