nachos系統(tǒng)管理與調(diào)度分析課程設(shè)計(jì)說明書_第1頁
nachos系統(tǒng)管理與調(diào)度分析課程設(shè)計(jì)說明書_第2頁
nachos系統(tǒng)管理與調(diào)度分析課程設(shè)計(jì)說明書_第3頁
nachos系統(tǒng)管理與調(diào)度分析課程設(shè)計(jì)說明書_第4頁
nachos系統(tǒng)管理與調(diào)度分析課程設(shè)計(jì)說明書_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、For personal use only in study and research; not for commercial use一Forpersonaluseonlyinstudyandresearch;notfor目錄一、背景知識(shí)11、 1Nachos的介紹11、2Nachos的目錄結(jié)構(gòu)21、3線程基石知識(shí)3二、設(shè)計(jì)要求和目的42、 1Nachos的線程管理模塊42、2Nachos的線程線程調(diào)度算法分析42、3編程語言選擇對(duì)比52、4開發(fā)環(huán)境配置62、5NachOS系統(tǒng)和交叉編譯器安裝62、5、1NachOS系統(tǒng)安裝62、5、2交叉編譯器環(huán)境的安裝7三、設(shè)計(jì)思路和程序結(jié)構(gòu)83、1線程的

2、生成和狀態(tài)轉(zhuǎn)換83、1、1基于五狀態(tài)模型83、1、2線程創(chuàng)建過程83、2線程調(diào)度機(jī)制8四、關(guān)鍵代碼分析94、1擴(kuò)充線程管理94、2擴(kuò)充線程調(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、1Nachos的介紹Nachos的全稱是NotAnotherCompletelyHeuristicOperatingSystem,是一個(gè)可修改和跟蹤的操作系統(tǒng)教學(xué)軟件。它給出了一個(gè)支持多線程和虛擬存儲(chǔ)的操作系統(tǒng)骨架,可讓學(xué)生在較短的時(shí)間

3、內(nèi)對(duì)操作系統(tǒng)中的基本原理和核心算法有一個(gè)全面和完整的了解。NachOS提供了可重復(fù)的調(diào)試環(huán)境和模擬操作系統(tǒng)及底層硬件。目的是為學(xué)習(xí)者展示真實(shí)的操作系統(tǒng)運(yùn)行時(shí)的環(huán)境,這個(gè)簡(jiǎn)單的操作系統(tǒng)軟件可以讓學(xué)習(xí)者在較短的時(shí)間內(nèi)理解并能夠用自己的想法來完善它。免費(fèi)的開源開發(fā)包可通過網(wǎng)絡(luò)下載,通常包括以下幾部分:1)NachOS概述2)簡(jiǎn)單可運(yùn)行的操作系統(tǒng)代碼3)模擬器一一個(gè)人電腦或工作站4)任務(wù)樣本:任務(wù)說明和現(xiàn)代操作系統(tǒng)涉及的所有項(xiàng),包括線程和并發(fā),多道程序,系統(tǒng)調(diào)用,虛擬內(nèi)存管理,文件系統(tǒng)管理,網(wǎng)絡(luò)協(xié)議,遠(yuǎn)程過程調(diào)用和分布式系統(tǒng)。5) C+編程索引(NachOS是C+子集編程,簡(jiǎn)單易學(xué)。這個(gè)索引將對(duì)C語言

4、程序員有所幫助)Nachos操作系統(tǒng)本身只提供了一套框架,很多地方的實(shí)現(xiàn)都需要我們自己來完善,因此我們可以通過修改其源代碼,來豐富和增強(qiáng)Nachos操作系統(tǒng)的功能.更可以在完善這些功能的同時(shí),了解操作系統(tǒng)的內(nèi)部運(yùn)行機(jī)制.Nachos模擬了MIPSR2/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ī)部分作移植即可。MIPSR2/3000的指令集的優(yōu)勢(shì):

5、RISC指令集,指令書目少,Nachos模擬其中的63條。編譯器:GCC可直接將C/C+源程序編譯成該指令集的目標(biāo)代碼,而不必重寫編譯器。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è)部分的接口,但是又沒有全面的運(yùn)用到面向?qū)ο蟮男再|(zhì),例如繼承性、多

