操作系統(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頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、濰坊學(xué)院計(jì)算機(jī)工程學(xué)院課程設(shè)計(jì)說明書課程名稱:_操作系統(tǒng)課程設(shè)計(jì) _設(shè)計(jì)項(xiàng)目:_哲學(xué)家就餐問題_學(xué)生姓名:_XXXXXX _學(xué) 號(hào):_XX_專 業(yè):_計(jì)算機(jī)科學(xué)與技術(shù)_班 級(jí):_一班_指導(dǎo)教師:_王紅_2016年_3_月一、任務(wù)與具體要求 哲學(xué)家有N個(gè),規(guī)定全體到齊后開始討論,在討論的間隙哲學(xué)家進(jìn)餐,每人進(jìn)餐時(shí)都需使用刀、叉合一把,所有哲學(xué)家刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè)定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。二、設(shè)計(jì)說明書包括的內(nèi)容 1.需求分析2.系統(tǒng)概要設(shè)計(jì)3.系統(tǒng)詳細(xì)設(shè)計(jì)4.系統(tǒng)的主要源代碼5.系統(tǒng)測(cè)試及調(diào)試6.總結(jié)7.主要參考文獻(xiàn)三、 應(yīng)完成的圖紙四、 評(píng)語

2、及成績指導(dǎo)教師(簽字)_年_月_日目錄一、需求分析1二、系統(tǒng)概要設(shè)計(jì)2三、系統(tǒng)詳細(xì)設(shè)計(jì)3四、系統(tǒng)的主要源代碼4五、系統(tǒng)測(cè)試及調(diào)試9六、總結(jié)13七、主要參考文獻(xiàn)13一、需求分析有一個(gè)故事是這樣的:假設(shè)有五位哲學(xué)家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時(shí)候,他們就停止思考,思考的時(shí)候也停止吃東西。餐桌中間有一大碗意大利面,每兩個(gè)哲學(xué)家之間有一只餐叉。因?yàn)橛靡恢徊筒婧茈y吃到意大利面,所以假設(shè)哲學(xué)家必須用兩只餐叉吃東西。他們只能使用自己左右手邊的那兩只餐叉。上邊的故事里有五個(gè)哲學(xué)家(不過我們寫的程序可以有N個(gè)哲學(xué)家),這些哲學(xué)家們只思考或吃飯,他們思考的時(shí)候不需要任何共享資

3、源,但是吃飯的時(shí)候就必須使用餐具,而餐桌上的餐具是有限的,故事里,餐具是叉子,吃飯的時(shí)候要用兩把叉子把面條從碗里撈出來。很顯然把叉子換成筷子會(huì)更合理,因?yàn)橐粋€(gè)哲學(xué)家需要兩根筷子才能吃飯。 1A A 6 2 A A 5 3A4 A1、2、3、4、5、6為哲學(xué)家 A為一根筷子4現(xiàn)在引入問題:有六個(gè)哲學(xué)家很窮,只買得起六根筷子。他們坐成一圈,兩個(gè)人的中間放一根筷子。哲學(xué)家吃飯的時(shí)候必須同時(shí)得到左手邊和右手邊的筷子。如果他身邊的任何一位正在使用筷子,那他只有等著。如下圖:以上就為我們要處理的哲學(xué)家就餐問題,接下來將編寫程序模擬解決這個(gè)問題。二、系統(tǒng)概要設(shè)計(jì)2.1設(shè)計(jì)一個(gè)程序,能夠顯示當(dāng)前各哲學(xué)家的狀態(tài)

4、和桌上餐具的使用情況,并能無死鎖的推算出一狀態(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é)家拿起左右手兩邊的餐具。“進(jìn)餐”-“思考”:此狀態(tài)改變發(fā)生后,哲學(xué)家放下左右手上的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e”。“思考”-“等待”:哲學(xué)家思考結(jié)束后,無條件轉(zhuǎn)入等待狀態(tài)。由上所述,程序中應(yīng)設(shè)置6個(gè)元素的信號(hào)量數(shù)組用來保

