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

下載本文檔

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

文檔簡介

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

2、生成和狀態(tài)轉(zhuǎn)換83、1、1基于五狀態(tài)模型83、1、2線程創(chuàng)建過程83、2線程調(diào)度機制8四、關(guān)鍵代碼分析94、1擴充線程管理94、2擴充線程調(diào)度機制104、3擴充線程調(diào)度機制改進124、3、1信號量機制124、3、2實現(xiàn)用戶更改進程優(yōu)先級13五、測試135、1測試NachOS環(huán)境和交叉編譯器135、2測試創(chuàng)建線程145、3測試線程優(yōu)先級15六、總結(jié)15背景知識1、1Nachos的介紹Nachos的全稱是NotAnotherCompletelyHeuristicOperatingSystem,是一個可修改和跟蹤的操作系統(tǒng)教學(xué)軟件。它給出了一個支持多線程和虛擬存儲的操作系統(tǒng)骨架,可讓學(xué)生在較短的時間

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

4、程序員有所幫助)Nachos操作系統(tǒng)本身只提供了一套框架,很多地方的實現(xiàn)都需要我們自己來完善,因此我們可以通過修改其源代碼,來豐富和增強Nachos操作系統(tǒng)的功能.更可以在完善這些功能的同時,了解操作系統(tǒng)的內(nèi)部運行機制.Nachos模擬了MIPSR2/3000的指令集、主存、中斷系統(tǒng)、網(wǎng)絡(luò)以及磁盤系統(tǒng)等操作系統(tǒng)所必須的硬件系統(tǒng)。用軟件模擬硬件的可靠性比真實硬件高得多,不會因為硬件故障而導(dǎo)致系統(tǒng)出錯,便于調(diào)試。虛擬機可以在運行時報告詳盡的出錯信息,更重要的是采用虛擬機使Nachos的移植變得非常容易,在不同機器上移植Nachos,只需對虛擬機部分作移植即可。MIPSR2/3000的指令集的優(yōu)勢:

5、RISC指令集,指令書目少,Nachos模擬其中的63條。編譯器:GCC可直接將C/C+源程序編譯成該指令集的目標(biāo)代碼,而不必重寫編譯器。Nachos是一個在宿主機上運行的進程,采用雙CPU即一個宿主CPU一個虛擬機CPU不確定性是操作系統(tǒng)所必須具有的特征,而Nachos采用隨機因子模擬真實操作系統(tǒng)的不確定性,使系統(tǒng)運行更加真實。Nachos是一個可擴展的操作系統(tǒng),可發(fā)揮自己的創(chuàng)造性進行擴展。Nachos限制:只有一級索引結(jié)構(gòu)限制了系統(tǒng)中最大文件的大小。Nachos可以用面向?qū)ο蟮乃枷雽崿F(xiàn),面向?qū)ο蟮姆椒芮宄拿枋霾僮飨到y(tǒng)的各個部分的接口,但是又沒有全面的運用到面向?qū)ο蟮男再|(zhì),例如繼承性、多

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

7、模損Nachos系統(tǒng)結(jié)構(gòu),作為一個簡單的系統(tǒng)編程,網(wǎng)絡(luò)協(xié)議和文件系統(tǒng)只需夠用即可,這里主要設(shè)計線程管理和虛擬內(nèi)存,在設(shè)計時虛擬內(nèi)存可以暫時不要考慮。而其他的則可以由現(xiàn)有系統(tǒng)提供,為此,線程管理為主要任務(wù)。宿主機CPU和寄存器系統(tǒng)線程系統(tǒng)線程系統(tǒng)線程-用戶程為 系統(tǒng)續(xù)程 系統(tǒng)戰(zhàn)程用戶程序-用戶程.不 系統(tǒng)線程 用戶進程虛擬機CPU和寄存器圖3.4Nachos中的系統(tǒng)線程和用戶進程1、 2 Nachos的目錄結(jié)構(gòu)copyright文件Nachosreadme 文件 Nachos nachos.ps 文件Nachosc+example 目錄 doc 目錄Nachoscode 目錄Nachos的版權(quán)信

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

9、分源代碼test目錄一些測試用應(yīng)用程序bin目錄包含有用戶程序目標(biāo)碼變換的程序1、3線程基礎(chǔ)知識線程基本概念:是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。線程狀態(tài):就緒、阻塞和運行三種基本狀態(tài)。線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多

10、個線程則共享數(shù)據(jù)空間每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定.線程的運行中需要使用計算機的內(nèi)存資源和CPU線程的周期新建就緒運行阻塞死亡線程調(diào)度與優(yōu)先級有線程進入了就緒狀態(tài),需要有線程調(diào)度程序來決定何時執(zhí)行,根據(jù)優(yōu)先級來調(diào)度.線程組每個線程都是一個線程組的一個成員,線程組把多個線程集成一個對象,通過線程組可以同時對其中的多個線程進行操作.在生成線程時必須將線程放在指定的線程組,也可以放在缺省的線程組中,缺省的就是生成該線程的線程所在的線程組.一旦一個線程加入了某個線程組,不能被移出這個組.進程和線程的關(guān)系在引入線程機制后,進

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

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