6、態(tài)性,這使得代碼更易讀和理解。Nachos分五個(gè)功能模塊:機(jī)器模擬、線程管理、文件系統(tǒng)管理、用戶程序和虛擬存儲(chǔ)以及網(wǎng)絡(luò)系統(tǒng)。由于Nachos開發(fā)沒有針對(duì)windows平臺(tái)的移植,Nachos需要在虛擬機(jī)上實(shí)現(xiàn),所以需要首先實(shí)現(xiàn)創(chuàng)建虛擬機(jī),創(chuàng)建linux虛擬機(jī)來實(shí)現(xiàn)nachos代碼的編譯運(yùn)行。具有Nachos運(yùn)行時(shí)更像一個(gè)進(jìn)程,但是它是完全按照操作系統(tǒng)思想開發(fā)的操作系統(tǒng)內(nèi)核,完整的操作系統(tǒng)結(jié)構(gòu)。本設(shè)計(jì)有全套小腳4:包括源程序、數(shù)據(jù)庫.說明書,答辯PPT等,除QQ:1415736481獲取!也可代做其它題目的畢業(yè)設(shè)計(jì)用戶程序線程管理網(wǎng)絡(luò)協(xié)設(shè)文希手統(tǒng)虛授內(nèi)存終端設(shè)備肘伸網(wǎng)絡(luò)磁盤中斷系統(tǒng)指令簫拜和內(nèi)存

7、模損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ù)。宿主機(jī)CPU和寄存器系統(tǒng)線程系統(tǒng)線程系統(tǒng)線程-用戶程為 系統(tǒng)續(xù)程 系統(tǒng)戰(zhàn)程用戶程序-用戶程.不 系統(tǒng)線程 用戶進(jìn)程虛擬機(jī)CPU和寄存器圖3.4Nachos中的系統(tǒng)線程和用戶進(jìn)程1、 2 Nachos的目錄結(jié)構(gòu)copyright文件Nachosreadme 文件 Nachos nachos.ps 文件Nachosc+example 目錄 doc 目錄Nachoscode 目錄Nachos的版權(quán)信

8、息的readme信息的介紹文檔(Postscript 格式)有關(guān)C+吩紹和實(shí)例各個(gè)部分介紹和原有的作業(yè)要求各個(gè)部分的源代碼最主要的Nachos的源代碼部分MakefileMakefile.depNachos 的 Makefile 文件,Nachos需要移植到其它系統(tǒng)時(shí),可以修改Makefile.dep中的HOST參數(shù)machine目錄Nachos虛擬機(jī)模擬部分源代碼threads目錄Nachos線程管理部分源代碼filesys目錄Nachos文件系統(tǒng)管理部分源代碼userprog目錄Nachos用戶程序部分源代碼network目錄Nachos網(wǎng)絡(luò)管理部分源代碼vm目錄Nachos虛擬內(nèi)存管理部

9、分源代碼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í)行。由于線程之間的相互制約,致使線程在運(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ù)空間,而多

10、個(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)度程序來決定何時(shí)執(zhí)行,根據(jù)優(yōu)先級(jí)來調(diào)度.線程組每個(gè)線程都是一個(gè)線程組的一個(gè)成員,線程組把多個(gè)線程集成一個(gè)對(duì)象,通過線程組可以同時(shí)對(duì)其中的多個(gè)線程進(jìn)行操作.在生成線程時(shí)必須將線程放在指定的線程組,也可以放在缺省的線程組中,缺省的就是生成該線程的線程所在的線程組.一旦一個(gè)線程加入了某個(gè)線程組,不能被移出這個(gè)組.進(jìn)程和線程的關(guān)系在引入線程機(jī)制后,進(jìn)

