操作系統(tǒng)課程設(shè)計(jì)_哲學(xué)家進(jìn)餐問題_第1頁
操作系統(tǒng)課程設(shè)計(jì)_哲學(xué)家進(jìn)餐問題_第2頁
操作系統(tǒng)課程設(shè)計(jì)_哲學(xué)家進(jìn)餐問題_第3頁
操作系統(tǒng)課程設(shè)計(jì)_哲學(xué)家進(jìn)餐問題_第4頁
操作系統(tǒng)課程設(shè)計(jì)_哲學(xué)家進(jìn)餐問題_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄1 .設(shè)計(jì)題目與要求1L1實(shí)驗(yàn)?zāi)康呐c設(shè)計(jì)要求11.2初始條件12總體設(shè)計(jì)思想及相關(guān)知識(shí)22. 1總體設(shè)計(jì)思想 22. 2臨界區(qū)互斥編程原理22. 3開發(fā)環(huán)境與工具 33數(shù)據(jù)結(jié)構(gòu)與模塊說明32.1 數(shù)據(jù)結(jié)構(gòu)33. 2程序各模塊流程圖 53. 2.1主程序模塊54. 2. 2狀態(tài)改變模塊 65. 2.3返回哲學(xué)家狀態(tài)模塊 76. 2. 4返回餐具狀態(tài)模塊 84 .源程序代碼95 .測試及結(jié)果146 .課設(shè)總結(jié)16參考文獻(xiàn)171 .設(shè)計(jì)題目與要求1.1 實(shí)驗(yàn)?zāi)康呐c設(shè)計(jì)要求實(shí)驗(yàn)?zāi)康模和ㄟ^實(shí)現(xiàn)哲學(xué)家進(jìn)餐問題的同步深入了解和掌握進(jìn)程 同步和互斥的原理。設(shè)計(jì)要求:哲學(xué)家有N個(gè),也定全體到齊后開始討論:在

2、討論的 間隙哲學(xué)家進(jìn) 餐,每人進(jìn)餐時(shí)都需使用刀、叉各一把,所有哲學(xué)家 刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè) 定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。1.2 初始條件1)操作系統(tǒng):windows2)程序設(shè)計(jì)語言:C+3)設(shè)定桌上有六個(gè)哲學(xué)家,三對(duì)刀叉,如下圖擺放:圖1一1哲學(xué)家進(jìn)餐問題設(shè)定圖2總體設(shè)計(jì)思想及相關(guān)知識(shí)2 . 1總體設(shè)計(jì)思想哲學(xué)家的生活就是思考和吃飯,即思考,餓了就餐,再思考,循 環(huán)往復(fù)。要:每一個(gè)哲學(xué)家只有在拿到位于他左右的刀叉后,才能 夠就餐;哲學(xué)家只能先拿一把刀或叉,再去拿另一把刀或叉,而 不能同時(shí)去抓他旁邊的兩把餐具,也不能從其他哲學(xué)家手中搶奪餐 具;哲學(xué)

3、家每次就餐后必須放下他手中的兩把餐具后恢復(fù)思考,不 能強(qiáng)抓住餐具不放。設(shè)計(jì)一個(gè)程序,能夠顯示當(dāng)前各哲學(xué)家的狀態(tài)和桌上餐具的使用 情況,并能無死鎖的推算出下一狀態(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)改變。此 狀態(tài)改變發(fā)生后,哲學(xué)家拿起左右手兩邊的餐具?!斑M(jìn)餐”-> “思考”:此狀態(tài)改變發(fā)生后,哲學(xué)家放下左右手

4、上 的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e”?!八伎肌?> “等待”:哲學(xué)家思考結(jié)束后,無條件轉(zhuǎn)入等待狀O由上所述,程序中應(yīng)設(shè)置6個(gè)元素的信號(hào)量數(shù)組,tools6,用 來保持哲學(xué)家之間的同步。2.2臨界區(qū)互斥編程原理不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必須互斥地 對(duì)它進(jìn)行訪問。每個(gè)進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)(Critical Section )。每個(gè)進(jìn)程中訪問臨界資源的那段程序稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個(gè)進(jìn)程使用的共享資源)。每次只 準(zhǔn)許一個(gè)進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。不論是硬件 臨界資源,還是軟件臨界資源

