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