何志明
摘要: OSKit可以用來構建操作系統內核、外層服務和其他核心OS功能模塊,包括可用于內核的最小化POSIX環境、物理內存、內存管理、廣泛的調試支持,以及高層子系統。開發者可以用自己編寫的組件來取代OSKit中的部分組件,以滿足特定的需要,也豐富了操作系統的應用層。
關鍵詞:OSKit;組件技術;操作系統;協議棧
一、 應用OSKit的必要性
一般情況下,探究人員只對操作系統的一些特定領域感喜好,而對于另外一些元素,如啟動加載代碼、核心啟動代碼、設備驅動程序和內存分配代碼等往往不感喜好,但是一個可運行的原型系統又必須包含這些內容。編寫這些基礎結構延緩了操作系統探究項目的進度,同時也增加了進行操作系統探究的代價。為了解決這一新問題,美國猶他大學的FLUX探究小組開發了OSKit,它提供了一個框架和一組模塊化的、具有簡單接口的庫以及一組清楚的、可重用的OS組件。開發者可以根據自己的探究喜好或所要考慮的性能來使用這些模塊,或用他們自己的模塊來替代標準的OSKit模塊。
二、 組件技術簡介
所謂組件,其實就是一種可部署軟件的代碼包,其中包括某些可執行模塊。組件單獨開發并作為軟件單元使用,它具有明確的接口,軟件就是通過這些接口調用組件所能提供的服務,多種組件可以聯合起來構成更大型的組件乃至直接建立整個系統。組件的實現必須支持一種或者多種其用戶所希望獲得的接口。為了構造新應用程序,軟件開發人員找出適當的組件,將這些組件加入到正在開發中的應用程序,同時對應用程序進行測試并保證應用程序的組裝工作按照預定的規劃正常進行。
三、 Oskit組件關鍵技術
1、引導程序
從操作系統探究的立場來看,啟動加載器是一個令人不敢喜好的領域,因此OS開發者通常進行一個最小化、快捷的設計。由于設計理念和要求的稍微差別,每個啟動加載器都不適用于下一個OS。為了解決這個新問題,OSKit直接支持多啟動標準,這一標準是由幾個OS項目的成員共同設計的,它的目的是提供一個簡單而通用的啟動加載器和OS內核間的接口,從而答應一個啟動加載器加載任何兼容的OS。在進行操作系統探究時,多啟動標準非常有用,這其中的主要原因是啟動加載器在加載內核自身的同時還具有加載附加文件或者啟動模塊的能力。
2、核心支持庫
OSKit核心支持庫的主要用途是讓客戶OS更輕易訪問硬件設施。它包含了一個較大的實用函數和符號定義的集合,該集合對于管理模式代碼是非常具體的。和此相對應,OSKit的大多數其他庫在用戶模式代碼中通常很有用。和OSKit的其余部分所不同的是,多數核心支持代碼必須是針對特定系統結構的,而這些特定機器的細節對客戶OS也是有用的。OSKit核心支持庫仔細地設置了一個基本的32位執行環境,初始化段和頁轉換表,安裝一個中斷向量表,并提供缺省的陷阱和中斷處理程序。該庫在缺省情況下自動地定位所有隨內核加載的啟動模塊,并保留它們所在的物理內存。
3、內存管理庫
如同在一個標準C語言庫中實現的malloc()一樣,內存管理代碼典型地用于用戶空間。通常并不適用于內核。設備驅動經常需要分配特定類型的內存,并伴隨具體的調整屬性。為解決這些內存管理新問題,OSKit包含了兩個簡單而靈活的內存管理庫摘要:(1)基于隊列的內存管理器LMM,它提供了功能強大且高效的原語來進行分配管理,并支持在一個池中管理多種類型的內存。(2)地址映射管理器AMM,被設計用來管理不必直接映射到物理內存或虛擬內存的地址空間,它對OS的其他方面提供了類似的支持。
4、調試支持
OSKit的一個最實用的好處是摘要:給定一個適當的硬件設置,它馬上就能提供給OS開發者一個完全源代碼級的內核調試環境。OSKit內核支持庫包括一個可用于GNU調試器(GDB)的串行存根模塊,它在客戶OS環境中處理陷阱,并使用GDB的標準遠程調試協議通過一個串行程序和運行在另一臺機器上的GDB通信。甚至當客戶機OS執行自己的陷阱處理時,OSKit的GDB存根模塊也是可用的。假如客戶OS提供適當的鉤子,它甚至支持多線程調試。除了基本的調試器支持,OSKit也提供了一個內存分配調試庫,它可以跟蹤內存分配并檢測一般的錯誤,如緩沖區溢出和釋放已釋放的內存。這個庫提供了和許多普通應用程序調試器相似的功能性,所不同的是它運行在由OSKit提供的最小內核環境中。
5、 設備驅動支持
在OS開發和維護中最艱巨的一個任務是支持多種多樣的I/O硬件。這些復雜的設備常會含有潛在的錯誤,而新硬件的發布又經常伴隨著不兼容的軟件接口。由于這些原因,OSKit采用了為現有內核開發的穩定的、經過充分測試的驅動程序。OSKit使用了一種封裝技術,將現有的驅動程序代碼基本上未加修改地合并到OSKit中。這些現有的驅動程序被一個OSKit粘結代碼層所包裝,從而使得這些驅動程序可以在和開發它們的環境完全不同的環境中工作。目前,來自Linux的大多數以太網卡、SCSI和IDE磁盤的設備驅動程序被包括進來,總數超過了五十種。用同樣的方式,來自FreeBSD的八個字符設備驅動程序也被包含了進來,它們支持標準PC控制臺和串口及不同的多串口板。
6、協議棧
OSKit提供了一個完整的TCP/IP網絡協議棧。如同驅動程序一樣,有關網絡的代碼也可以通過封裝機制被合并進來。OSKit當前可以從Linux中獲取網絡設備驅動程序,它們是PC平臺可獲得的最大的免費資源。OSKit的網絡組件繼續于FreeBSD4.4,它通常被認為具有更多成熟的網絡協議。這顯示了使用封裝機制將現有軟件包裝成靈活的組件的第二個優點摘要:即從不同的資源中獲取最好的組件,并讓它們一起被使用。
7、文件系統
通過使用封裝技術,OSKit吸收了NetBSD的基于磁盤的文件系統代碼。NetBSD之所以被選擇為首要資源庫,是因為在可用的系統中,它的文件系統代碼被最清楚地分離了出來,而FreeBSD和Linux的文件系統和它們的虛擬內存系統結合的更緊密。當前,OSKit也把Linux文件系統合并了進來,以便能夠支持多種類型的文件系統格式,如Windows95、OS/2和System V的文件系統格式等等。
總之,采用組件技術能降低開發、測試和維護成本,提高可靠性和穩定性。OSKit大大減輕了操作系統探究和開發者的負擔,可以讓開發人員避開復雜的底層,而把喜好集中和他們所感喜好的領域,這不僅滿足了實際客戶系統的需求,也有助于操作系統的探究和開發。
參考文獻
[1]李永勝,汪紅梅等.基于面向對象操作系統開發平臺OSKit的分析和程序設計 [j].計算機科學,2015(3)
[2]杜德海,劉小燕.嵌入式操作系統中的任務分析機制的設計與實現 [j].電子科技大學學報,2016(2)endprint