5、,多個(gè)進(jìn)程必須互斥地對(duì)它進(jìn)行訪問。本程序主要使用了 EnterCriticalSection (&cs)和 LeaveCriticalSection (&cs)兩個(gè)函數(shù)實(shí)現(xiàn)臨界區(qū)互斥。EnterCriticalSection (&cs) 用 來進(jìn)入臨界區(qū), LeaveCriticalSection (&cs)用來禺開臨界區(qū)。2 . 3開發(fā)環(huán)境與工具系統(tǒng)平臺(tái):WINDOW環(huán)境實(shí)現(xiàn)語言:C+開發(fā)工具:VC+6. 03數(shù)據(jù)結(jié)構(gòu)與模塊說明3.1數(shù)據(jù)結(jié)構(gòu)Philosopher -number:int -status:int +Philosopher(in num:int)

6、 +find() const:int +getinfo() const:int +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 (int num)方法:哲學(xué)家類構(gòu)造函數(shù),參數(shù)num表示哲學(xué)家 編號(hào)find。const方法:返回該哲學(xué)家編號(hào)getinfoO const方法:返 回哲學(xué)家當(dāng)前狀態(tài)Change。方法:根據(jù)題目要求改變哲學(xué)家的狀態(tài)(等 待進(jìn)餐-思考-

7、等待)另外,程序中包含一個(gè)公有對(duì)象,bool類型數(shù)組tools6,用來保 存6把餐當(dāng)前狀態(tài):true表示該餐具當(dāng)前空閑,false表示該餐具 當(dāng)前正被使用。程序中還包含兩個(gè)公有函數(shù):print和toolstatus。Print用來返回一' 個(gè)哲學(xué)家的狀態(tài),toolstatus用來返回一個(gè)餐具的狀態(tài)。3. 2程序各模塊流 程圖3. 2.1主程序模塊定義信號(hào)里。冏6定義哲學(xué)家類對(duì)象P1W6哲學(xué)家們的狀態(tài)發(fā)生改變; P1 Change P2 Change() P3 ChangeQ P4 Changef): P5 ChangeO P6 Change。輸出當(dāng)前狀態(tài)圖3 . 2. 2狀態(tài)改變模 塊

8、圖3-3狀態(tài)改變模塊Change()流程圖是7名冬高處于濟(jì)輟才法”3. 2. 3 模塊返回哲學(xué)家狀態(tài)取得狀態(tài)數(shù); int i=pA->qetinfo(>st“思考返回str 3圖3-4返回哲學(xué)家狀態(tài)模塊print 0 流程圖3.2.4返回餐具狀態(tài) 模塊定義string state;state= u 用“$返回state;結(jié)束4 .源程序代碼/實(shí)驗(yàn)?zāi)康模和ㄟ^實(shí)現(xiàn)哲學(xué)家進(jìn)餐問題的同步深入了解和掌握進(jìn)程同步和互斥的原理。/設(shè)計(jì)要求:哲學(xué)家有N個(gè),也定全體到達(dá)后開始討論:在討論的間隙哲學(xué)家進(jìn)餐,/每人進(jìn)餐時(shí)都需使用刀、叉各一把,所有哲學(xué)家刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人 數(shù)、/餐桌上的布

9、置自行設(shè)定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。ttinclude <windows. h> ttinclude ttinclude <string> ttinclude <iostream> ttinclude <assert. h> using namespace std;bool tools 6: /全局變量,用餐工具CRITICAL_SECTION cs; 信號(hào)量,在線程中使用,臨界區(qū)class Philosopherprivate:"t曙11b版$返回餐具狀態(tài)模塊toolstatus (bool a)流程圖int status

