【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學_第1頁
【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學_第2頁
【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學_第3頁
【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學_第4頁
【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

【畢業(yè)學位論文】基于ARM的嵌入式MINIX3操作系統(tǒng)的移植-計算數(shù)學.pdf 免費下載

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

蘭州大學碩士學位論文基于鵬申請學位級別:碩士專業(yè):數(shù)學 計算數(shù)學指導教師:周宇斌20080501蘭州大學2008屆碩士學位論文摘 要嵌入式操作系統(tǒng)是嵌入式系統(tǒng)應用的核心。完成簡單功能的嵌入式系統(tǒng)一般不需要操作系統(tǒng),但是隨著所謂后入式系統(tǒng)設(shè)計日趨復雜,嵌入式操作系統(tǒng)就必不可少了。一般而言,嵌入式操作系統(tǒng)不同于一般意義的計算機操作系統(tǒng),它有占用空間小、執(zhí)行效率高、方便進行個性化定制和軟件要求固化存儲等特點。本文在討論了嵌入式操作系統(tǒng)的基本理論之后,論述了操作系統(tǒng)的特點,指出了向嵌入式操作系統(tǒng)方面發(fā)展的意義和可行性。建立可移植代碼是操作系統(tǒng)移植的首要步驟和重要途徑,本文又論述了建立可移植代碼的一般方法和過程。而后深入分析了操作系統(tǒng)的內(nèi)核結(jié)構(gòu)及組成部分,重組了內(nèi)核目錄樹,列出了移植已有代碼的基礎(chǔ)上,分離了一部分機器相關(guān)代碼和體系結(jié)構(gòu)不相關(guān)代碼,建立了相應的可移植代碼。提到嵌入式,就不能不提文就是針對中簡單介紹了且對應內(nèi)核的部分代碼。最后在深入分析了合軟實時操作系統(tǒng)進程調(diào)度特點和要求,改進了進程調(diào)度策略,使之適合軟實時操作系統(tǒng)的要求,并給出了修改后的相關(guān)源代碼。關(guān)鍵詞:嵌入式操作系統(tǒng);機器不相關(guān)代碼;機器相關(guān)代碼;內(nèi)核驅(qū)動程序模型:非搶占式調(diào)度算法;軟實時進程調(diào)度蘭州大學2008屆碩士學位論文is of he be to t C as it a of up on OM O of is to a so a of be t to RM is a ,it in is of 翎性聲明本人鄭重聲明:本人所里交的學位論文,是在導師的指器下獨立進幸亍研究所取得的成果。學位論文中熙引用他人已經(jīng)發(fā)表竣未發(fā)表的成采、數(shù)攥、觀點等,均已明確注暖密處。除文中已經(jīng)注明引用的內(nèi)容外,不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的科研成果。對本文的研究成果做出羨要貢獻的個人和集體,均已在文中戩明確方式標明。艫篙黧全赴縋 論文作者簽名:矧參鬟弩關(guān)于學位論文使用授權(quán)的聲明本人在導師指導下所完成熬論文及耀關(guān)熬職務(wù)作品,知識產(chǎn)權(quán)羥震蘭攤大學。本天完全了解蘭州大學有關(guān)保存、使用學位論文的規(guī)定。同意學校保存或向國家有關(guān)部門絨機構(gòu)送交論文的紙質(zhì)舨和電子版,允許論文被套闋和借閱;本人授權(quán)蘭州大學可以將本學位論文的全部絨部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用任何復制手段保存和匯編本學位論文。本人離校后發(fā)表、使用學位論文或與該論文童接相關(guān)的學術(shù)論文或成果時,第一署名萃位仍然為蘭矧大學。保密論文在解密后應遵守此規(guī)定。, 論文作者籜名:洶 導師簽名:虐敞基麓:拳。蘭州大學2008屆碩士學位論文第1章緒論11嵌入式系統(tǒng)概述隨著多媒體技術(shù)、通信技術(shù)相結(jié)合的信息時代的快速發(fā)展,互聯(lián)網(wǎng)的廣泛應用,嵌入式系統(tǒng)和嵌入式技術(shù)已經(jīng)和人們的生活緊密相連。嵌入式系統(tǒng)的應用涉及眾多領(lǐng)域,深入到了社會、生活的各個方而。其中主要有:家用電器、通信設(shè)備工業(yè)、儀器儀表、導航控制、商業(yè)和金融、辦公設(shè)備、交通運輸、建筑和醫(yī)療等領(lǐng)域。嵌入式系統(tǒng)已經(jīng)有近30年的發(fā)展歷史,其發(fā)展過程是硬件和軟件交替進行的雙螺旋式發(fā)展。最早的單片機是1976年的些早期的單片機均含有256字節(jié)的個8位并行接口、一個全雙工串行接口、兩個20世紀80年代,8048的基礎(chǔ)上研制成功了8051。1981年該內(nèi)核包含了許多傳統(tǒng)操作系統(tǒng)的特征,包括任務(wù)管理、任務(wù)間通信、同步與互斥、中斷支持、內(nèi)存管理等功能。這個實時內(nèi)核可以運行在8051單片機上。嵌入式微控制器的出現(xiàn)使計算機工程應用史上的一個里程碑,隨著微電子技術(shù)的飛速發(fā)展,可能的情況下,各種機電設(shè)備已經(jīng)或者正在嵌入前,中、高檔8位嵌入式微控制器,2位嵌入式微控制器,以及一些專用嵌入式微控制器(如數(shù)字信號處理、數(shù)字圖像處理、通信控制單片機等)已在通信系統(tǒng)、因特網(wǎng)系統(tǒng)、非嵌入式計算機系統(tǒng)、工業(yè)測控系統(tǒng)、機器人感知行走系統(tǒng)、分布式測控系統(tǒng)、快速多機實時處理系統(tǒng)和圖像系統(tǒng)中成為不可缺少的重要組成部分。111 嵌入式系統(tǒng)的定義我們用計算機系統(tǒng)來處理并管理各種數(shù)據(jù),這里所說的數(shù)據(jù)包括文字、數(shù)字、圖片以及各種指令。人們希望能制造出各種智能機器,這些機器需要一個系統(tǒng)來管理,而這些機器又可能很小,小如手機,這就需要一個嵌入在其中的管理系統(tǒng),而這個系統(tǒng)如何管理這些機器,就要看它的軟件了。我們把帶有微處理器的專用軟硬件系統(tǒng)統(tǒng)稱為嵌入式計算機系統(tǒng),通常稱為嵌入式系統(tǒng)。但是不一定符合以上要求的計算機系統(tǒng)就能被稱為嵌入式系統(tǒng)。例如一臺安裝了此,際電器和電子工程師協(xié)會)對嵌入式系統(tǒng)的定義是:用于控制、監(jiān)視或者輔助操作機器和設(shè)備的裝置(to or of or 可以看出此定義是從應用方面考慮的,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機電等附屬裝置。蘭州大學2008屆碩士學位論文功能層 泣甩程序蜀平臺板級支持包嵌入式操作系統(tǒng)中間層 硬件抽象層(月魁)板級支持包(件層 D用接口加 :嵌入式系統(tǒng)的組成綜合各方面,我們得出嵌入式系統(tǒng)的一般的定義: “以應用為中心,以計算機技術(shù)為基礎(chǔ),軟件硬件可剪裁,功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)?!?12 嵌入式系統(tǒng)的組成總體上嵌入式系統(tǒng)可劃分成硬件和軟件兩部分,硬件一般由高性能的微處理器和外圍的接口電路組成,軟件一般由硬件抽象層、嵌入式操作系統(tǒng)、板級支持包。硬件層:硬件是整個嵌入式操作系統(tǒng)和應用程序運行的平臺,包括輸入和輸出接N驅(qū)動電路、處理器、存儲器、定時器、串口、中斷控制器、外設(shè)器件、圖形控制器及相關(guān)系統(tǒng)電路等部分。中間層:硬件抽象層(負責對各種硬件功能提供軟件接口,包括硬件初始化、硬件時鐘、中斷板級支持包、計時器時鐘、總線管理、內(nèi)存地址映射等。嵌入式操作系統(tǒng):實現(xiàn)對資源的訪問和管理,完成任務(wù)調(diào)度,支持應用軟件的運行及開發(fā)。板級支持包(供與硬件相關(guān)的設(shè)備驅(qū)動。應用平臺:應用開發(fā)商提供的可重用的應用平臺,封裝一些常用功能,同時提供于二次開發(fā)。應用軟件:應用軟件層位于嵌入式系統(tǒng)層次結(jié)構(gòu)的最頂層,直接與用戶交互。113 嵌入式系統(tǒng)的特點嵌入式系統(tǒng)是一種針對于特定任務(wù)、特殊環(huán)境而進行特殊設(shè)計的定制產(chǎn)品,所以與傳統(tǒng)的計算機系統(tǒng)相比,有以下特點:1操作系統(tǒng)內(nèi)核小,資源少2蘭州大學2008屆碩士學位論文2專用性強3系統(tǒng)穩(wěn)定持久4軟硬件結(jié)合緊密5開發(fā)需專門的環(huán)境和開發(fā)工具6軟件要求固態(tài)化存儲7實時性要求高114嵌入式系統(tǒng)的分類由于嵌入式系統(tǒng)的用途廣泛,種類繁多,人們對嵌入式系統(tǒng)的理解也各不相同,所以其分類方法也存在著多種方式:1根據(jù)嵌入方式分為:整機式嵌入、部件式嵌入、芯片式嵌入。2根據(jù)嵌入式軟件類型分為單線程程序嵌入式系統(tǒng)、事件驅(qū)動程序嵌入式系統(tǒng)。3根據(jù)實時性可分為實時系統(tǒng)和非實時系統(tǒng)。4根據(jù)嵌入式系統(tǒng)的復雜程度,可分為單微處理器嵌入式系統(tǒng)、組件嵌入式系統(tǒng)、分布式嵌入式系統(tǒng)。115 嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)(是一種特殊的嵌入式軟件,是基于嵌入式操作系統(tǒng)的嵌入式系統(tǒng)中軟件層的基礎(chǔ),其它應用都是建立在嵌入式操作系統(tǒng)之上。它實際上是段系統(tǒng)復位后首先執(zhí)行的程序,主要負責嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度,控制、協(xié)調(diào)并發(fā)活動,它將斷、定時器存儲器、供給用戶的是一個標準的入式操作系統(tǒng)必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能。許多早期的嵌入式系統(tǒng)開發(fā)者認為嵌入式系統(tǒng)不需要操作系統(tǒng)。但現(xiàn)在除了最簡單的系統(tǒng)外,越來越多的嵌入式系統(tǒng)引入了操作系統(tǒng)。比如中斷驅(qū)動系統(tǒng)在引入嵌入式操作系統(tǒng)之后,系統(tǒng)的可靠性、安全性、可擴展性、功能性、靈活性、可管理性都有了大大的提高。在很多嵌入式操作系統(tǒng)中封裝了越來越多的功能。除了對任務(wù)的切換、高度通信、同步、互斥、中斷管理、時鐘管理等,還可進一步封裝內(nèi)存管理、網(wǎng)絡(luò)通信協(xié)議、文件管理等功能這些功能可根據(jù)需要進行剪裁。1131 嵌入式操作系統(tǒng)的特點除了具備一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機制、中斷處理、文件處理等外,還有以下特點:3蘭州大學2008屆碩士學位論文1可裝卸性。開放性、可伸縮性的體系結(jié)構(gòu)。2強實時性。用于各種設(shè)備控制當中。3統(tǒng)一的接口。提供各種設(shè)備驅(qū)動接口。4操作方便、簡單。提供友好的圖形G。5提供強大的網(wǎng)絡(luò)功能。支持供各種移動計算設(shè)備預留接口。6強穩(wěn)定性,弱交互性。7固化代碼。在嵌入式系統(tǒng)中,嵌入式操作系統(tǒng)和應用軟件被固化在嵌入式系統(tǒng)計算機的152 嵌入式操作系統(tǒng)的分類 。按經(jīng)營模式分,目前市場上主流的嵌入式操作系統(tǒng)可分為商用和開源兩類;按實時性劃分,嵌入式操作系統(tǒng)可分為實時嵌入式操作系統(tǒng)和非實時嵌入式操作系統(tǒng)。1193 幾種典型的嵌入式操作系統(tǒng)的比較 一1典型的商用操作系統(tǒng)。其友好的開發(fā)環(huán)境、高性能的系統(tǒng)內(nèi)核,在實時操作系統(tǒng)領(lǐng)域是首屈一指的。定性和可靠性,具有可裁剪的微內(nèi)核結(jié)構(gòu)、高效的任務(wù)管理、靈活的任務(wù)間通信、微秒級的中斷處理,支持多種物理介質(zhì)及標準的、完整的持多種處理器,如家族成員有E 30,T 0等。疑是中是一種針對小容量、移動式、智能化、32位、模塊化實時嵌入式操作系統(tǒng)。3嵌入式最大的特點是源代碼的公開并且遵循入式且有著龐大的開發(fā)人員群體,網(wǎng)絡(luò)功能優(yōu)秀,支持硬件數(shù)量龐大。嵌入式蘭州大學2008屆碩士學位論文12 來編程和學習一個完整的操作系統(tǒng)。當時其它可用的操作系統(tǒng),例如商業(yè)化的產(chǎn)品,而它的許可證是不允許在課堂上使用或者研究源代碼的。如果只講解理論,會使學生對操作系統(tǒng)產(chǎn)生片面地理解。為了避免這種情況,就是用戶的角度看,是從內(nèi)部實現(xiàn)來看,它是與的組織結(jié)構(gòu)比塊化,而并非在又很多可用的開源的操作系統(tǒng),其中最著名的要數(shù)中于我來說,要通過以上一種系統(tǒng)去學懂操作系統(tǒng)太難了。這些系統(tǒng)擁有很多特性所以非常復雜?,F(xiàn)在有很多專家都在從事這些系統(tǒng)的開發(fā),而這些專家團體非常龐大而且還在增長。很小、高效而且快速。保持代碼的獨立性、整個系統(tǒng)的可擴展性和穩(wěn)定性。在早期的時候,核心沒有使用硬件的一些功能,以保持對舊系統(tǒng)的兼容和對其他系統(tǒng)的可移植性。例如,到這篇論文書寫的時候,還不支持虛擬內(nèi)存,盡管大部分系統(tǒng)都硬件支持虛擬內(nèi)存以簡化軟件的實現(xiàn)。但是些新特性使得21關(guān)于到2004年,以推出了。這個版本是為支持許多舊的體系結(jié)構(gòu),像8000,早期的核部分進行了重新構(gòu)造,將幾乎所有的設(shè)備驅(qū)動程序都放到了用戶空間,只保留了時鐘任務(wù)和系統(tǒng)任務(wù),進一步減少了內(nèi)核空問的進程,使得內(nèi)核更加簡潔、穩(wěn)定。新版本可用于嵌入式系統(tǒng)。尤其是對于嵌入式應用來說,簡潔、模塊化和可靠性是非常關(guān)鍵的。13目標平臺簡介一種用于微控制器微處理器領(lǐng)域的觀能不說是一個奇跡??梢哉J為是一個公司的名字,也可以認為是對類微處理器的通稱,還可以認為是一種技術(shù)的名字。1991年要出售芯片設(shè)計技術(shù)的授權(quán)。目前,采用)核的微處理器,即我們通常所說的6濃遍及工業(yè)控制、消費類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無線系統(tǒng)等各類產(chǎn)品市場,基5蘭州大學2008屆碩士學位論文于上的市場份額,為知識產(chǎn)權(quán)供應商,本身不直接從事芯片生產(chǎn),轉(zhuǎn)讓設(shè)計許可由合作公司生產(chǎn)各具特色的:卷片,世界各大半導體生產(chǎn)商從據(jù)各自不同的應用領(lǐng)域,加入適當?shù)耐鈬娐罚瑥亩纬勺约旱那?,全世界有幾十家大的半導體公司都使用此既使得造、軟件的支持,義使整個系統(tǒng)成本降低,使產(chǎn)品更容易進入市場被消費者所接受,更具有競爭力先進性就體現(xiàn)在它的處理器結(jié)構(gòu)的模塊化上。l,分別針對不同需求的應用。 。本文實驗選用的實驗工具箱的驗儀器硬件配置如圖12。14 向嵌入式操作系統(tǒng)移植的可行性類用戶的層次上來看是與是在內(nèi)部結(jié)構(gòu)上來講則是完全不同的。由于以比加模塊化的設(shè)計理念,整個操作系統(tǒng)就是所有系統(tǒng)進程的集合,比起然要更加安全,更加穩(wěn)定。統(tǒng)一直采用了層次化的結(jié)構(gòu),從版本核空間中只保留最為核心的部分和設(shè)備驅(qū)動程序,文件系統(tǒng)等其它的系統(tǒng)進程則放到了用戶空間。到了統(tǒng)的內(nèi)核部分進一步減小,內(nèi)核中只保留了三個進程:統(tǒng)任務(wù)和時鐘任務(wù),而將剩下的設(shè)備驅(qū)動程序都放到了用戶空間,使得內(nèi)核部分的可執(zhí)行代碼只有不到4000行,這大大減少了內(nèi)核出錯崩潰的可能性,進一步提高了系統(tǒng)的穩(wěn)定性。在非微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)的內(nèi)核中,驅(qū)動程序通常都是包含錯誤最多的部分,一個驅(qū)動程序出錯就有可能引起操作系統(tǒng)的崩潰。而在中,這種情況不可能出現(xiàn),即使驅(qū)動程序崩潰,也不會影響到操作系統(tǒng),而崩潰的驅(qū)動程序也可以統(tǒng)過用戶空間的再生服務(wù)器(S)重新啟動。而且需要添加一個新的驅(qū)動程序的時候?qū)Σ僮飨到y(tǒng)內(nèi)核的影響也不會很大??梢哉f,從推出以來,結(jié)一下,操作系統(tǒng)向嵌入式操作系統(tǒng)領(lǐng)域發(fā)展的優(yōu)勢有:操作系統(tǒng)采用微內(nèi)核結(jié)構(gòu),內(nèi)核小,內(nèi)核可執(zhí)行代碼部分只有不到4000行。6蘭州大學2008屆碩士學位論文配置名稱 型號 說明片三星作頻率20394H 32M*2=64片,10100 8寸16B 個共陰極個個個個個處理器的4電位器控制輸入468線直接擴展持雙語音通信記本硬盤,(:50C FA 個10位4針、20事:試驗平臺配置系統(tǒng)占用資源少,可以在嵌入式系統(tǒng)有限的硬件資源上發(fā)揮出性能。系統(tǒng)采用高度的模塊化設(shè)計,系統(tǒng)具有良好的伸縮性、擴展性、開放性等都符合嵌入式系統(tǒng)可剪裁、開放性等要求。系統(tǒng)的結(jié)構(gòu)從根本上決定了它必定是一個安全的、穩(wěn)定的、持久的操作系統(tǒng),這也是嵌入式系統(tǒng)所要求的。為設(shè)備驅(qū)動程序提供了一個與系統(tǒng)其它部分一樣的接口:將請求的消息發(fā)送給驅(qū)動程序,然后驅(qū)動程序根據(jù)消息中的操作碼和參數(shù)執(zhí)行相應的操作。的內(nèi)存管理并沒有使用虛擬內(nèi)存管理,這個特性在某種程度上也使得它易于向嵌入式系統(tǒng)移植。7蘭州大學2008屆碩士學位論文15本文的主要工作借鑒目前國內(nèi)外對人進行了操作系統(tǒng)向文完成了以下工作:1對嵌入式系統(tǒng)進行了學習研究,歸納總結(jié)了嵌入式系統(tǒng)的特征。2對的內(nèi)核結(jié)構(gòu)、代碼組織進行了深入的研究,并針對移植對內(nèi)核部分源代碼進行了劃分,分離了機器相關(guān)部分和不相關(guān)部分代碼,并對分離后的代碼進行了重新組織。3本人閱讀了M部分源代碼,分析了中進程調(diào)度的原理和實現(xiàn)。4修改了內(nèi)核中進程調(diào)度部分相關(guān)代碼,對向文的組織圍繞以上工作展開。第1章介紹了嵌入式系統(tǒng)和嵌入式操作系統(tǒng)的定義和特征,對操作系統(tǒng)向嵌入式系統(tǒng)進行移植的優(yōu)勢和便利進行了分析。第2章是移植代碼的前期工作,分析了如何在保持現(xiàn)有布局的基礎(chǔ)上劃分代碼,內(nèi)核驅(qū)動程序模型的建立。然后講述了代碼中使用的匯編語言。第3章首先分析了操作系統(tǒng)的內(nèi)部結(jié)構(gòu)以及系統(tǒng)各部分的功能,重新建立代碼樹。后又分析了中的進程調(diào)度,并對相關(guān)代碼進行了移植的嘗試。第4章是這篇論文的結(jié)論。8蘭州大學2008屆碩士學位論文第2章移植的準備當要移植一個操作系統(tǒng)的時候,通常要從已存在的代碼開始。如果運氣好的話,這些代碼已經(jīng)列出了機器相關(guān)代碼(很快能找到它們,那么要找機器不相關(guān)代碼(入口也很容易,移植也會簡單而快速。如果不是這樣的話,就需要一個合理的方法去區(qū)分代碼,但是要這樣做經(jīng)驗和常識很重要。第2章”移植的準備”將在所有的入口點都知道的情況下給出建立移植代碼的方法。當然也會說明在這樣建立移植代碼的過程中如何轉(zhuǎn)換現(xiàn)有的代碼,并保持現(xiàn)有的布局設(shè)計。21移植一個操作系統(tǒng)移植一個操作系統(tǒng)第一件要做的事情是了解所有有關(guān)目標平臺的東西在這篇論文中指的是以二件事情是理解植系統(tǒng)時會頻繁地遇到由后又會遇到由機器相關(guān)代碼中的函數(shù)產(chǎn)生的問題,而這些函數(shù)正是需要我們移植的。越快找到出錯的函數(shù),移植也就越容易。追蹤一個系統(tǒng)函數(shù)找到問題將會是一項困難的工作,如果能夠知道這個函數(shù)從會對這個函數(shù)的追蹤有很大的幫助。還需要知道當前系統(tǒng)的組成(在本文中是2位系統(tǒng)),當然不需要像目標系統(tǒng)那樣知道一些具體的細節(jié),但是一些基本的東西還是需要了解。編寫一個操作系統(tǒng)需要熟悉目標體系結(jié)構(gòu),而對體系結(jié)構(gòu)的認識程度取決于經(jīng)驗,這可能需要幾年的專業(yè)經(jīng)驗,任何沒有經(jīng)驗的人應該耐心地去積累經(jīng)驗,經(jīng)驗不會一夜之間獲得或者靠讀一兩本書而獲得。211完整的系統(tǒng)一個操作系統(tǒng)的組成不光只有一個內(nèi)核,它還擁有許多程序和公用程序(以管理計算機和使計算機運行起來。一個真正的操作系統(tǒng)還應該能提供一個開發(fā)環(huán)境,用來創(chuàng)建程序。提供了一個庫,并且它們擁有遵循要移植一個操作系統(tǒng)的時候,不僅要移植內(nèi)核,還必須要移植庫。這些庫被系統(tǒng)編譯器用來創(chuàng)建程序和公用程序,當然也包括編譯器自己在大多數(shù)情況下系統(tǒng)軟件用低級語言和高級語言共同來編寫。低級語言是目標機的匯編語言,而高級語言可以是C,C+或者混合使用在開始移植之前應該看看此系統(tǒng)在目標機上有沒有相同的高級語言的編譯器。M【N由編寫,對在有一個非常好編譯器:些人認為至有這樣的編譯器,將語言后再調(diào)用蘭州大學2008屆碩士學位論文當編譯器使用了高級功能,例如特殊類型,或者比特位的對齊方法,總會帶來兼容性問題。如果在編程時避免使用一些非標準的技巧,那么會使將來可能的移植變得簡單很多。所有的程序代碼都被分為兩部分:機器相關(guān)代碼(機器不相關(guān)代碼(如果不是這樣,那么我們就只能編寫通用代碼,比如編譯成的者只能編寫供一個體系結(jié)構(gòu)使用的代碼,像匯編代碼。在這里規(guī)律是簡單的:使用的語言越接近硬件,那么可移植性越小。由源文件編譯而成的目標代碼非常依賴于硬件和軟件,比如中以它永遠是不可移植的。移植一個操作系統(tǒng)就是所有關(guān)于從一個體系結(jié)構(gòu)向另一個體系結(jié)構(gòu)重寫機器相關(guān)部分代碼的過程。而建立可移植代碼是系統(tǒng)移植的一個重要途徑。編寫可移植代碼的基礎(chǔ)是分離機器相關(guān)代碼和機器不相關(guān)代碼,這樣的話我們可以清楚地知道機器相關(guān)代碼是哪一部分,而這部分代碼的重寫也可能就變得簡單了。的源代碼樹由兩部分組成:以確定的是所有的這些匯編代碼都不能在以所有這些匯編代碼提供的功能都必須移植到然是有可能這些代碼中仍然存在機器相關(guān)性,因為這些代碼直接或間接地同硬件打交道。我們要做的就是找到軟件的相同點,而重新編寫不同點。比如在設(shè)備I存在很多這種情況。原因是由于端口的使用方式不同。綜合地說,要讓須要從硬件那里得到特定的關(guān)鍵服務(wù),例如時鐘系統(tǒng)每秒鐘提供的604時鐘中斷。這些東西存在于終端、存儲器和時鐘系統(tǒng)中。這些服務(wù)必須跟一般內(nèi)核管理代碼分離,例如進程調(diào)度的代碼或者進程間通信的代碼。的原始代碼并沒有區(qū)分在”內(nèi)核中的”驅(qū)動程序和剩下的管理部分代碼,但是在這里我們需要將它們分離,也就是內(nèi)核中種分離方法將在下一節(jié)中說明。為了移植,我們要在原始代碼的基礎(chǔ)上建立可移植代碼,驅(qū)動程序模型正是用來將機器相關(guān)代碼從機器不相關(guān)代碼中分離中出來的。212可移植代碼的創(chuàng)建要創(chuàng)建一個可移植的系統(tǒng),必須在機器相關(guān)代碼和機器不相關(guān)代碼之間做一個分離。分離做得越好,那么移植也就越容易。拿內(nèi)核來說吧,理想情況下,當前體系結(jié)構(gòu)下內(nèi)核的兩部分代碼都能不相干的單獨編譯,并且能鏈接形成內(nèi)核。但這樣的意思不是說為它們有著不同的機器指令。編譯的機器相關(guān)代碼和機器不相關(guān)代碼部分必須屬于一樣的體系結(jié)構(gòu)。代碼的分離增強了設(shè)計的模塊化,這是一件非常好的事情,因為如果做得正確,可以增強內(nèi)核的擴展性和安全性。當許多人從事內(nèi)核的開發(fā)工作時,他們的代碼都擁有自己的特點和模式,互相之間的使用只限于互相調(diào)用功能。10蘭捌大學2008弱碩士學位論文只有兩釋本質(zhì)鷯情況決定代碼是否是祝器耱關(guān)的。所寅戇匯編代瑪和瑟有囊接訪問系統(tǒng)硬件的代碼都是機器相關(guān)的。大多數(shù)情況下,直接訪問硬件的代碼都存在于設(shè)備驅(qū)動程序巾。對內(nèi)核來說,這部分代碼包括使用常的系統(tǒng)驅(qū)動程序一般被認戈是系統(tǒng)相關(guān)斡,毽是也森鍘夕。鍘魏雖然中使用”動程序,但是它們不直接訪問硬件,所以它們可以被認為是硬件無關(guān)的。為了保持代碼的獨立性將要創(chuàng)建更多的文件,為了組織它們而使耀了新的爨秉結(jié)構(gòu)。珂以在原來的目錄結(jié)構(gòu)中藥每個體系結(jié)構(gòu)逶翔的源文傳建立相應目錄,例如在內(nèi)核根目錄中新增翻錄項如圖21:棱代碼根目錄)器相關(guān)代碼目錄)h(內(nèi)核接口文件)核目錄中其他文2代碼實現(xiàn))圈21:重建內(nèi)核目錄結(jié)構(gòu)其中,我們將新的項目命名為新且簧重薪鏈接志核進程。重藪編譯后要薪建一令薪熬瘁,包含個庫為內(nèi)核的機器不相關(guān)代碼提供所有的訪問硬件的入口(函數(shù))。為了詿視器相關(guān)代碼和瓿器不耱關(guān)代碼鏈接起來竣磊箋夠正常工作,必矮要有一個接口。這個接口描述了機器相關(guān)代碼庫中每個函數(shù)的輸入?yún)?shù)和運行結(jié)果。應該稱之為”內(nèi)核硬件接口”(I),是處于內(nèi)核中機器相關(guān)代碼和機器不楣關(guān)代碼之闋鯰一個接鑫,;蓼者負責與硬件打交邋,后者負責與系統(tǒng)進程麓交互。為了定義和識別接口函數(shù),我們使用了一個”驅(qū)動程序模烈”。使用這種方式的原因是在中這是一種建立驅(qū)動程序前端的默認方法。更一般地,這種編程結(jié)構(gòu)被用來將代碼鷙裝進一個邏輯模型或?qū)ο笾小r?qū)動程序模戮的使用霉冬在下一小繁討論。如果有一種想法認為么就可得出結(jié)論:童接訪問就意味著一個完備系統(tǒng)所有的機器相關(guān)代碼都應該位于設(shè)備溪動中。使臻這樣一個提供所裔兩這到了可移植的豳的,它也給了整個系統(tǒng)代碼一個統(tǒng)一的編程風格。要完成上麗這些工作,無疑增加了代碼編譯的復雜度,但是使用州大學2008屆碩士學位論文2121創(chuàng)建可移植代碼的3種方式有三種主要的方式創(chuàng)建可移植代碼,首選的方法列在最前面:1創(chuàng)建附加文件,重新實現(xiàn)函數(shù)2使用類型重定義3使用編譯程序指令下面分別來介紹這三種方式。第一種方式:使用第一種方式,編程者至少要建立兩個對象文件。一個包含個包含動程序?qū)嶋H上就是包含一次向一個新的體系結(jié)構(gòu)的移植都會導致在操作系統(tǒng)中新增加一個義在一個普通頭文件中的接口將給出一個個問是首選的方式,因為它提出了將驅(qū)動程序分離到一個文件中。本質(zhì)上說,這種方法是在在重新定義函數(shù)。下圖為一個例子:圖22:多體系結(jié)構(gòu)為接口文件提供函數(shù)實現(xiàn)在圖22中,接口文件會包含一個函數(shù)原型的列表。當為某一個體系結(jié)構(gòu)編譯代碼的時候,通常需要文件和編譯后的目標文件。有多少種體系結(jié)構(gòu),就有多少個版本,但只有目標體系結(jié)構(gòu)的這個版本會被編譯,為接口頭文件中的函數(shù)原型提供函數(shù)實現(xiàn)。后面的兩個源文件是為一個驅(qū)動程序存在的,由接口定義,被文件使用。第二種方式:12蘭州大學2008屆碩士學位論文第二種方式需要細心地編程,但是卻能實現(xiàn)功能強大的類型重定義。這種重定義不包括重新定義編譯器使用的簡單的或標準的類型,只包括由義的高級數(shù)據(jù)類型。這種數(shù)據(jù)結(jié)構(gòu)可以包含簡單數(shù)據(jù)成員,也可以包含高級數(shù)據(jù)成員。為了提高效率,這種方法要求在這些重定義的數(shù)據(jù)結(jié)構(gòu)中相應的成員擁有相同的名字和語義。當在手寫匯編語言文件中使用這些數(shù)據(jù)結(jié)構(gòu)時,它們在內(nèi)存中的布局就會很重要了。這時重新定義的結(jié)構(gòu)體中,”關(guān)鍵”成員必須是相同的排列順序,否則一樣的偏移量指向的是結(jié)構(gòu)中的另一個成員。當這些數(shù)據(jù)結(jié)構(gòu)只在據(jù)成員的布局會在每一次編譯時由編譯器計算的。級)結(jié)構(gòu)體,它們定義了當進程被輪換出一個結(jié)構(gòu)體”包含進程指針、程序計數(shù)器和通用目的寄存器的序列。另一個”含段指示符,定義了進程的內(nèi)存設(shè)置。??蚪Y(jié)構(gòu)體的一些成員被一些特定的系統(tǒng)調(diào)用使用,例如”所以這些成員需要一個通用的名字。幸運的是每一個系統(tǒng)都有??虻某蓡T所指向的組件,所有的系統(tǒng)都有程序計數(shù)器,棧指針和一些類似的東西。必須提供這些通用名以便于機器不相關(guān)部分代碼在需要時可以找到并修改它們。大部分的通用寄存器也需要被存儲,而且由于每一個體系結(jié)構(gòu)需要的空問不一樣,所以要在進程表的表項中留出足夠的空間。而重定義的結(jié)構(gòu)體”以使用類型霞定義將會”自動地”在進程表中創(chuàng)建空間。下面就來具體說明如何在編譯中重定義目標體系結(jié)構(gòu)的類型。文件(大多數(shù)是頭文件,但也可能是任何文件)可以以兩種形式被包含:相對當前源文件的位置和在可被搜索到的目錄列表中。在源文件中被包含的文件用引號或者尖括號標明。我們不提倡相對包含的方式,因為這種方式總是要求我們寫出頭文件的路徑,從而使對一個文件的包含產(chǎn)生了局限性。大多數(shù)的編譯器使用一個編譯選項來添加搜索列表的目錄。通過這種方式,我們就可以根據(jù)編譯對應的目標體系結(jié)構(gòu)而選擇包含不同的頭文件,這些文件中包含了相應體系結(jié)構(gòu)的類型的重定義。我們就用這種方式實現(xiàn)對不同體系結(jié)構(gòu)的類型重定義的頭文件的包含,而保持源文件中原來的樣做的優(yōu)點是我們不需要對源文件的代碼做出相應的修改。這種方法需要一個體系結(jié)構(gòu)單獨的”錄外加一個標準的系統(tǒng)”目錄。只有目標體系結(jié)構(gòu)的目錄被添加到這個列表。如果出現(xiàn)如下這種情況,被包含的兩個文件都定義了類型a,那么將得到一個類型重定義的警告,而這個問題是很好解決的。下一步要做的就要對所有的文件都需要重定義一個數(shù)據(jù)結(jié)構(gòu)類型編譯器用選項”一r用來將一個目錄加入目錄列表,編譯器在這個列表中搜索包含的文件所以當編譯2位體系結(jié)構(gòu)時我們可能要在編譯命令上加入”在下圖中,在文件中的指令#被處理為文件。對于文件將被處理為見圖23。13蘭州大學2008屆碩士學位論文( 23:多體系結(jié)構(gòu)提供的同一個數(shù)據(jù)結(jié)構(gòu)類型這些目錄不能在標準(或者系統(tǒng))如目錄,因為這樣會引起搜索沖突。大多數(shù)的編譯器使用第一個搜索到的相匹配的文件。這樣做可能導致上面提到的錯誤很難被發(fā)現(xiàn),因為編譯器不會給出任何警告信息。第三種方式:最后一種方式把需要編譯的代碼用編譯程序指令做一些修改,比如指令”橢撕f和”#。這些代碼都是全局定義,上述指令告訴編譯器相應代碼應該被包含或者被忽略??磮D24中的代碼,宏定義段代碼保存在一個全局文件中,所以所有的源文件都共享相同的定義。它必須是全局的,以保證圖24中我們用”明了編譯的目標機器。1舟A(瑚卟汜撐789并1 11 2并C)l 3141 516并:編譯程序指令舉例不使用編譯程序指令不會有任何問題,但是這樣有一個巨大的缺陷,那就是導致了系統(tǒng)的不可擴展性。當我們將操作系統(tǒng)向另一個體系結(jié)構(gòu)移植時,我們需要附加一個,銜塊。這樣就使得每一次移植都需要更新源代碼文件,這不是我們想要的。理想情況是盡可能地創(chuàng)建一個新的移植而不觸動原來的源文件。在上面這個例子中在兩條指令之間的代碼行數(shù)很少,但是大多數(shù)情況下代碼行數(shù)會在一個正常的數(shù)量。但是使用這種結(jié)構(gòu)又會帶來另一個缺陷,那就是失去了可讀性,這個源代碼應該具備的很重要的性質(zhì)。當在代碼模塊之中使用編譯程序指令時,就會失去可讀性。可以假設(shè)一下,當代碼在執(zhí)行的時候在編譯程序指令之間的部分只是從屏幕上滾動而過,根本就沒有經(jīng)過編譯。在代碼模塊中應該避免這樣,因為這樣會導致死代碼。新接觸代碼的程序員可能需要很困難、很長的一段時間去讀懂這段代碼。如果這樣使用是不可避免的,那么應該有一種方式使得這種代碼占用的行數(shù)不多。如果可能的話劃分這些文件,然后使用條件包含指令包含這些文件。有幾個條件包含指令就新建多少個文件,然后把條件包含指令之間的代碼寫入相應的新文件,然后再代碼出現(xiàn)的地方用”衢含這個文件。上面這些改變的影響應該是局部的,并且應該能被清楚地看到。例如機器相關(guān)模塊可能還涉及其它設(shè)備,或者每個模塊需要不同的參數(shù)。大多數(shù)情況下,這些代碼的影響只有很少的幾行。這時,可以使用編譯程序指令編寫上述代碼。但是為了完整性,也有一些例外,例如庫的頭文件也使用編譯程序指令,而這些指令的影響不止少數(shù)的幾行代碼。這些指令通常用來定義基本系統(tǒng)類型。2122從現(xiàn)存的文件創(chuàng)建可移植代碼當你需要去讀原始文件然后判斷”函數(shù)”或者”定義”是否是機器相關(guān)的時候,是有一些技巧的。在大多數(shù)情況下,要決定帶有機器相關(guān)選項的管理代碼是很容易的,這些代碼用來初始化或者通信。第一件要做的事情是刪除所有已確定的機器相關(guān)代碼(剩下管理代碼(然后編譯和鏈接管理代碼,編譯器起將會列出未定義的依賴關(guān)系代碼、函數(shù)和標識符。這就給了我們一個提示:下來用刪除的機器相關(guān)代碼創(chuàng)建一個新的源文件,標識符和函數(shù)都是原始的。然后來在一個聯(lián)結(jié)這里最好避免使用全局標識符和定義,因為在不同體系結(jié)構(gòu)之間,設(shè)備局”定義可能完全不同。例如一個體系結(jié)構(gòu)可能沒有設(shè)備D,或者這個端口可能在設(shè)備個好的接口不應該隨著體系結(jié)構(gòu)的改變而變化,如果不是這樣,那么它就是不好的。接口的更新不應該導致原來的體系結(jié)構(gòu)的更新,而應該只是忽略這個更新而已。只要找到在編譯器指令之間的代碼,就像圖24中展示的那樣,就應該把這些代碼移到新的機器相關(guān)代碼源文件中去。注意如果存在這些機器相關(guān)代碼的有依賴關(guān)系的代碼,而這些代碼也不在系統(tǒng)庫中,那么它們也應該被轉(zhuǎn)移。最后,所有的源文件都應該能互不影響的編譯。唯一共同的東西就是使用指令#含的接口文件。只要按照規(guī)則來做,這樣建立的可移植15蘭州大學2008屆碩士學位論文代碼應該和一部分一部分建立起來的可移植代碼沒有什么不同。最后,我們把管理代碼放在”左邊”(把機器相關(guān)代碼放在”右邊”(2123驅(qū)動程序編程模型驅(qū)動程序模型是用來保證內(nèi)核內(nèi)部的驅(qū)動程序的機器相關(guān)代碼和機器無關(guān)代碼的分離,我們也使用它來使里使用的(低等級)驅(qū)動模型符合以下準則:1便于將來移植2邏輯上的分塊3對代碼的目的有一個清楚而并非模糊的的認識盡管這兩部分代碼有可能被認為是密不可分的,但是上述的這個規(guī)則的集合可以保證將它們分開。就像前面說的,代碼分為兩種:機器相關(guān)代碼和機器無關(guān)代碼,這正證明了上面列出的第二個規(guī)則。最終一個真正的驅(qū)動只包含通過驅(qū)動程序接口來訪問的機器相關(guān)代碼,這樣就做到了邏輯上的分塊。在內(nèi)核中使用驅(qū)動程序模型的目的是使把與內(nèi)核不相關(guān)部分(機器相關(guān)代碼)獨立出來。而與內(nèi)核相關(guān)部分指的是:內(nèi)核如何使得內(nèi)存能夠被訪問的方法,調(diào)度進程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論