操作系統(tǒng)課程設(shè)計(jì)_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

名目.設(shè)計(jì)題目與要求1試驗(yàn)?zāi)康呐c設(shè)計(jì)要求1初始條件12總體設(shè)計(jì)思想及相關(guān)學(xué)問(wèn)1總體設(shè)計(jì)思想1臨界區(qū)互斥編程原理錯(cuò)誤!未定義書(shū)簽。開(kāi)發(fā)環(huán)境與工具錯(cuò)誤!未定義書(shū)簽。3數(shù)據(jù)結(jié)構(gòu)與模塊說(shuō)明3數(shù)據(jù)結(jié)構(gòu)3程序各模塊流程圖4主程序模塊4狀態(tài)轉(zhuǎn)變模塊4返回哲學(xué)家狀態(tài)模塊5返回餐具狀態(tài)模塊5.源程序代碼5.測(cè)試及結(jié)果9.課設(shè)總結(jié)9參考文獻(xiàn)10cout?""<<P4.find()<<print(&P4)<<""?endl;cout?M"?endl;cout<<"若要連續(xù)下一狀態(tài),輸入y;輸入其他,結(jié)束程序:";cin?con;Sleep(20);)DeleteCriticalSection(&cs);〃退出資源區(qū)return0;).測(cè)試及結(jié)果圖5-1程序運(yùn)行開(kāi)頭界面圖5-2哲學(xué)家狀態(tài)1圖5-3哲學(xué)家狀態(tài)2圖5-4哲學(xué)家狀態(tài)3圖5-5哲學(xué)家狀態(tài)4圖5-6退出程序.課設(shè)總結(jié)經(jīng)過(guò)了前后共2周的時(shí)間,我完成了這次課程設(shè)計(jì)。通過(guò)這次課程設(shè)計(jì),我學(xué)到了很多課本上學(xué)不到的學(xué)問(wèn),留意到了很多課本上沒(méi)有提到的東西。而且,通過(guò)這次設(shè)計(jì),我得到了一個(gè)很好的理論聯(lián)系實(shí)際的機(jī)會(huì),熬煉了通過(guò)理論解決實(shí)際問(wèn)題的力量。正所謂“實(shí)踐出真知”,有些代碼看上去沒(méi)什么問(wèn)題,但是實(shí)際運(yùn)行起來(lái)就是不出正確結(jié)果。代碼內(nèi)部可能存在規(guī)律或語(yǔ)法等方面我們平常不會(huì)留意到的小問(wèn)題,通過(guò)這次課程設(shè)計(jì),我積累了不少這樣小問(wèn)題的解決方法。設(shè)計(jì)中總會(huì)遇到這樣那樣的問(wèn)題,遇到問(wèn)題勢(shì)必要自己分析問(wèn)題,通過(guò)各種渠道解決問(wèn)題,比如采用互聯(lián)網(wǎng)。這次課程設(shè)計(jì)也加強(qiáng)了我上網(wǎng)查數(shù)檢索問(wèn)題的力量。有些時(shí)候,學(xué)習(xí)到的學(xué)問(wèn)是次要的,重要的是學(xué)習(xí)學(xué)問(wèn)的方法。參考文獻(xiàn)[1]宗大華,宗濤,陳吉人著.操作系統(tǒng).北京:人民郵電出版社,2022[2]李愛(ài)華,程磊著.面相對(duì)象程序設(shè)計(jì)(C++語(yǔ)言).北京:清華高校出版社,2022.設(shè)計(jì)題目與要求L1試驗(yàn)?zāi)康呐c設(shè)計(jì)要求試驗(yàn)?zāi)康模和ㄟ^(guò)實(shí)現(xiàn)哲學(xué)家進(jìn)餐問(wèn)題的同步深化了解和把握進(jìn)程同步和互斥的原理。設(shè)計(jì)要求:哲學(xué)家有N個(gè),也定全體到齊后開(kāi)頭爭(zhēng)論:在爭(zhēng)論的間隙哲學(xué)家進(jìn)餐,每人進(jìn)餐時(shí)都需使用刀、叉各一把,全部哲學(xué)家刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè)定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。1.2初始條件(1)操作系統(tǒng):windows(2)程序設(shè)計(jì)語(yǔ)言:C++(3)設(shè)定圓桌上有六個(gè)哲學(xué)家,三對(duì)刀叉,如下圖擺放:圖1-1哲學(xué)家進(jìn)餐問(wèn)題設(shè)定圖2總體設(shè)計(jì)思想及相關(guān)學(xué)問(wèn)總體設(shè)計(jì)思想哲學(xué)家的生活就是思索和吃飯,即思索,餓了就餐,再思索,循環(huán)往復(fù)。要求是:每一個(gè)哲學(xué)家只有在拿到位于他左右的刀叉后,才能夠就餐;哲學(xué)家只能先拿一把刀或叉,再去拿另一把刀或叉,而不能同時(shí)去抓他旁邊的兩把餐具,也不能從其他哲學(xué)家手中搶奪餐具;哲學(xué)家每次就餐后必需放下他手中的兩把餐具后恢復(fù)思索,不能強(qiáng)抓住餐具不放。設(shè)計(jì)一個(gè)程序,能夠顯示當(dāng)前各哲學(xué)家的狀態(tài)和桌上餐具的使用狀況,并能無(wú)死鎖的推算出下一狀態(tài)各哲學(xué)家的狀態(tài)和桌上餐具的使用狀況。即設(shè)計(jì)一個(gè)能支配哲學(xué)家正常生活的程序。為哲學(xué)家設(shè)計(jì)3種狀態(tài),即“等待”“進(jìn)餐”“思索”。每個(gè)哲學(xué)家重復(fù)進(jìn)行“等待”->“進(jìn)餐”->“思索”的行動(dòng)循環(huán)。其中:“等待”->“進(jìn)餐”:只有一個(gè)哲學(xué)家處于等待進(jìn)餐狀態(tài),且左右手兩邊的餐具都處于“空閑”狀態(tài)時(shí),可以發(fā)生這種狀態(tài)轉(zhuǎn)變。此狀態(tài)轉(zhuǎn)變發(fā)生后,哲學(xué)家拿起左右手兩邊的餐具?!斑M(jìn)餐”?!八妓鳌保捍藸顟B(tài)轉(zhuǎn)變發(fā)生后,哲學(xué)家放下左右手上的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e”?!八妓鳌?>“等待”:哲學(xué)家思索結(jié)束后,無(wú)條件轉(zhuǎn)入等待狀態(tài)。由上所述,程序中應(yīng)設(shè)置6個(gè)元素的信號(hào)量數(shù)組,tools[6],用來(lái)保持哲學(xué)家之間的同步。臨界區(qū)互斥編程原理不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必需互斥地對(duì)它進(jìn)行訪問(wèn)。每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼稱為臨界區(qū)(CriticalSection)。每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段程序稱為臨界區(qū)(CriticalSection)(臨界資源是一次僅允許一個(gè)進(jìn)程使用的共享資源)。每次只準(zhǔn)許一個(gè)進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必需互斥地對(duì)它進(jìn)行訪問(wèn)。本程序主要使用了EnterCriticalSection(&cs)和LeaveCriticalSection(&cs)兩個(gè)函數(shù)實(shí)現(xiàn)臨界區(qū)互斥。EnterCriticalSection(&cs)用來(lái)進(jìn)入臨界區(qū),LeaveCriticalSection(&cs)用來(lái)離開(kāi)臨界區(qū)。開(kāi)發(fā)環(huán)境與工具系統(tǒng)平臺(tái):WINDOW環(huán)境實(shí)現(xiàn)語(yǔ)言:C++開(kāi)發(fā)工具:VC++6.03數(shù)據(jù)結(jié)構(gòu)與模塊說(shuō)明3.1數(shù)據(jù)結(jié)構(gòu)Philosopher-number:int-status:int+Philosopher(innum:int)+find()const:int+getinfo()constant+Change():void圖3-1哲學(xué)家類的UML圖程序中定義一個(gè)哲學(xué)家類,包含兩個(gè)私有對(duì)象和四個(gè)公有對(duì)象。Number對(duì)象:報(bào)訊哲學(xué)家的編號(hào)。Status對(duì)象:用于保存當(dāng)前該哲學(xué)家的狀態(tài),0表示正在等待(即處于饑餓狀態(tài))1表示得到餐具正在吃飯,2表示正在思索Philosopher(intnum)方法:哲學(xué)家類構(gòu)造函數(shù),參數(shù)num表示哲學(xué)家編號(hào)find。const方法:返回該哲學(xué)家編號(hào)getinfo。const方法:返回哲學(xué)家產(chǎn)前狀態(tài)Change。方法:依據(jù)題目要求轉(zhuǎn)變哲學(xué)家的狀態(tài)(等待->進(jìn)餐->思索->等待)此外,程序中包含一個(gè)公有對(duì)象,bool類型數(shù)組tools[6],用來(lái)保存6把餐當(dāng)前狀態(tài):true表示該餐具當(dāng)前空閑,false表示該餐具當(dāng)前正被使用。程序中還包含兩個(gè)公有函數(shù):print和toolstatus。Print用來(lái)返回一個(gè)哲學(xué)家的狀態(tài),toolstatus用來(lái)返回一個(gè)餐具的狀態(tài)。3.2程序各模塊流程圖主程序模塊圖3-2主程序模塊流程圖狀態(tài)轉(zhuǎn)變模塊圖3-3狀態(tài)轉(zhuǎn)變模塊Change。流程圖返回哲學(xué)家狀態(tài)模塊圖3-4返回哲學(xué)家狀態(tài)模塊print。流程圖返回餐具狀態(tài)模塊圖3-5返回餐具狀態(tài)模塊toolstatus(boola)流程圖4.源程序代碼〃試驗(yàn)?zāi)康模和ㄟ^(guò)實(shí)現(xiàn)哲學(xué)家進(jìn)餐問(wèn)題的同步深化了解和把握進(jìn)程同步和互斥的原理?!ㄔO(shè)計(jì)要求:哲學(xué)家有N個(gè),也定全體到達(dá)后開(kāi)頭爭(zhēng)論:在爭(zhēng)論的間隙哲學(xué)家進(jìn)餐,〃每人進(jìn)餐時(shí)都需使用刀、叉各一把,全部哲學(xué)家刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人數(shù)、〃餐桌上的布置自行設(shè)定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。#include<windows.h>#include<time.h>#include<string>#include<iostream>#include<assert.h>usingnamespacestd;booltools⑹;〃全局變量,用餐工具CRITICAL_SECTIONcs;〃信號(hào)量,在線程中使用,臨界區(qū)classPhilosopher(private:intnumber;intstatus;/*標(biāo)記當(dāng)前哲學(xué)家的狀態(tài),0表示正在等待(即處于饑餓狀態(tài)),1表示得到兩支筷子正在吃飯,2表示正在思索*/public:Philosopher(intnum=O):status(2),number(num){}intfind()const{returnnumber;}intgetinfo()const{returnstatus;}voidChange();〃狀態(tài)轉(zhuǎn)變函數(shù));voidPhilosopher::Change()(EnterCriticalSection(&cs);〃進(jìn)入臨界區(qū)if(status==l)〃正在進(jìn)餐(tools[number%6]=true;〃放下左手工具tools[(number-l)%6]=true;〃放下右手工具status=2;〃轉(zhuǎn)變狀態(tài)為思索)elseif(status==2)〃思索中(status”;〃轉(zhuǎn)變狀態(tài)為等待)elseif(status==O)〃等待中{if(tools[number%6]&&tools[(number-l)%6])〃左右手兩邊工具均為空閑狀態(tài)(tools[number%6]=false;〃拿起左手工具tools[(number-l)%6]=false;〃拿起右手工具status=l;})LeaveCriticalSection(&cs);)stringprint(Philosopher*pA)(//pA->Change();inti=pA->getinfo();stringstr;if(i==O)str="等待";elseif(i==l)str="就餐";elsestr="思索returnstr;)stringtoolstatus(boola)(stringstate;if(a==true)state="閑”;if(a==false)state="用";returnstate;)intmain()(charcon=V;〃推斷是否連續(xù)for(inti=0;i<6;i++)tools[i]=true;/[3組刀叉都未使用,初始化PhilosopherP1(1)/P2(2),P3(3)/P4(4),P5(5),P6(6);InitializeCriticalSection(&cs);〃初始化初始化臨界區(qū)cout?M狀態(tài)說(shuō)明示意圖:"?endl;cout?N"(v'1哲學(xué)家0號(hào)的狀態(tài)"<<"“vvendl;cout<<"哲學(xué)家5號(hào)的狀態(tài),,<<“,,?,,X3的狀態(tài),,<<"刀1的狀態(tài)"?"哲學(xué)家1號(hào)的狀態(tài),,<<endl;cout?H"?"713的狀態(tài)“<<""?"叉1的狀態(tài)"?endl;coutvv”哲學(xué)家4號(hào)的狀態(tài)”"?HX2的狀態(tài)“<<",,?,,7U2的狀態(tài)"?"哲學(xué)家2號(hào)的狀態(tài)"<<endl;cout?H“<<“哲學(xué)家3號(hào)的狀態(tài)Zvendl;cout<<“餐具的狀態(tài),“用”表示使用中,“閑”表示空閑中?!?lt;<endl;cout?N"?endl;cout<<"哲學(xué)家們開(kāi)頭生活:"<<endl;cout?endl;cout?endl;while(con==,y')(Pl.Change();P2.Change();P3.Change();P4.Change();P5.Change();P6.Change();cout<<"當(dāng)前狀態(tài)為:"<<endl;cout?""?Pl.find()?print(&Pl)?""?endl;cout?R6.find()?print(&P6)?""?toolstat

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論