淺析元件機制和作業系統的實現的論文
淺析元件機制和作業系統的實現的論文
1 引言
當前,作業系統的功能不斷擴充套件,作業系統的型別呈現出多樣化的趨向。一個小規模的開發小組已經不可能完全從頭開始實現一個實用的作業系統,而一般情況下,探究人員只對作業系統的一些特定領域感喜好,而對於另外一些元素,如啟動載入程式碼、核心啟動程式碼、裝置驅動程式和記憶體分配程式碼等往往不感喜好,但是一個可執行的原型系統又必須包含這些內容。編寫這些基礎結構延緩了作業系統探究專案的進度,同時也增加了進行作業系統探究的代價。為了解決這一新問題,猶他大學的flux探究小組開發了oskit,它提供了一個框架和一組模組化的、具有簡單介面的庫以及一組清楚的、可重用的os元件。oskit可以用來構建作業系統核心、外層服務和其他核心os功能模組。oskit提供了各種功能模組,諸如簡單自舉,一個可用於核心的最小化posix環境、和物理記憶體和其約束一致的記憶體管理、廣泛的除錯支援,以及高層子系統如協議棧和檔案系統。開發者可以根據自己的探究喜好或所要考慮的效能來使用這些模組,或用他們自己的模組來替代標準的oskit模組。
oskit公開了它內部的實現細節,答應使用者從成熟的作業系統中不加修改地提取程式碼,然後透過一小部分經過仔細設計的粘接程式碼將它們合併到一起,隔離它們的依靠性,並輸出良好定義的介面。oskit使用這一技術整合了許多穩定而成熟的原始碼,包括裝置驅動、檔案系統、網路協議等等。實踐表明,使用元件軟體架構和重用技術會給作業系統實現領域帶來大的影響。
2 元件技術簡介
元件技術是一種較新的軟體開發技術。到目前為止,還難以確定元件技術的明確定義。比如,對元件技術的常見說法有以下這些摘要:“二進位制軟體單元”、“任意場合可部署的軟體”、“非凡適合第三方開發”和“規範定義的介面”等等。大致上可以這樣理解摘要:所謂元件,其實就是一種可部署軟體的程式碼包,其中包括某些可執行模組。元件單獨開發並作為軟體單元使用,它具有明確的介面,軟體就是透過這些介面呼叫元件所能提供的服務,多種元件可以聯合起來構成更大型的元件乃至直接建立整個系統。元件的實現必須支援一種或者多種其使用者所希望獲得的介面。實現元件並不一定需要採用面嚮物件語言。為了構造新應用程式,軟體開發人員找出適當的元件,將這些元件加入到正在開發中的應用程式,同時對應用程式進行測試並保證應用程式的組裝工作按照預定的規劃正常進行。採用元件技術能降低開發、測試和維護成本,提高可靠性和穩定性。
3 oskit元件綜述
oskit的元件庫提供了一般情況下更高層的功能,它通常只對外開放一些相關的公用呼叫介面。目標系統透過oskit的面向物件的com介面來和這些元件進行互動。以下幾節概述了oskit所提供的元件。
3. 1 載入程式
大多數作業系統多有自身的啟動載入機制,彼此互不相容。這種載入機制的多樣性並不是由於每個os所要求的自舉服務不同而引起,而是由於構建啟動載入器的特定方式造成的。因為從作業系統探究的立場來看,啟動載入器是一個令人不敢喜好的領域,因此os開發者通常進行一個最小化、快捷的設計。由於設計理念和要求的`稍微差別,每個啟動載入器都不適用於下一個os。為了解決這個新問題,oskit直接支援多啟動標準,這一標準是由幾個os專案的成員共同設計的,它的目的是提供一個簡單而通用的啟動載入器和os核心間的介面,從而答應一個啟動載入器載入任何相容的os。
在進行作業系統探究時,多啟動標準非常有用,這其中的主要原因是啟動載入器在載入核心自身的同時還具有載入附加檔案或者啟動模組的能力。這裡的一個啟動模組只是一個普通檔案,啟動載入器不以任何方式解釋它,而僅僅把它隨同核心映像一起載入到保留物理記憶體塊中。在啟動核心時,啟動載入器提供給核心以下內容摘要:物理地址的列表、所有已載入的啟動模組的大小,以及和每個模組相聯絡的由使用者定義的字串。這些啟動模組和和它們相聯絡的使用者定義的字串由核心解釋。這樣做的目的是為了透過提供核心啟動時需要的資料,諸如初始化程式、裝置驅動和檔案系統伺服器,來減輕核心啟動的負擔。
3.2核心支援庫
oskit核心支援庫的主要用途是讓客戶os更輕易訪問硬體設施。它包含了一個較大的實用函式和符號定義的集合,該集合對於管理模式程式碼是非常具體的。和此相對應,oskit的大多數其他庫在使用者模式程式碼中通常很有用。和oskit的其餘部分所不同的是,多數核心支援程式碼必須是針對特定系統結構的,而這些特定機器的細節對客戶os也是有用的。例如,在x86機器上,核心支援庫包含一些函式,用來建立和操縱x86頁表和段暫存器。其他oskit元件通常提供建立在這些低層機制上的和體系結構無關的設施,但是為了提供最大的靈活性,和特定結構相關的介面始終可以被訪問。
oskit核心支援庫在x86體系結構上尤為重要,因為該體系結構的os級程式設計環境非凡複雜和模糊。核心支援庫仔細地設定了一個基本的32位執行環境(為了和ms-dos相容,x86處理器通常以16位模式開始),初始化段和頁轉換表,安裝一箇中斷向量表,並提供預設的陷阱和中斷處理程式。當然,客戶os能夠修改或過載這些行為。然而,在預設情況下,核心支援庫自動地做所有必要的工作,以便使處理器進入一個方便的執行環境,此時中斷、陷阱、除錯以及其他標準設施已經如預期的那樣開始工作。該庫在預設情況下自動地定位所有隨核心載入的啟動模組,並保留它們所在的物理記憶體。接下來,應用程式可以很輕易使用它們。客戶os只需以標準c語言風格提供一個main()函式。一切都設定好以後,核心支援庫將用所有引數和由啟動載入器傳遞過來的環境變數來呼叫它。
3.3記憶體管理庫
如同在一個標準c語言庫中實現的malloc()一樣,記憶體管理程式碼典型地用於使用者空間。通常並不適用於核心。裝置驅動經常需要分配特定型別的記憶體,並伴隨具體的調整屬性。例如,對於內建的dma控制器只能訪問最初的16m物理記憶體。為解決這些記憶體管理新問題,oskit包含了兩個簡單而靈活的記憶體管理庫摘要:(1)基於佇列的記憶體管理器(或稱lmm),它提供了功能強大且高效的原語來進行分配管理,並支援在一個池中管理多種型別的記憶體。(2)地址對映管理器(或稱amm)被設計用來管理不必直接對映到物理記憶體或虛擬記憶體的地址空間,它對os的其他方面提供了類似的支援,諸如程序地址空間、分頁、空閒塊或ipc名字空間的管理。儘管這些庫可以很輕易地應用在使用者空間,但實際上它們是被非凡設計用來滿足os核心的需求。
3.4 最小c語言庫
成熟的os核心一般都包含著相當數量的僅僅用來重新實現基本的c語言庫函式如printf()和malloc()的程式碼。和此形成對比的是,oskit提供了一個最小化c語言函式庫,它圍繞著最小化依靠性而不是最大化函式性和效能的原則來設計。
3.5除錯支援
oskit的一個最實用的好處是摘要:給定一個適當的硬體設定,它馬上就能提供給os開發者一個完全原始碼級的核心除錯環境。oskit核心支援庫包括一個可用於gnu偵錯程式(gdb)的序列存根模組,它在客戶os環境中處理陷阱,並使用gdb的標準遠端除錯協議透過一個序列程式和執行在另一臺機器上的gdb通訊。甚至當客戶機os執行自己的陷阱處理時,oskit的gdb存根模組也是可用的。假如客戶os提供適當的鉤子,它甚至支援多執行緒除錯。除了基本的偵錯程式支援,oskit也提供了一個記憶體分配除錯庫,它可以跟蹤記憶體分配並檢測一般的錯誤,如緩衝區溢位和釋放已釋放的記憶體。這個庫提供了和許多普通應用程式偵錯程式相似的功能性,所不同的是它執行在由oskit提供的最小核心環境中
3.6 裝置驅動支援
在os開發和維護中最艱鉅的一個任務是支援多種多樣的i/o硬體。這些複雜的裝置常會含有潛在的錯誤,而新硬體的釋出又經常伴隨著不相容的軟體介面。由於這些原因,oskit採用了為現有核心開發的穩定的、經過充分測試的驅動程式。oskit使用了一種封裝技術,將現有的驅動程式程式碼基本上未加修改地合併到oskit中。這些現有的驅動程式被一個oskit粘結程式碼層所包裝,從而使得這些驅動程式可以在和開發它們的環境完全不同的環境中工作。目前,來自linux的大多數乙太網卡、scsi和ide磁碟的裝置驅動程式被包括進來,總數超過了五十種。用同樣的方式,來自freebsd的八個字元裝置驅動程式也被包含了進來,它們支援標準pc控制檯和串列埠及不同的多串列埠板。由於oskit把這些驅動仔細地進行了包裝,freebsd驅動程式可以和linux驅動程式一起工作。
3.7 協議棧
oskit提供了一個完整的tcp/ip網路協議棧。如同驅動程式一樣,有關網路的程式碼也可以透過封裝機制被合併進來。oskit當前可以從linux中獲取網路裝置驅動程式,它們是pc平臺可獲得的最大的免費資源。oskit的網路元件繼續於freebsd4.4,它通常被認為具有更多成熟的網路協議。這顯示了使用封裝機制將現有軟體包裝成靈活的元件的第二個優點摘要:即從不同的資源中獲取最好的元件,並讓它們一起被使用。
3.8檔案系統
透過使用封裝技術,oskit吸收了netbsd的基於磁碟的檔案系統程式碼。netbsd之所以被選擇為首要資源庫,是因為在可用的系統中,它的檔案系統程式碼被最清楚地分離了出來,而freebsd和linux的檔案系統和它們的虛擬記憶體系統結合的更緊密。當前,oskit也把linux檔案系統合併了進來,以便能夠支援多種型別的檔案系統格式,如windows95、os/2和system v的檔案系統格式等等。
oskit檔案系統輸出的com介面類似於許多unix檔案系統所使用的內部vfs介面。這些介面具有很好的粒度,使我們可以不必接觸oskit檔案系統的內部。例如,oskit介面只接受簡單的路徑名元件,答應平安封裝的程式碼執行適當的訪問許可檢查。
4 oskit的目前狀況
自從在1996年6月釋出了oskit的第一個公開發行版以來,oskit已經更新了多次,每次更新都增加了一些演算法,並修正了一些錯誤。最新的發行版是2002年3月的版本。由此可見,oskit一直處於作業系統開發平臺的前沿,其自身也在不斷完善和發展。
5 結論
作為一個作業系統探究和開發的平臺,oskit大大減輕了作業系統探究和開發者的負擔。它可以讓開發人員避開復雜的底層,而把喜好集中和他們所感喜好的領域。開發者可以用自己編寫的元件來取代oskit中的部分元件,以滿足自己特定的需要,從而豐富了作業系統的應用層。總之,oskit滿足了實際客戶系統的需求,有助於作業系統的探究和開發。
參考文獻
(1) 湯海京 基於面向物件作業系統開發平臺(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