5、持哲學(xué)家之間的同步。2.2系統(tǒng)平臺(tái)、語言及工具(1)操作系統(tǒng):Windows(2)程序設(shè)計(jì)語言:C+(3)工具:VC+6.02.3不論是硬件臨界資源,還是軟件臨界資源,多個(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)入。不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必須互斥地對(duì)它進(jìn)行訪問。三、系統(tǒng)詳細(xì)設(shè)計(jì)定義信號(hào)量開始定義哲學(xué)家類對(duì)象哲學(xué)家們的狀態(tài)發(fā)生改

6、變輸出當(dāng)前狀態(tài)圖停止程序?結(jié)束否是程序中定義一個(gè)哲學(xué)家類,包含兩個(gè)私有對(duì)象和四個(gè)公有對(duì)象。Number對(duì)象: 哲學(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)getinfo() const方法: 返回哲學(xué)家當(dāng)前狀態(tài)Change()方法: 根據(jù)題目要求改變哲學(xué)家的狀態(tài)(等待-進(jìn)餐-思考-等待)另外,程序中包含一個(gè)公有對(duì)象,bool類型數(shù)組tools6,用來保存6根筷子當(dāng)前狀態(tài)

7、:true表示該筷子當(dāng)前空閑,false表示該筷子當(dāng)前正被使用。程序中還包含兩個(gè)公有函數(shù):print和toolstatus。Print用來返回一個(gè)哲學(xué)家的狀態(tài),toolstatus用來返回一根筷子的狀態(tài)。四、系統(tǒng)的主要源代碼#include #include #include #include #include using namespace std; /控制活動(dòng)線程數(shù)目的信號(hào)量(保護(hù)線程共享資源)bool tools6;/全局變量,用餐工具CRITICAL_SECTION cs; /信號(hào)量, 在線程中使用,臨界區(qū)class Philosopher private: int number;in

8、t status; /*標(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=1)/正在進(jìn)餐toolsnumber%6

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

10、*pA) /pA-Change(); int i=pA-getinfo(); string str; if(i=0) str=等待; else if(i=1) 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;i6;i+) toolsi=true; /3組筷子都未使用,初始化Philosopher P1(1),P2(2

11、),P3(3),P4(4),P5(5),P6(6); InitializeCriticalSection (&cs) ; /初始化初始化臨界區(qū)cout哲學(xué)家們開始生活:endl;coutendl;coutendl;while(con=y) P1.Change();P2.Change();P3.Change();P4.Change();P5.Change();P6.Change();cout當(dāng)前狀態(tài)為:endl;coutP1.find()print(&P1)endl;coutP6.find()print(&P6)toolstatus(tools0)toolstatus(tools1)P2.fin

12、d()print(&P2)endl;cout toolstatus(tools5) toolstatus(tools2)endl;coutP5.find()print(&P5)toolstatus(tools4)toolstatus(tools3)P3.find()print(&P3)endl;coutP4.find()print(&P4)endl;cout-endl;coutcon;Sleep(20); DeleteCriticalSection (&cs) ; /退出資源區(qū)return 0; 五、系統(tǒng)測(cè)試及調(diào)試初始狀態(tài)狀態(tài)一狀態(tài)二狀態(tài)三狀態(tài)四狀態(tài)五退出六、總結(jié)通過這次課程設(shè)計(jì),我學(xué)到了許多

13、課本上學(xué)不到的知識(shí),注意到了許多課本上沒有提到的東西,而且使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)一些前面學(xué)過的知識(shí)理解得不夠深刻的,通過這一個(gè)星期的課程設(shè)計(jì),通過程序的編寫發(fā)現(xiàn)有了進(jìn)一步的理解,其中也明白了很多道理,哲學(xué)家進(jìn)餐問題從理論上講很容易,就6個(gè)人只有6個(gè)筷子,要實(shí)現(xiàn)他們吃通心面的有序性,但要用程序來模擬遠(yuǎn)非文字的敘述那么簡單,但還是可以實(shí)現(xiàn)的,盡管不是很容易的實(shí)現(xiàn)了。其中蘊(yùn)含哲理,只要能用想出來,就可以用程序把他編處理。設(shè)計(jì)中總會(huì)遇到這樣那樣的問題,遇到問題勢(shì)必要

溫馨提示

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