11、程不再是單一的動(dòng)態(tài)實(shí)體,而是由兩部分組成:各線程活動(dòng)的環(huán)境,包括:統(tǒng)一的地址控件、全局變量、打開文件和計(jì)時(shí)器等。若干個(gè)線程,它們是進(jìn)程中的活動(dòng)部分,也是處理機(jī)的調(diào)度單位,而進(jìn)程不再是處理機(jī)的最小調(diào)度單位。一個(gè)進(jìn)程中的所有線程在同一地址空間中活動(dòng),共享該地址空間中的全局變量,共享打開文件和計(jì)時(shí)器等。它們總是相互協(xié)作,各自承擔(dān)一個(gè)作業(yè)中的某個(gè)部分。與傳統(tǒng)的進(jìn)程相似,線程具有狀態(tài)的變化。通常,這些狀態(tài)是:運(yùn)行、阻塞、就緒或終止。二、設(shè)計(jì)要求和目的Nachos的運(yùn)宿主機(jī)通過軟件模擬了各種硬件系統(tǒng),包括中斷系統(tǒng)、存儲(chǔ)系統(tǒng)、磁盤文件行必須借助于、網(wǎng)絡(luò)等。它的運(yùn)行是可以跟蹤的,因此,我們可以一步一步的觀察操

12、作系統(tǒng)是如何運(yùn)彳T的.對(duì)于線程的管理,主要涉及到線程的擴(kuò)充、nachos線程的調(diào)度機(jī)制和線程優(yōu)先級(jí)。2、1Nachos的線程管理模塊Nachos平臺(tái)所使用的是非搶占式調(diào)度,線程一旦占用CPU就會(huì)一直運(yùn)行到結(jié)束或者被阻塞(等待I/O事件);Nachos平臺(tái)中的線程數(shù)據(jù)結(jié)構(gòu)定義非常簡(jiǎn)單,并無用戶ID、線程ID等數(shù)據(jù)成員,也就是說,無法基于線程的ID來實(shí)現(xiàn)通信、同步互斥等機(jī)制。Nachos平臺(tái)中并無全局性的線程管理機(jī)制,并未限制線程的數(shù)目,也無法了解有多少線程存在。通過修改Nachos系統(tǒng)平臺(tái)的底層源代碼來實(shí)現(xiàn)以下目標(biāo):1 .擴(kuò)充線程數(shù)據(jù)結(jié)構(gòu)。增加“用戶ID、線程ID”兩個(gè)數(shù)據(jù)成員,同時(shí)在Nacho

13、s現(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)存中?!皰炱稹睜顟B(tà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í)行該命令

14、,可以在屏幕上顯示目前所有存在的線程信息,包括“用戶ID“、“線程ID”、“當(dāng)前狀態(tài)”等。5 .實(shí)現(xiàn)一個(gè)同步與互斥的例子。在完成以上修改后,可編寫一個(gè)實(shí)例程序,來實(shí)現(xiàn)某個(gè)“同步-互斥”經(jīng)典問題的正確解法。例如可選擇“哲學(xué)家就餐”問題,實(shí)例程序會(huì)創(chuàng)建5個(gè)哲學(xué)家線程,這些線程擁有同樣的用戶ID,可以遵循“信號(hào)量”機(jī)制來正確的運(yùn)行。也可以選擇“生產(chǎn)者消費(fèi)者”問題等其他經(jīng)典IPC問題。2、2Nachos的線程線程調(diào)度算法分析Nachos平臺(tái)所使用的是非搶占式調(diào)度,線程一旦占用CPU就會(huì)一直運(yùn)行到結(jié)束或者被阻塞(等待I/O事件);Nachos平臺(tái)中的線程數(shù)據(jù)結(jié)構(gòu)定義非常簡(jiǎn)單,并無用戶ID、線程ID等數(shù)據(jù)