10、; /*標(biāo)記當(dāng)前哲學(xué)家的狀態(tài),0表示正在等待(即處于饑餓狀態(tài)),1表示得到兩支筷子正在吃飯,2表示正在思考*/public:Philosopher (int num=0): status(2), number(num) int find() const return number; int getinfo() const return status; void Change () ; /狀態(tài)改變函數(shù));void Philosopher:Change()EnterCriticalSection (&cs); 進(jìn)入臨界區(qū)if (status=l) / 正在進(jìn)餐tools number%6=

11、true; / 放下左手工具 tools (number-l)%6=true; /放下右手工具status=2; /改變狀態(tài)為思考else if (sta.tus=2) / 思考中status=0; /改變狀態(tài)為等待)else if (sta.tus=0) / 等待中if (tools number%6&&tools (number-1) %6) / 左右手兩邊工具 均為空閑狀態(tài):toolsnumber%6=false; /拿起左手工具tools (number-l)%6=false; / 拿起右手工具 status= 1;LeaveCriticalSection (&

12、cs)string print (Philosopher *pA)/pA->Change ();int i=pA->getinfo ();string str;if (i=0)str=/,等待”;else if (i=l)str=,/ 就餐”;else str二思考;return str;string toolstatus(bool a)string state;if (a=true)state二閑;if (a二二false)state二用;return state;int main ()char con二'y' ; /判斷是否繼續(xù)for(int i=0;i<

13、6;i+)tools i二true; 組刀叉都未使用,初始化/3Philosopher Pl(l), P2(2), P3(3), P4(4),P5(5),P6(6);InitializeCriticalSection (&cs);初始化初始化臨界區(qū)/COUt<<,,狀態(tài)說明小意圖 :,z<<endl;cout«<< 哲學(xué)家 0 號(hào)的狀態(tài) << <<endl;cout<<哲學(xué)家5號(hào)的狀態(tài)*<叉3的狀態(tài)<<«刀1的狀態(tài)<哲學(xué)家1號(hào)的狀態(tài)<<endl;cout<

14、;<< 刀 3 的狀態(tài)<< <<叉 1 的狀態(tài)"«endl;cout<<哲學(xué)家4號(hào)的狀態(tài)*<叉2的狀態(tài)<<刀2的狀態(tài)<哲學(xué)家2號(hào)的狀態(tài)<<endl;cout«,z 哲學(xué)家 3 號(hào)的狀態(tài) << <endl;cout<<餐具的狀態(tài),“用”表示使用中,“閑”表示空閑中。<endl;cout<<z,<<endl;cout<<哲學(xué)家們開始生活:<<endl;cout<<endl; cout<

15、<endl;while (con二二'y')Pl. Change ();P2. Change ();P3. Change ();P4. Change ();P5. Change ();P6. Change ();cout<<,z 當(dāng)前狀態(tài)為:,<<endl;cout<<,z Z,<<P1. f ind () <<print (&P1) <<,z ,z<<endl;cout<<P6. find () <<print (&P6) <<z,z&

16、lt;<toolstatus (tools 0) <<,z<<toolstatus (tools 1)<<<<P2. find() <<print(&P2)<<endl;cout<<,z "toolstatus (tools 5)“toolstatus (tools2)<<endl;cout<<P5. find() <<print (&P5) <<z,z<<toolstatus (tools 4)<<tool

17、status (tools 3)<<<<P3. find()print(&P3)<<endl;cout<<,z Z,«P4. findO «print (&P4) <<z,z,«endl;cout<<,zz,<<endl;cout<<若要繼續(xù)下一狀態(tài),輸入y;輸入其他,結(jié)束程序: cin>>con;Sleep (20);DeleteCriticalSection (&cs) ; / 退出資源區(qū)return 0;5 .測試及結(jié)能|SB E' 作業(yè)國手跑左鐲 - .wpherxMW* *-J L -1圖5-1程序運(yùn)行開始 界面圖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退出程序6 .課設(shè)總結(jié)注意到了許多課本上沒有提到經(jīng)過了前后共2周的時(shí)間,我完成了這次課程設(shè)計(jì)。通過這次課程設(shè)計(jì),我學(xué)到了許多課本上學(xué)不

溫馨提示

  • 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)論