13、s現(xiàn)有的線程管理機制中增加對這兩個數(shù)據(jù)成員的維護機制。2 .擴展現(xiàn)有的線程狀態(tài)。Nachos平臺中的線程狀態(tài)只有“初啟態(tài)”、“就緒態(tài)”、“阻塞態(tài)”、“運行態(tài)”四種情況。請增加“掛起(suspending)”這個狀態(tài),所謂“掛起”是指當(dāng)前的線程映象保存在磁盤文件而不是內(nèi)存中?!皰炱稹睜顟B(tài)是未來實現(xiàn)“虛擬內(nèi)存管理”的重要基礎(chǔ)。3 .修改線程調(diào)度算法。將Nachos平臺的線程管理機制調(diào)整為“搶占式”。具體可選擇“時間片輪轉(zhuǎn)”、“優(yōu)先級調(diào)度”、“多級隊列”等不同的調(diào)度算法。4 .增加全局性的線程管理機制。擴充Nachos平臺的現(xiàn)有操作命令,例如可以增加一個名為“ThreadView”的命令,執(zhí)行該命令

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

15、成員,也就是說,無法基于線程的ID來實現(xiàn)通信、同步互斥等機制。Nachos平臺中并無全局性的線程管理機制,并未限制線程的數(shù)目,也無法了解有多少線程存在。Sysdep模塊實現(xiàn)機制分析:sysdep.ccsysdep.h屏蔽OS間的系統(tǒng)調(diào)用或函數(shù)調(diào)用在形式和內(nèi)容上可能有的細微差別中斷處理模塊實現(xiàn)機制分析:interrupt.cc.h模擬底層中斷機制一一時鐘中斷、磁盤中斷、終端讀/寫中斷、網(wǎng)絡(luò)接收/發(fā)送中斷時鐘中斷模塊實現(xiàn)機制分析:timer.cc.h模擬時鐘中斷,在nachos指定線程隨機切換時啟動時鐘中斷,在每次的時鐘中斷處理的最后加入線程的切換終端設(shè)備模塊實現(xiàn)機制分析:console.cc.h

16、模擬終端輸入和輸出,鍵盤的輸入和顯示輸出,異步,當(dāng)發(fā)出終端的輸入輸出請求后系統(tǒng)即返回,需要等待中斷發(fā)生后才是真正完成了整個過程。磁盤設(shè)備模塊實現(xiàn)機制分析:disk.cc.h模擬物理磁盤,nachos用宿主機種的一個文件模擬單面物理磁盤,異步工具模塊:list.cc.hutility.cc.h定義鏈表結(jié)構(gòu)及操作線程啟動和調(diào)度模塊:switch.sswitch.h線程定義模塊:thread.cc.h線程調(diào)度算法模塊:scheduler.cc.hnachos主控模塊:main.ccsystem.ccsystem.hnachos系統(tǒng)入口,分析nachos命令行參數(shù),根據(jù)不同的選項進行不同功能的初始化設(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:包含了對內(nèi)存和頁表的初始化translate.h:定義了頁表結(jié)構(gòu)translate.cc:包含了地址轉(zhuǎn)換的實現(xiàn)以及讀、寫內(nèi)存的操作address.cc:包含了用戶程序頁表的操作2、3編程語言選擇對比2.Java編程的優(yōu)勢:1.簡單,面向?qū)ο?,穩(wěn)定,跨平臺,多線程,動態(tài)面向?qū)ο蠡趯ο蟮木幊谈先?/p>

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

20、、運行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工具:運行configre2 .運行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è)計思路和程序結(jié)構(gòu)3、1線程的生成和狀態(tài)轉(zhuǎn)換3、1、1基于五狀態(tài)模型本設(shè)計有全套完整白蟒料:包括源程序.數(shù)據(jù)庫(說明書,答辯PPT等,麻素QQ:1

23、415736481獲取!也可代做其它題目的畢業(yè)設(shè)計3、1、2線程創(chuàng)建過程擴充線程管理,使其最多同時存在128個線程,測試創(chuàng)建線程1) 在Thread類中增加靜態(tài)成員變量threadNum表示當(dāng)前線程的總數(shù)量2) Fork()創(chuàng)建一個線程時,threadNum加1,當(dāng)線程總數(shù)超過128個線程時,程序終止。并打印終止信息3) 當(dāng)一個線程終止時threadNum減14)當(dāng)系統(tǒng)關(guān)閉時,所有線程都結(jié)束3、2線程調(diào)度機制當(dāng)前的NachOS系統(tǒng)中,線程沒有優(yōu)先級,每次將線程放入到就緒隊列時即是將線程放到隊尾,因此若要改變系統(tǒng)調(diào)用的線程順序則需要確定各線程的優(yōu)先級。擴充線程調(diào)度機制,測試線程數(shù)為3個1)在Sc