15、成員,也就是說,無法基于線程的ID來實(shí)現(xiàn)通信、同步互斥等機(jī)制。Nachos平臺(tái)中并無全局性的線程管理機(jī)制,并未限制線程的數(shù)目,也無法了解有多少線程存在。Sysdep模塊實(shí)現(xiàn)機(jī)制分析:sysdep.ccsysdep.h屏蔽OS間的系統(tǒng)調(diào)用或函數(shù)調(diào)用在形式和內(nèi)容上可能有的細(xì)微差別中斷處理模塊實(shí)現(xiàn)機(jī)制分析:interrupt.cc.h模擬底層中斷機(jī)制一一時(shí)鐘中斷、磁盤中斷、終端讀/寫中斷、網(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

16、模擬終端輸入和輸出,鍵盤的輸入和顯示輸出,異步,當(dāng)發(fā)出終端的輸入輸出請(qǐng)求后系統(tǒng)即返回,需要等待中斷發(fā)生后才是真正完成了整個(gè)過程。磁盤設(shè)備模塊實(shí)現(xiàn)機(jī)制分析:disk.cc.h模擬物理磁盤,nachos用宿主機(jī)種的一個(gè)文件模擬單面物理磁盤,異步工具模塊:list.cc.hutility.cc.h定義鏈表結(jié)構(gòu)及操作線程啟動(dòng)和調(diào)度模塊:switch.sswitch.h線程定義模塊:thread.cc.h線程調(diào)度算法模塊:scheduler.cc.hnachos主控模塊:main.ccsystem.ccsystem.hnachos系統(tǒng)入口,分析nachos命令行參數(shù),根據(jù)不同的選項(xiàng)進(jìn)行不同功能的初始化設(shè)

17、置同步磁盤:文件synchdisk.cc.h文件系統(tǒng)模塊:filesys.cc.h模擬創(chuàng)建文件、刪除文件、打開文件操作文件頭模塊:文件filehdr.cc.h打開文件結(jié)構(gòu):文件openfile.cc.h目錄模塊:directory.cc.hmachine.h:包含了內(nèi)存的相關(guān)定義machine.cc:包含了對(duì)內(nèi)存和頁表的初始化translate.h:定義了頁表結(jié)構(gòu)translate.cc:包含了地址轉(zhuǎn)換的實(shí)現(xiàn)以及讀、寫內(nèi)存的操作address.cc:包含了用戶程序頁表的操作2、3編程語言選擇對(duì)比2.Java編程的優(yōu)勢(shì):1.簡(jiǎn)單,面向?qū)ο?,穩(wěn)定,跨平臺(tái),多線程,動(dòng)態(tài)面向?qū)ο蠡趯?duì)象的編程更符合人

18、的思維模式,更容易編寫程序3.類運(yùn)行時(shí)動(dòng)態(tài)加載,使得Java可以在分布式環(huán)境下動(dòng)態(tài)的維護(hù)程序及類庫,當(dāng)類庫升級(jí)時(shí)也不必重新修改、編譯。缺點(diǎn):程序速度較慢,不適合做實(shí)時(shí)性很強(qiáng)的開發(fā)C+副程的優(yōu)勢(shì):1.增加了面向?qū)ο蟮乃枷耄怯旨婢呙嫦蜻^程的方法2.兼容C缺點(diǎn):指針調(diào)用完成后需要手工釋放內(nèi)存,容易造成內(nèi)存泄露而程序崩潰2、4開發(fā)環(huán)境配置開發(fā)環(huán)境配置:標(biāo)準(zhǔn)配置計(jì)算機(jī)硬件內(nèi)存1G;CPUCorei332位軟件Windows7;ubuntu10.04交叉編譯器GCC2.95.4運(yùn)行環(huán)境配置:標(biāo)準(zhǔn)配置計(jì)算機(jī)硬件內(nèi)存1G;CPUCorei332位軟件Windows7;ubuntu10.04交叉編譯器GCC

19、2.95.42、5NachOS系統(tǒng)和交叉編譯器安裝2、5、1NachOS系統(tǒng)安裝ubuntu10.04gcc-vReadingspecsfrom/usr/lib/gcc-lib/i486-linux-gnu/gccversion2.95.4(Debianprerelease)1、解壓NachOS-rootubuntu:-$tar-zxvfNachOS-2、運(yùn)行makedependrootubuntu:/桌面/NachOS-4.1/code/build.linux#makedepend3、運(yùn)行makerootubuntu:/桌面/NachOS-4.1/code/build.linux#make4

20、、運(yùn)行nachosrootubuntu:/桌面/NachOS-4.1/code/build.linux#./nachostestssummary:ok:0Machinehalting!Ticks:total10,idle0,system10,user0DiskI/O:reads0,writes0ConsoleI/O:reads0,writes0Paging:faults0NetworkI/O:packetsreceived0,sent02、5、2交叉編譯器環(huán)境的安裝在編譯前直接解壓到local根目錄下1、編譯生成coff2noff工具:運(yùn)行configre2 .運(yùn)行make生成coff2nof

