版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、;.操作系統(tǒng)課程設(shè)計(jì)基于NachOS的課程設(shè)計(jì) .;.目錄一、背景知識(shí)11、1 Nachos的介紹11、2 Nachos的目錄結(jié)構(gòu)21、3 線程基礎(chǔ)知識(shí)3二、設(shè)計(jì)要求和目的42、1 Nachos的線程管理模塊42、2 Nachos的線程線程調(diào)度算法分析42、3 編程語(yǔ)言選擇對(duì)比52、4 開(kāi)發(fā)環(huán)境配置62、5 NachOS 系統(tǒng)和交叉編譯器安裝62、5、1 NachOS 系統(tǒng)安裝62、5、2 交叉編譯器環(huán)境的安裝7三、 設(shè)計(jì)思路和程序結(jié)構(gòu)83、1 線程的生成和狀態(tài)轉(zhuǎn)換83、1、1 基于五狀態(tài)模型83、1、2 線程創(chuàng)建過(guò)程83、2 線程調(diào)度機(jī)制8四、 關(guān)鍵代碼分析94、1 擴(kuò)充線程管理94、2 擴(kuò)
2、充線程調(diào)度機(jī)制104、3 擴(kuò)充線程調(diào)度機(jī)制改進(jìn)124、3、1 信號(hào)量機(jī)制124、3、2 實(shí)現(xiàn)用戶更改進(jìn)程優(yōu)先級(jí)13五、 測(cè)試135、1 測(cè)試NachOS 環(huán)境和交叉編譯器135、2 測(cè)試創(chuàng)建線程145、3 測(cè)試線程優(yōu)先級(jí)15六、 總結(jié)15.一、背景知識(shí)1、1 Nachos的介紹Nachos的全稱是“Not Another Completely Heuristic Operating System”,是一個(gè)可修改和跟蹤的操作系統(tǒng)教學(xué)軟件。它給出了一個(gè)支持多線程和虛擬存儲(chǔ)的操作系統(tǒng)骨架,可讓學(xué)生在較短的時(shí)間內(nèi)對(duì)操作系統(tǒng)中的基本原理和核心算法有一個(gè)全面和完整的了解。NachOS 提供了可重復(fù)的調(diào)試環(huán)
3、境和模擬操作系統(tǒng)及底層硬件。目的是為學(xué)習(xí)者展示真實(shí)的操作系統(tǒng)運(yùn)行時(shí)的環(huán)境,這個(gè)簡(jiǎn)單的操作系統(tǒng)軟件可以讓學(xué)習(xí)者在較短的時(shí)間內(nèi)理解并能夠用自己的想法來(lái)完善它。免費(fèi)的開(kāi)源開(kāi)發(fā)包可通過(guò)網(wǎng)絡(luò)下載,通常包括以下幾部分:1) NachOS 概述2) 簡(jiǎn)單可運(yùn)行的操作系統(tǒng)代碼3) 模擬器個(gè)人電腦或工作站4) 任務(wù)樣本:任務(wù)說(shuō)明和現(xiàn)代操作系統(tǒng)涉及的所有項(xiàng),包括線程和并發(fā),多道程序,系統(tǒng)調(diào)用,虛擬內(nèi)存管理,文件系統(tǒng)管理,網(wǎng)絡(luò)協(xié)議,遠(yuǎn)程過(guò)程調(diào)用和分布式系統(tǒng)。5) C+ 編程索引(NachOS 是C+ 子集編程,簡(jiǎn)單易學(xué)。這個(gè)索引將對(duì)C 語(yǔ)言程序員有所幫助)Nachos操作系統(tǒng)本身只提供了一套框架,很多地方的實(shí)現(xiàn)都需
4、要我們自己來(lái)完善,因此我們可以通過(guò)修改其源代碼,來(lái)豐富和增強(qiáng)Nachos操作系統(tǒng)的功能.更可以在完善這些功能的同時(shí),了解操作系統(tǒng)的內(nèi)部運(yùn)行機(jī)制.Nachos 模擬了MIPS R2/3000的指令集、主存、中斷系統(tǒng)、網(wǎng)絡(luò)以及磁盤系統(tǒng)等操作系統(tǒng)所必須的硬件系統(tǒng)。用軟件模擬硬件的可靠性比真實(shí)硬件高得多,不會(huì)因?yàn)橛布收隙鴮?dǎo)致系統(tǒng)出錯(cuò),便于調(diào)試。虛擬機(jī)可以在運(yùn)行時(shí)報(bào)告詳盡的出錯(cuò)信息,更重要的是采用虛擬機(jī)使Nachos的移植變得非常容易,在不同機(jī)器上移植Nachos,只需對(duì)虛擬機(jī)部分作移植即可。MIPS R2/3000的指令集的優(yōu)勢(shì):RISC指令集,指令書(shū)目少,Nachos 模擬其中的63條。編譯器:G
5、CC 可直接將C/C+源程序編譯成該指令集的目標(biāo)代碼,而不必重寫(xiě)編譯器。Nachos 是一個(gè)在宿主機(jī)上運(yùn)行的進(jìn)程,采用雙CPU,即一個(gè)宿主CPU,一個(gè)虛擬機(jī)CPU,不確定性是操作系統(tǒng)所必須具有的特征,而Nachos 采用隨機(jī)因子模擬真實(shí)操作系統(tǒng)的不確定性,使系統(tǒng)運(yùn)行更加真實(shí)。Nachos 是一個(gè)可擴(kuò)展的操作系統(tǒng),可發(fā)揮自己的創(chuàng)造性進(jìn)行擴(kuò)展。Nachos 限制:只有一級(jí)索引結(jié)構(gòu)限制了系統(tǒng)中最大文件的大小。Nachos 可以用面向?qū)ο蟮乃枷雽?shí)現(xiàn),面向?qū)ο蟮姆椒芮宄拿枋霾僮飨到y(tǒng)的各個(gè)部分的接口,但是又沒(méi)有全面的運(yùn)用到面向?qū)ο蟮男再|(zhì),例如繼承性、多態(tài)性,這使得代碼更易讀和理解。Nachos 分五個(gè)
6、功能模塊:機(jī)器模擬、線程管理、文件系統(tǒng)管理、用戶程序和虛擬存儲(chǔ)以及網(wǎng)絡(luò)系統(tǒng)。 由于Nachos開(kāi)發(fā)沒(méi)有針對(duì)windows平臺(tái)的移植,Nachos 需要在虛擬機(jī)上實(shí)現(xiàn),所以需要首先實(shí)現(xiàn)創(chuàng)建虛擬機(jī),創(chuàng)建linux 虛擬機(jī)來(lái)實(shí)現(xiàn)nachos代碼的編譯運(yùn)行。Nachos 運(yùn)行時(shí)更像一個(gè)進(jìn)程,但是它是完全按照操作系統(tǒng)思想開(kāi)發(fā)的操作系統(tǒng)內(nèi)核,具有完整的操作系統(tǒng)結(jié)構(gòu)。 Nachos 系統(tǒng)結(jié)構(gòu),作為一個(gè)簡(jiǎn)單的系統(tǒng)編程,網(wǎng)絡(luò)協(xié)議和文件系統(tǒng)只需夠用即可,這里主要設(shè)計(jì)線程管理和虛擬內(nèi)存,在設(shè)計(jì)時(shí)虛擬內(nèi)存可以暫時(shí)不要考慮。而其他的則可以由現(xiàn)有系統(tǒng)提供,為此,線程管理為主要任務(wù)。1、2 Nachos的目錄結(jié)構(gòu)copyr
7、ight 文件 Nachos 的版權(quán)信息readme 文件 Nachos 的readme 信息nachos.ps 文件 Nachos 的介紹文檔(Postscript 格式)c+example 目錄 有關(guān)C+介紹和實(shí)例doc 目錄 Nachos 各個(gè)部分介紹和原有的作業(yè)要求code 目錄 Nachos 各個(gè)部分的源代碼最主要的Nachos 的源代碼部分MakefileMakefile.depNachos 的Makefile 文件,當(dāng)Nachos 需要移植到其它系統(tǒng)時(shí),可以修改Makefile.dep 中的HOST 參數(shù)machine 目錄 Nachos 虛擬機(jī)模擬部分源代碼threads 目錄
8、 Nachos 線程管理部分源代碼filesys 目錄 Nachos 文件系統(tǒng)管理部分源代碼userprog 目錄 Nachos 用戶程序部分源代碼network 目錄 Nachos 網(wǎng)絡(luò)管理部分源代碼vm 目錄 Nachos 虛擬內(nèi)存管理部分源代碼test 目錄 一些測(cè)試用應(yīng)用程序bin 目錄 包含有用戶程序目標(biāo)碼變換的程序1、3 線程基礎(chǔ)知識(shí)線程基本概念:是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行
9、。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程狀態(tài):就緒、阻塞和運(yùn)行三種基本狀態(tài)。 線程是程序中一個(gè)單一的順序控制流程.在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程. 線程和進(jìn)程的區(qū)別在于,子進(jìn)程和父進(jìn)程有不同的代碼和數(shù)據(jù)空間,而多個(gè)線程則共享數(shù)據(jù)空間,每個(gè)線程有自己的執(zhí)行堆棧和程序計(jì)數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時(shí)間,發(fā)揮利用,根據(jù)具體情況而定. 線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU線程的周期 新建 就緒 運(yùn)行 阻塞 死亡線程調(diào)度與優(yōu)先級(jí) 有線程進(jìn)入了就緒狀態(tài),需要有線程調(diào)度程序來(lái)決定何時(shí)執(zhí)行,根據(jù)優(yōu)先級(jí)來(lái)調(diào)度.線程組 每個(gè)線程都是一個(gè)線程組的
10、一個(gè)成員,線程組把多個(gè)線程集成一個(gè)對(duì)象,通過(guò)線程組可以同時(shí)對(duì)其中的多個(gè)線程進(jìn)行操作.在生成線程時(shí)必須將線程放在指定的線程組,也可以放在缺省的線程組中,缺省的就是生成該線程的線程所在的線程組.一旦一個(gè)線程加入了某個(gè)線程組,不能被移出這個(gè)組.進(jìn)程和線程的關(guān)系在引入線程機(jī)制后,進(jìn)程不再是單一的動(dòng)態(tài)實(shí)體,而是由兩部分組成: 各線程活動(dòng)的環(huán)境,包括:統(tǒng)一的地址控件、全局變量、打開(kāi)文件和計(jì)時(shí)器等。 若干個(gè)線程,它們是進(jìn)程中的活動(dòng)部分,也是處理機(jī)的調(diào)度單位,而進(jìn)程不再是處理機(jī)的最小調(diào)度單位。一個(gè)進(jìn)程中的所有線程在同一地址空間中活動(dòng),共享該地址空間中的全局變量,共享打開(kāi)
11、文件和計(jì)時(shí)器等。它們總是相互協(xié)作,各自承擔(dān)一個(gè)作業(yè)中的某個(gè)部分。與傳統(tǒng)的進(jìn)程相似,線程具有狀態(tài)的變化。通常,這些狀態(tài)是:運(yùn)行、阻塞、就緒或終止。二、設(shè)計(jì)要求和目的Nachos的運(yùn)宿主機(jī)通過(guò)軟件模擬了各種硬件系統(tǒng),包括中斷系統(tǒng)、存儲(chǔ)系統(tǒng)、磁盤文件行必須借助于、網(wǎng)絡(luò)等。它的運(yùn)行是可以跟蹤的,因此,我們可以一步一步的觀察操作系統(tǒng)是如何運(yùn)行的.對(duì)于線程的管理,主要涉及到線程的擴(kuò)充、nachos線程的調(diào)度機(jī)制和線程優(yōu)先級(jí)。2、1 Nachos的線程管理模塊Nachos平臺(tái)所使用的是非搶占式調(diào)度,線程一旦占用CPU,就會(huì)一直運(yùn)行到結(jié)束或者被阻塞(等待I/O事件);Nachos平臺(tái)中的線程數(shù)據(jù)結(jié)構(gòu)定義非常簡(jiǎn)
12、單,并無(wú)用戶ID、線程ID等數(shù)據(jù)成員,也就是說(shuō),無(wú)法基于線程的ID來(lái)實(shí)現(xiàn)通信、同步互斥等機(jī)制。Nachos平臺(tái)中并無(wú)全局性的線程管理機(jī)制,并未限制線程的數(shù)目,也無(wú)法了解有多少線程存在。通過(guò)修改Nachos系統(tǒng)平臺(tái)的底層源代碼來(lái)實(shí)現(xiàn)以下目標(biāo):1.擴(kuò)充線程數(shù)據(jù)結(jié)構(gòu)。增加“用戶ID、線程ID”兩個(gè)數(shù)據(jù)成員,同時(shí)在Nachos現(xiàn)有的線程管理機(jī)制中增加對(duì)這兩個(gè)數(shù)據(jù)成員的維護(hù)機(jī)制。2.擴(kuò)展現(xiàn)有的線程狀態(tài)。Nachos平臺(tái)中的線程狀態(tài)只有“初啟態(tài)”、“就緒態(tài)”、“阻塞態(tài)”、“運(yùn)行態(tài)”四種情況。請(qǐng)?jiān)黾印皰炱穑╯uspending)”這個(gè)狀態(tài),所謂“掛起”是指當(dāng)前的線程映象保存在磁盤文件而不是內(nèi)存中?!皰炱稹睜?/p>
13、態(tài)是未來(lái)實(shí)現(xiàn)“虛擬內(nèi)存管理”的重要基礎(chǔ)。3.修改線程調(diào)度算法。將Nachos平臺(tái)的線程管理機(jī)制調(diào)整為“搶占式”。具體可選擇“時(shí)間片輪轉(zhuǎn)”、“優(yōu)先級(jí)調(diào)度”、“多級(jí)隊(duì)列”等不同的調(diào)度算法。4.增加全局性的線程管理機(jī)制。擴(kuò)充Nachos平臺(tái)的現(xiàn)有操作命令,例如可以增加一個(gè)名為“ThreadView”的命令,執(zhí)行該命令,可以在屏幕上顯示目前所有存在的線程信息,包括“用戶ID“、“線程ID”、“當(dāng)前狀態(tài)”等。5.實(shí)現(xiàn)一個(gè)同步與互斥的例子。在完成以上修改后,可編寫(xiě)一個(gè)實(shí)例程序,來(lái)實(shí)現(xiàn)某個(gè)“同步互斥”經(jīng)典問(wèn)題的正確解法。例如可選擇“哲學(xué)家就餐”問(wèn)題,實(shí)例程序會(huì)創(chuàng)建5個(gè)哲學(xué)家線程,這些線程擁有同樣的用戶ID,
14、可以遵循“信號(hào)量”機(jī)制來(lái)正確的運(yùn)行。也可以選擇“生產(chǎn)者消費(fèi)者”問(wèn)題等其他經(jīng)典IPC問(wèn)題。2、2 Nachos的線程線程調(diào)度算法分析Nachos平臺(tái)所使用的是非搶占式調(diào)度,線程一旦占用CPU,就會(huì)一直運(yùn)行到結(jié)束或者被阻塞(等待I/O事件);Nachos平臺(tái)中的線程數(shù)據(jù)結(jié)構(gòu)定義非常簡(jiǎn)單,并無(wú)用戶ID、線程ID等數(shù)據(jù)成員,也就是說(shuō),無(wú)法基于線程的ID來(lái)實(shí)現(xiàn)通信、同步互斥等機(jī)制。Nachos平臺(tái)中并無(wú)全局性的線程管理機(jī)制,并未限制線程的數(shù)目,也無(wú)法了解有多少線程存在。Sysdep模塊實(shí)現(xiàn)機(jī)制分析:sysdep.cc sysdep.h屏蔽OS間的系統(tǒng)調(diào)用或函數(shù)調(diào)用在形式和內(nèi)容上可能有的細(xì)微差別中斷處理模
15、塊實(shí)現(xiàn)機(jī)制分析:interrupt.cc .h模擬底層中斷機(jī)制時(shí)鐘中斷、磁盤中斷、終端讀/寫(xiě)中斷、網(wǎng)絡(luò)接收/發(fā)送中斷時(shí)鐘中斷模塊實(shí)現(xiàn)機(jī)制分析:timer.cc .h模擬時(shí)鐘中斷,在nachos指定線程隨機(jī)切換時(shí)啟動(dòng)時(shí)鐘中斷,在每次的時(shí)鐘中斷處理的最后加入線程的切換終端設(shè)備模塊實(shí)現(xiàn)機(jī)制分析:console.cc .h模擬終端輸入和輸出,鍵盤的輸入和顯示輸出,異步,當(dāng)發(fā)出終端的輸入輸出請(qǐng)求后系統(tǒng)即返回,需要等待中斷發(fā)生后才是真正完成了整個(gè)過(guò)程。磁盤設(shè)備模塊實(shí)現(xiàn)機(jī)制分析:disk.cc .h模擬物理磁盤,nachos用宿主機(jī)種的一個(gè)文件模擬單面物理磁盤,異步工具模塊:list.cc .h utili
16、ty.cc .h定義鏈表結(jié)構(gòu)及操作線程啟動(dòng)和調(diào)度模塊:switch.s switch.h線程定義模塊:thread.cc .h線程調(diào)度算法模塊:scheduler.cc .hnachos主控模塊:main.cc system.cc system.hnachos系統(tǒng)入口,分析nachos命令行參數(shù),根據(jù)不同的選項(xiàng)進(jìn)行不同功能的初始化設(shè)置同步磁盤:文件synchdisk.cc .h文件系統(tǒng)模塊:filesys.cc .h模擬創(chuàng)建文件、刪除文件、打開(kāi)文件操作文件頭模塊:文件filehdr.cc .h打開(kāi)文件結(jié)構(gòu):文件openfile.cc .h目錄模塊:directory.cc .hmachine.
17、h:包含了內(nèi)存的相關(guān)定義machine.cc:包含了對(duì)內(nèi)存和頁(yè)表的初始化translate.h:定義了頁(yè)表結(jié)構(gòu)translate.cc:包含了地址轉(zhuǎn)換的實(shí)現(xiàn)以及讀、寫(xiě)內(nèi)存的操作address.cc:包含了用戶程序頁(yè)表的操作2、3 編程語(yǔ)言選擇對(duì)比Java編程的優(yōu)勢(shì):1.簡(jiǎn)單,面向?qū)ο?,穩(wěn)定,跨平臺(tái),多線程,動(dòng)態(tài) 2.面向?qū)ο蠡趯?duì)象的編程更符合人的思維模式,更容易編寫(xiě)程序 3.類運(yùn)行時(shí)動(dòng)態(tài)加載,使得Java 可以在分布式環(huán)境下動(dòng)態(tài)的維護(hù)程序及類庫(kù),當(dāng)類庫(kù)升級(jí)時(shí)也不必重新修改、編譯。 缺點(diǎn):程序速度較慢,不適合做實(shí)時(shí)性很強(qiáng)的開(kāi)發(fā)C+編程的優(yōu)勢(shì):1.增加了面向?qū)ο蟮乃枷耄怯旨婢呙嫦蜻^(guò)程的方法
18、2兼容C 缺點(diǎn):指針調(diào)用完成后需要手工釋放內(nèi)存,容易造成內(nèi)存泄露而程序崩潰2、4 開(kāi)發(fā)環(huán)境配置開(kāi)發(fā)環(huán)境配置:類型標(biāo)準(zhǔn)配置計(jì)算機(jī)硬件內(nèi)存 1G ; CPU Core i3 32位軟件Windows 7;ubuntu 10.04交叉編譯器GCC 2.95.4運(yùn)行環(huán)境配置:類型標(biāo)準(zhǔn)配置計(jì)算機(jī)硬件內(nèi)存 1G ; CPU Core i3 32位軟件Windows 7;ubuntu 10.04交叉編譯器GCC 2.95.42、5 NachOS 系統(tǒng)和交叉編譯器安裝2、5、1 NachOS 系統(tǒng)安裝ubuntu10.04gcc -v Reading specs from /usr/lib/gcc-lib/i
19、486-linux-gnu/2.95.4/specsgcc version 2.95.4 20011002 (Debian prerelease)1、解壓NachOS-4.1.tgzrootubuntu:$ tar -zxvf NachOS-4.1.gz2、運(yùn)行make dependrootubuntu:/桌面/NachOS-4.1/code/build.linux# make depend3、運(yùn)行makerootubuntu:/桌面/NachOS-4.1/code/build.linux# make4、運(yùn)行nachosrootubuntu:/桌面/NachOS-4.1/code/build.
20、linux# ./nachostests summary: ok:0Machine halting!Ticks: total 10, idle 0, system 10, user 0Disk I/O: reads 0, writes 0Console I/O: reads 0, writes 0Paging: faults 0Network I/O: packets received 0, sent 02、5、2 交叉編譯器環(huán)境的安裝在編譯前直接解壓到local根目錄下1、編譯生成coff2noff工具:運(yùn)行configre2.運(yùn)行make生成coff2noff3.編譯test目錄下文件修改
21、test/Makefile.dep中變量cpp和GCCDIR為正確的交叉編譯器路徑rootubuntu:/NachOS-4.1/code/test# vim Makefile.dep4.編譯test目錄中的程序rootubuntu:/NachOS-4.1/code/test# makerootubuntu:/NachOS-4.1/code/test# ls *.noffadd.noff halt.noff open.noff shell.noff write.noffexec.noff matmult.noff read.noff sort.noff5、執(zhí)行NachOS格式文件rootubun
22、tu:/NachOS-4.1/code/build.linux# ./nachos -x ./test/halt.nofftests summary: ok:0Machine halting!Ticks: total 21, idle 0, system 10, user 11Disk I/O: reads 0, writes 0Console I/O: reads 0, writes 0Paging: faults 0Network I/O: packets received 0, sent 03、 設(shè)計(jì)思路和程序結(jié)構(gòu)3、1 線程的生成和狀態(tài)轉(zhuǎn)換3、1、1 基于五狀態(tài)模型3、1、2 線程創(chuàng)建
23、過(guò)程擴(kuò)充線程管理,使其最多同時(shí)存在128個(gè)線程,測(cè)試創(chuàng)建線程1) 在Thread類中增加靜態(tài)成員變量threadNum表示當(dāng)前線程的總數(shù)量2) Fork()創(chuàng)建一個(gè)線程時(shí),threadNum加1,當(dāng)線程總數(shù)超過(guò)128個(gè)線程時(shí),程序終止。并打印終止信息3) 當(dāng)一個(gè)線程終止時(shí)threadNum減14) 當(dāng)系統(tǒng)關(guān)閉時(shí),所有線程都結(jié)束3、2 線程調(diào)度機(jī)制當(dāng)前的NachOS 系統(tǒng)中,線程沒(méi)有優(yōu)先級(jí),每次將線程放入到就緒隊(duì)列時(shí)即是將線程放到隊(duì)尾,因此若要改變系統(tǒng)調(diào)用的線程順序則需要確定各線程的優(yōu)先級(jí)。擴(kuò)充線程調(diào)度機(jī)制,測(cè)試線程數(shù)為3個(gè)1) 在Scheduler類中增加一個(gè)成員函數(shù),表示線程的優(yōu)先級(jí),增加靜
24、態(tài)的優(yōu)先級(jí)調(diào)度2) 在Thread類中增加一個(gè)函數(shù)來(lái)對(duì)就緒隊(duì)列中的線程根據(jù)優(yōu)先級(jí)進(jìn)行排序,將優(yōu)先級(jí)最高的放到隊(duì)首3) 先將線程放入就緒隊(duì)列,然后排序,最后從中選擇下一條要執(zhí)行的線程4) 具有優(yōu)先級(jí)的線程將不再按照順序執(zhí)行而是根據(jù)線程的優(yōu)先級(jí)執(zhí)行4、 關(guān)鍵代碼分析4、1 擴(kuò)充線程管理code/threads/下的thread.cc和thread.h是線程管理部分的文件代碼修改:Thread.h定義靜態(tài)成員變量threadNum表示線程數(shù)量Thread.cc SelfTest () 測(cè)試創(chuàng)建線程4、2 擴(kuò)充線程調(diào)度機(jī)制代碼修改:Scheduler類中添加全局靜態(tài)優(yōu)先級(jí)Thread.hThread.
25、cc4、3 擴(kuò)充線程調(diào)度機(jī)制改進(jìn)4、3、1 信號(hào)量機(jī)制class Semaphore public:void P();核心操作:/禁止中斷,并保存初始中斷狀態(tài)。因?yàn)殚_(kāi)始時(shí)中斷也可能處于被禁止/狀態(tài),所以操作結(jié)束后要恢復(fù)到初始狀態(tài)而不是使能中斷。IntStatus oldLevel = interrupt->SetLevel(IntOff);/當(dāng)信號(hào)量為0時(shí),將當(dāng)前進(jìn)程放到等待隊(duì)列里面,并設(shè)置為睡眠模式,/參數(shù)值為FALSE表示,進(jìn)程沒(méi)有正常結(jié)束而要被掛起。void V();核心操作:/禁止中斷IntStatus oldLevel = interrupt->SetLevel(IntO
26、ff);/如果隊(duì)列不為空說(shuō)明有當(dāng)前進(jìn)程因?yàn)橐R界資源被別的進(jìn)程訪問(wèn)而掛/起,所以V操作首先應(yīng)將當(dāng)前進(jìn)程設(shè)置為READY狀態(tài),以繼續(xù)運(yùn)行并/訪問(wèn)臨界資源 private:int value; /信號(hào)量值 ( >=0)List *queue; /線程等待隊(duì)列;信號(hào)量的私有屬性有信號(hào)量的值,它是一個(gè)閥門。線程等待隊(duì)列中存放所有等待該信號(hào)量的線程。信號(hào)量有兩個(gè)操作:P操作和V操作,這兩個(gè)操作都是原子操作。P操作1. 當(dāng)value等于0時(shí),1.1. 將當(dāng)前運(yùn)行線程放入線程等待隊(duì)列。1.2. 當(dāng)前運(yùn)行線程進(jìn)入睡眠狀態(tài),并切換到其它線程運(yùn)行。2. 當(dāng)value大于0時(shí),value-。V操作1. 如果線
27、程等待隊(duì)列中有等待該信號(hào)量的線程,取出其中一個(gè)將其設(shè)置成就緒態(tài),準(zhǔn)備運(yùn)行。2. value+;4、3、2 實(shí)現(xiàn)用戶更改進(jìn)程優(yōu)先級(jí)int SysWrite(char*buffer ,int size,OpenFileId id);int SysRead(char*buffer ,int size,OpenFileId id);SpaceId SysExec(char* exec_name);int SysJoin(SpaceId id);int SysStrncmp(char*buffer,char *str,int n)除此外添加一個(gè)處理異常的類Exception.cc相應(yīng)的需要修改shell
28、類中的代碼,進(jìn)行測(cè)試rootubuntu:/桌面/NachOS-4.1/code/build.linux# ./nachos -x ./test/shell.noff5、 測(cè)試5、1 測(cè)試NachOS 環(huán)境和交叉編譯器rootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux# makeg+ -ftemplate-depth-100 -Wno-deprecated -g -Wall -I./network -I./filesys -I./userprog -I./threads -I./machine -I./lib -DFILESYS_STU
29、B -DRDATA -DSIM_FIX -DTUT -Dx86 -DLINUX -DCHANGED -c ./threads/thread.cc./threads/thread.cc: In member function void Thread:SelfTest():./threads/thread.cc:471: warning: deprecated conversion from string constant to char*g+ bitmap.o debug.o libtest.o sysdep.o interrupt.o stats.o timer.o console.o mac
30、hine.o mipssim.o translate.o network.o disk.o alarm.o kernel.o main.o scheduler.o synch.o thread.o addrspace.o exception.o synchconsole.o directory.o filehdr.o filesys.o pbitmap.o openfile.o synchdisk.o post.o switch.o -o nachosrootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nachosrootubun
31、tu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nachos -x ./test/halt.noff5、2 測(cè)試創(chuàng)建線程rootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux# ./nachos -K5、3 測(cè)試線程優(yōu)先級(jí)rootubuntu:/NachOS-4.1/code/build.linux# ./nachos -K6、 總結(jié)通過(guò)這次對(duì)nachos線程機(jī)制的擴(kuò)充,較深入理解了操作系統(tǒng)的內(nèi)核中對(duì)線程的管理和基本調(diào)度,對(duì)線程的4種狀態(tài) 也有了較好的了解和運(yùn)用。只是這個(gè)是線程的基于優(yōu)先級(jí)
32、的搶占式調(diào)度是靜態(tài)的,動(dòng)態(tài)的搶占式線程調(diào)度還沒(méi)有很好的實(shí)現(xiàn)。本次課程設(shè)計(jì)主要圍繞nachos線程模塊做了分析,覺(jué)得nachos雖小但是它是一個(gè)完整的基本的操作系統(tǒng),各個(gè)模塊的實(shí)現(xiàn)雖然簡(jiǎn)單,但是它們之間相互協(xié)作能夠形成一個(gè)系統(tǒng),我覺(jué)得這就是操作系統(tǒng)的精髓,正如積小流以成江河的道理一樣。真正的做一個(gè)操作系統(tǒng),我認(rèn)為不在于其算法有多優(yōu)秀,而在于其算法有多適用,算法的適用都是因不同的環(huán)境而定的。這次課程設(shè)計(jì),我閱讀了不少的代碼,從實(shí)踐的角度了解了操作系統(tǒng),我覺(jué)得我的收獲很大。操作系統(tǒng)不僅僅是一門理論性很強(qiáng)的課程,我覺(jué)得應(yīng)該更看重它的實(shí)用性。有些東西本來(lái)是很通俗易懂的,拿到理論的層面上,便變得很枯燥、很
33、難懂。Nachos利用其簡(jiǎn)單易懂的設(shè)計(jì)使我們對(duì)課本上的概念有了更深刻的理解。在這次作業(yè)的過(guò)程中遇到一些困難,因?yàn)樽约旱碾娔X是64位的,而能找到的交叉編譯器只有32位的,這對(duì)作業(yè)的進(jìn)度造成很大的影響,因?yàn)檫@只能用同學(xué)的電腦做,但是尤其同學(xué)也有自己的課程設(shè)計(jì)要做,因此時(shí)間上就顯得少了,最后只實(shí)現(xiàn)了少部分的功能。慶幸的是,Code:blocks 10.05在代碼閱讀和調(diào)試中起到了很大的作用,因?yàn)槠渲С执a的編譯,可以測(cè)試NachOS 各部分的實(shí)現(xiàn)情況,雖然不能將測(cè)試結(jié)果直接輸出,但是間接地給出了各部分是否能實(shí)現(xiàn)。這次課程設(shè)計(jì)應(yīng)該很大一部分得益于此。對(duì)于操作系統(tǒng)的學(xué)習(xí),對(duì)于我們而言其實(shí)是很抽象的,它不像其他課程的學(xué)習(xí),雖然在專業(yè)學(xué)習(xí)的過(guò)程中,經(jīng)常與之打交道,但是并不知道它是怎樣實(shí)現(xiàn)進(jìn)程的調(diào)度的,再有一點(diǎn)是我們對(duì)硬件也不是很熟悉它們的構(gòu)造。盡管
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 光的折射、透鏡成象的課件其它
- 贛南師范大學(xué)科技學(xué)院《行政訴訟法》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南科技學(xué)院《職業(yè)生涯發(fā)展和就業(yè)指導(dǎo)Ⅲ》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《機(jī)械設(shè)備故障診斷》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅中醫(yī)藥大學(xué)《醫(yī)學(xué)實(shí)驗(yàn)技術(shù)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南科技學(xué)院《福利經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2022年上海財(cái)經(jīng)大學(xué)國(guó)際教育學(xué)院自考英語(yǔ)(二)練習(xí)題(附答案解析)
- 七年級(jí)科學(xué)上冊(cè)8.1溶液的形成8.1.2水以外的溶劑學(xué)案無(wú)答案牛津上海版
- 三年級(jí)數(shù)學(xué)下冊(cè)二圖形的運(yùn)動(dòng)第1課時(shí)軸對(duì)稱一教案北師大版
- 冬季行車安全培訓(xùn)課件
- 高職院校油層物理說(shuō)課
- 計(jì)算機(jī)課件:計(jì)算機(jī)安全
- SCH壁厚等級(jí)對(duì)照表
- 道路減速帶減速模型分析
- 35kv及以下架空線路施工及驗(yàn)收規(guī)范
- 身體健康狀況自測(cè)表
- PID控制原理與調(diào)整方法
- 山東昌樂(lè)二中“271高效課堂”解讀
- 配電工程竣工資料
- 花鍵強(qiáng)度校核程序
- 毗尼日用切要20140619最終版
評(píng)論
0/150
提交評(píng)論