24、heduler類中增加一個成員函數(shù),表示線程的優(yōu)先級,增加靜態(tài)的優(yōu)先級調(diào)度2)在Thread類中增加一個函數(shù)來對就緒隊列中的線程根據(jù)優(yōu)先級進行排序,將優(yōu)先級最高的放到隊首3)先將線程放入就緒隊列,然后排序,最后從中選擇下一條要執(zhí)行的線程4)具有優(yōu)先級的線程將不再按照順序執(zhí)行而是根據(jù)線程的優(yōu)先級執(zhí)行四、關(guān)鍵代碼分析4、1擴充線程管理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()測試創(chuàng)建線程43464465466467468469470471472473474475476voidThread:SelfTest()S(DEBUG(dbgThread,EnteringThread::SelfTestH);kernel-currentThread

27、-Yield();SimpieThread(0);4、2擴充線程調(diào)度機制代碼修改:Scheduler類中添加全局靜態(tài)優(yōu)先級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擴充線程調(diào)度機制改進4、3、1信號量機制classSemaphorepublic:voidP();核心操作:/禁止中斷,并保存初始中斷狀態(tài)。因為開始時中斷也可能處于被禁止?fàn)顟B(tài),所以操作結(jié)束后要恢復(fù)到初始狀態(tài)而不是使能中斷。IntStatusoldLevel=interrupt-SetLevel(IntOff);/當(dāng)信號量為0時,將當(dāng)前進程放到等待隊列里面,并設(shè)置為睡眠模式,/參數(shù)值為FALS耒示,進程沒有正常結(jié)束而要被掛起。voidV();核心操作:/禁止中斷IntStatusoldLevel=inter

32、rupt-SetLevel(IntOff);/如果隊列不為空說明有當(dāng)前進程因為要臨界資源被別的進程訪問而掛起,所以V操作首先應(yīng)將當(dāng)前進程設(shè)置為READY犬態(tài),以繼續(xù)運行并訪問臨界資源private:intvalue;/信號量值(=0)List *queue; 線程等待隊列;信號量的私有屬性有信號量的值,它是一個閥門。線程等待隊列中存放所有等待該信號量的線程。信號量有兩個操作:P操作和V操作,這兩個操作都是原子操作。P操作1. 當(dāng)value等于0時,1.1. 將當(dāng)前運行線程放入線程等待隊列。1.2. 當(dāng)前運行線程進入睡眠狀態(tài),并切換到其它線程運行。2. 當(dāng)value大于0時,value-。V操作

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

34、rootubuntu:/桌面/NachOS-4.1/code/build.linux#./nachos-x./test/shell.noff五、測試5、1測試NachOS環(huán)境和交叉編譯器rootubuntu:/桌面/18新/a測試創(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測試創(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測試創(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測試創(chuàng)建線程rootubuntu:/桌面/18新/a測試創(chuàng)建線程/NachOS-4.1/code/build.linux#./nachos-Ktestswumary:ak:6createthreadlcreatethread?createthread3createthread4createthreadscreatethreadCcreatethread7cr-d:tlh-edd8CreHethread121createthread122createthread123createt

39、hread134createthread125Crealethreadl26crcatcthread127crMtethreadl2Hmostnumberis128Assertionfailedl:line41file.threads/threidl.ee5、3測試線程優(yōu)先級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é)通過這次對nachos線程機制的擴充,較深入理解了操作系統(tǒng)的內(nèi)核中對

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

42、覺得應(yīng)該更看重它的實用性。有些東西本來是很通俗易理的,拿到理論的層面上,便變得很枯燥、很難懂。Nachos利用其簡單易懂的設(shè)計使我們對課本上的概念有了更深刻的理解。在這次作業(yè)的過程中遇到一些困難,因為自己的電腦是64位的,而能找到的交叉編譯器只有32位的,這對作業(yè)的進度造成很大的影響,因為這只能用同學(xué)的電腦做,但是尤其同學(xué)也有自己的課程設(shè)計要做,因此時間上就顯得少了,最后只實現(xiàn)了少部分的功能。慶幸的是,Code:blocks10.05在代碼閱讀和調(diào)試中起到了很大的作用,因為其支持代碼的編譯,可以測試NachOS各部分的實現(xiàn)情況,雖然不能將測試結(jié)果直接輸出,但是間接地給出了各部分是否能實現(xiàn)。這次課程設(shè)計應(yīng)該很大一部分得益于此。對于操作系統(tǒng)的學(xué)習(xí),對于我們而言其實是很抽象的,它不像其他課程的學(xué)習(xí),雖然在專業(yè)學(xué)習(xí)的過程中,經(jīng)常與之打交道,但是并不知道它是怎樣實現(xiàn)進程的調(diào)度的,再有一點是我們對硬件也不是很熟悉它們的構(gòu)造。盡管在學(xué)習(xí)電子技術(shù)時接觸到一些,但是畢竟沒有親手動手去做

溫馨提示

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

評論

0/150

提交評論