21、f3 .編譯test目錄下文件修改test/Makefile.dep中變量cpp和GCCDIR為正確的交叉編譯器路徑rootubuntu:/NachOS-4.1/code/test#vimMakefile.dep4 .編譯test目錄中的程序rootubuntu:/NachOS-4.1/code/test#makerootubuntu:/NachOS-4.1/code/test#ls*.noffadd.noffhalt.noffopen.noffshell.noffwrite.noffexec.noffmatmult.noffread.noffsort.noff5、執(zhí)行NachOS格式文件ro

22、otubuntu:/NachOS-4.1/code/build.linux#./nachos-x./test/halt.nofftestssummary:ok:0Machinehalting!Ticks:total21,idle0,system10,user11DiskI/O:reads0,writes0ConsoleI/O:reads0,writes0Paging:faults0NetworkI/O:packetsreceived0,sent0三、設(shè)計(jì)思路和程序結(jié)構(gòu)3、1線程的生成和狀態(tài)轉(zhuǎn)換3、1、1基于五狀態(tài)模型本設(shè)計(jì)有全套完整白蟒料:包括源程序.數(shù)據(jù)庫(說明書,答辯PPT等,麻素QQ:1

23、415736481獲取!也可代做其它題目的畢業(yè)設(shè)計(jì)3、1、2線程創(chuàng)建過程擴(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ù)超過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)中,線程沒有優(yōu)先級(jí),每次將線程放入到就緒隊(duì)列時(shí)即是將線程放到隊(duì)尾,因此若要改變系統(tǒng)調(diào)用的線程順序則需要確定各線程的優(yōu)先級(jí)。擴(kuò)充線程調(diào)度機(jī)制,測(cè)試線程數(shù)為3個(gè)1)在Sc

24、heduler類中增加一個(gè)成員函數(shù),表示線程的優(yōu)先級(jí),增加靜態(tài)的優(yōu)先級(jí)調(diào)度2)在Thread類中增加一個(gè)函數(shù)來對(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í)行四、關(guān)鍵代碼分析4、1擴(kuò)充線程管理code/threads仆白thread.cc和thread.h是線程管理部分的文件代碼修改:Thread.h定義靜態(tài)成員變量threadNum表示線程數(shù)量93 1Iu1.人.日-ions94 staticintthreadNurnT?)95 -96 voidFork

25、(VoidFunctionPtrfunc,void*arg);Thread.ccJd24Sincludemachine.hn25i/duheooo,heexecuLon26 constintSTACK_FENCEPOST-Oxdedbeef;3t3 73839404142434427 intThread:】th匚eadNuiu二;Thread:Thread(charthreadName).3rO二128)Bcout*mostnumberis128nendlp)XASSRTJthreadNum=coutfrcreatethread,TthreadNuinGurrentThread);44&4“4

26、47448449450451staticvoidSimpleTnreadintwmch)Xintnux;for(num-:;Qium3;num+)cout-,*tKrtaJ-_-_MhhhrW?MloopednumcurrentThread-setPriority(kernel-currentThread-geiSelfTest()測(cè)試創(chuàng)建線程43464465466467468469470471472473474475476voidThread:SelfTest()S(DEBUG(dbgThread,EnteringThread::SelfTestH);kernel-currentThread

27、-Yield();SimpieThread(0);4、2擴(kuò)充線程調(diào)度機(jī)制代碼修改:Scheduler類中添加全局靜態(tài)優(yōu)先級(jí)Thread.h858c87888990public:Thread(char*debugName);ifJr/haJ.UmfThread(char*debugName,intprio);Thread();/deallocc/NOTEthreadk136priority;137138139140141142143144145146147148Thread.cc9 0 12 3 4 5 6 7 8 9 0 125 6 666666 6 667776 9 0 12 3 43 3

28、4 4 4 4 42 2 2 2 2 2 2retxirn priority;1;du 丫 T c 丁 i tO;/ void. setPriority (int prio) if(prio MAXF) priority = 7;else if (prio MINP)riThread:Thread(char*threadName /int prio) EH name = threadName; stackTop = NULL; stack = NULL;status = JUST_CREATED;3一三Priority (prio); for (int i = i interrupt-SetL

29、evel(intoffi;ASSERTthis kernel- -currentThr&ad:;DEBUG : dbgThreadj ,fYielding thread : ” name );ifnextThread = kernel scheduler :FindNextToRun();extThread- .-getPriority :scheduler - *ReadyToRun : nextThreadkernel -;-scheduier-ReadyroRun this);kernel-, scheduler-Run:nextThread, FALSE);q3;staticvoid4

30、38SimpleThread(intwhich)439440intnum;441442日for(num=0;num3;num+)443tout”*threadnwhichloopednumcurrentThread-setPriority(kernel-currentThread-get456void457Thread:SelfTest()4584594 60DEBUG:dbgThread, Entering Thread:SelfTeat473474475476477Threnew new nawThread” forked Thread iforked Threadi” forked13-

31、 Fd ( (VoidFunct icnPtr)SistipleThread ();4、3擴(kuò)充線程調(diào)度機(jī)制改進(jìn)4、3、1信號(hào)量機(jī)制classSemaphorepublic:voidP();核心操作:/禁止中斷,并保存初始中斷狀態(tài)。因?yàn)殚_始時(shí)中斷也可能處于被禁止?fàn)顟B(tài),所以操作結(jié)束后要恢復(fù)到初始狀態(tài)而不是使能中斷。IntStatusoldLevel=interrupt-SetLevel(IntOff);/當(dāng)信號(hào)量為0時(shí),將當(dāng)前進(jìn)程放到等待隊(duì)列里面,并設(shè)置為睡眠模式,/參數(shù)值為FALS耒示,進(jìn)程沒有正常結(jié)束而要被掛起。voidV();核心操作:/禁止中斷IntStatusoldLevel=inter

32、rupt-SetLevel(IntOff);/如果隊(duì)列不為空說明有當(dāng)前進(jìn)程因?yàn)橐R界資源被別的進(jìn)程訪問而掛起,所以V操作首先應(yīng)將當(dāng)前進(jìn)程設(shè)置為READY犬態(tài),以繼續(xù)運(yùn)行并訪問臨界資源private:intvalue;/信號(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操作

33、1 .如果線程等待隊(duì)列中有等待該信號(hào)量的線程,取出其中一個(gè)將其設(shè)置成就緒態(tài),準(zhǔn)備運(yùn)行。2 .value+;4、3、2實(shí)現(xiàn)用戶更改進(jìn)程優(yōu)先級(jí)intSysWrite(char*buffer,intsize,OpenFileIdid);intSysRead(char*buffer,intsize,OpenFileIdid);SpaceIdSysExec(char*exec_name);intSysJoin(SpaceIdid);intSysStrncmp(char*buffer,char*str,intn)除此外添加一個(gè)處理異常的類Exception.cc相應(yīng)的需要修改shell類中的代碼,進(jìn)行測(cè)試

34、rootubuntu:/桌面/NachOS-4.1/code/build.linux#./nachos-x./test/shell.noff五、測(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_STUB-DRDATA-DSIM_FIX-DTUT-Dx86-

35、DLINUX-DCHANGED-c./threads/thread.cc./threads/thread.cc:InmemberfunctionvoidThread:SelfTest():./threads/thread.cc:471:warning:deprecatedconversionfromstringconstanttochar*g+bitmap.odebug.olibtest.osysdep.ointerrupt.ostats.otimer.oconsole.omachine.omipssim.otranslate.onetwork.odisk.oalarm.okernel.oma

36、in.oscheduler.osynch.othread.oaddrspace.oexception.osynchconsole.odirectory.ofilehdr.ofilesys.opbitmap.oopenfile.osynchdisk.opost.oswitch.o-onachosrootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux#./nachostestssummary:ok:flcreate*?ireadlcreatethread2Machinehaltirvg!Ticks:total1BfidleG.system1孰u

37、serDiskI/O:reads孰writes8ConsoleI/O?reads電wn:esePaging:faulTs0WtuorkI/O:packetsreceivedet方ent6rootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux#./nachos-x./test/halt.nofftestssusury:createthread1createthreadZMachinehalting?Ticks:total21(idle孰systew16,user11Diskt/0;readse,writeseConsoleI/O:readse

38、,writesGPaqin|:taulrs6Setwor.I/O:packetsreceivedBr2nitO5、2測(cè)試創(chuàng)建線程rootubuntu:/桌面/18新/a測(cè)試創(chuàng)建線程/NachOS-4.1/code/build.linux#./nachos-Ktestswumary:ak:6createthreadlcreatethread?createthread3createthread4createthreadscreatethreadCcreatethread7cr-d:tlh-edd8CreHethread121createthread122createthread123createt

39、hread134createthread125Crealethreadl26crcatcthread127crMtethreadl2Hmostnumberis128Assertionfailedl:line41file.threads/threidl.ee5、3測(cè)試線程優(yōu)先級(jí)rootubuntu:/NachOS-4.1/code/build.linux#./nachos-Ktestssuwary:ok:ethread9looped6tl配5thread2loopedetiMesthread2loopeditunes*-*ttiread2looped2threadeloopediBthread3

40、loopedetl=5thread3loopeditiMesthread3looped2tiesthread6looped2tiaesA*Thread1loopedeUses-thread1loopedI,thread1looped2tiaesMdehaltingTicks:Total24W,idle8.system2416,user8th5kI/O:readsg,writes6ConsoleI/O:readsefwrites6Paging:faultsBnetwork1,。:packet%reEivedB.sent8六、總結(jié)通過這次對(duì)nachos線程機(jī)制的擴(kuò)充,較深入理解了操作系統(tǒng)的內(nèi)核中對(duì)

41、線程的管理和基本調(diào)度,對(duì)線程的4種狀態(tài)也有了較好的了解和運(yùn)用。只是這個(gè)是線程的基于優(yōu)先級(jí)的搶占式調(diào)度是靜態(tài)的,動(dòng)態(tài)的搶占式線程調(diào)度還沒有很好的實(shí)現(xiàn)。本次課程設(shè)計(jì)主要圍繞nachos線程模塊做了分析,覺得nachos雖小但是它是一個(gè)完整的基本的操作系統(tǒng),各個(gè)模塊的實(shí)現(xiàn)雖然簡(jiǎn)單,但是它們之間相互協(xié)作能夠形成一個(gè)系統(tǒng),我覺得這就是操作系統(tǒng)的精髓,正如積小流以成江河的道理一樣。真正的做一個(gè)操作系統(tǒng),我認(rèn)為不在于其算法有多優(yōu)秀,而在于其算法有多適用,算法的適用都是因不同的環(huán)境而定的。這次課程設(shè)計(jì),我閱讀了不少的代碼,從實(shí)踐的角度了解了操作系統(tǒng),我覺得我的收獲很大。操作系統(tǒng)不僅僅是一門理論性很強(qiáng)的課程,我

42、覺得應(yīng)該更看重它的實(shí)用性。有些東西本來是很通俗易理的,拿到理論的層面上,便變得很枯燥、很難懂。Nachos利用其簡(jiǎn)單易懂的設(shè)計(jì)使我們對(duì)課本上的概念有了更深刻的理解。在這次作業(yè)的過程中遇到一些困難,因?yàn)樽约旱碾娔X是64位的,而能找到的交叉編譯器只有32位的,這對(duì)作業(yè)的進(jìn)度造成很大的影響,因?yàn)檫@只能用同學(xué)的電腦做,但是尤其同學(xué)也有自己的課程設(shè)計(jì)要做,因此時(shí)間上就顯得少了,最后只實(shí)現(xiàn)了少部分的功能。慶幸的是,Code:blocks10.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í)的過程中,經(jīng)常與之打交道,但是并不知道它是怎樣實(shí)現(xiàn)進(jìn)程的調(diào)度的,再有一點(diǎn)是我們對(duì)硬件也不是很熟悉它們的構(gòu)造。盡管在學(xué)習(xí)電子技術(shù)時(shí)接觸到一些,但是畢竟沒有親手動(dòng)手去做

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論