操作系統(tǒng)課程設(shè)計(jì)哲學(xué)家進(jìn)餐問(wèn)題_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)哲學(xué)家進(jìn)餐問(wèn)題_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)哲學(xué)家進(jìn)餐問(wèn)題_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)哲學(xué)家進(jìn)餐問(wèn)題_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)哲學(xué)家進(jìn)餐問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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)介

1、濰坊學(xué)院計(jì)算機(jī)工程學(xué)院課程設(shè)計(jì)說(shuō)明書(shū)課程名稱(chēng):_操作系統(tǒng)課程設(shè)計(jì) _設(shè)計(jì)項(xiàng)目:_哲學(xué)家就餐問(wèn)題_學(xué)生姓名:_XXXXXX _學(xué) 號(hào):_ _專(zhuān) 業(yè):_計(jì)算機(jī)科學(xué)與技術(shù)_班 級(jí):_一班_指導(dǎo)教師:_ _2016年_3_月一、任務(wù)與具體要求 哲學(xué)家有N個(gè),規(guī)定全體到齊后開(kāi)始討論,在討論的間隙哲學(xué)家進(jìn)餐,每人進(jìn)餐時(shí)都需使用刀、叉合一把,所有哲學(xué)家刀和叉都拿到后才能進(jìn)餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè)定,實(shí)現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。二、設(shè)計(jì)說(shuō)明書(shū)包括的內(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)語(yǔ)及成

2、績(jī)指導(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í)候也停止吃東西。餐桌中間有一大碗意大利面,每?jī)蓚€(gè)哲學(xué)家之間有一只餐叉。因?yàn)橛靡恢徊筒婧茈y吃到意大利面,所以假設(shè)哲學(xué)家必須用兩只餐叉吃東西。他們只能使用自己左右手邊的那兩只餐叉。上邊的故事里有五個(gè)哲學(xué)家(不過(guò)我們寫(xiě)的程序可以有N個(gè)哲學(xué)家),這些哲學(xué)家們只思考或吃飯,他們思考的時(shí)候不需要任何共享資源,

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

4、上餐具的使用情況,并能無(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)改變。此狀態(tài)改變發(fā)生后,哲學(xué)家拿起左右手兩邊的餐具?!斑M(jìn)餐”->“思考”:此狀態(tài)改變發(fā)生后,哲學(xué)家放下左右手上的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e”?!八伎肌?>“等待”:哲學(xué)家思考結(jié)束后,無(wú)條件轉(zhuǎn)入等待狀態(tài)。由上所述,程

5、序中應(yīng)設(shè)置6個(gè)元素的信號(hào)量數(shù)組用來(lái)保持哲學(xué)家之間的同步。2.2系統(tǒng)平臺(tái)、語(yǔ)言及工具(1)操作系統(tǒng):Windows(2)程序設(shè)計(jì)語(yǔ)言:C+(3)工具:VC+6.02.3不論是硬件臨界資源,還是軟件臨界資源,多個(gè)進(jìn)程必須互斥地對(duì)它進(jìn)行訪問(wèn)。每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼稱(chēng)為臨界區(qū)(Critical Section)。每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段程序稱(chēng)為臨界區(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)行訪問(wèn)。三、系統(tǒng)詳細(xì)設(shè)計(jì)定義信號(hào)量開(kāi)始

6、定義哲學(xué)家類(lèi)對(duì)象哲學(xué)家們的狀態(tài)發(fā)生改變輸出當(dāng)前狀態(tài)圖停止程序?結(jié)束否是程序中定義一個(gè)哲學(xué)家類(lèi),包含兩個(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é)家類(lèi)構(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è)公有

7、對(duì)象,bool類(lèi)型數(shù)組tools6,用來(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)返回一根筷子的狀態(tài)。四、系統(tǒng)的主要源代碼#include <windows.h> #include <time.h> #include <string> #include <iostream> #include <assert.h> using namespace std; /控制活動(dòng)線程數(shù)目的

8、信號(hào)量(保護(hù)線程共享資源)bool tools6;/全局變量,用餐工具CRITICAL_SECTION cs; /信號(hào)量, 在線程中使用,臨界區(qū)class Philosopher private: int number;int 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

9、 Change() ; /狀態(tài)改變函數(shù); void Philosopher:Change() EnterCriticalSection (&cs) ; /進(jìn)入臨界區(qū)if(status=1)/正在進(jìn)餐toolsnumber%6=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) /左右手兩邊工具均為空閑狀

10、態(tài)toolsnumber%6=false; /拿起左手工具tools(number-1)%6=false; /拿起右手工具status=1; LeaveCriticalSection (&cs) ; string print(Philosopher *pA) /pA->Change(); int i=pA->getinfo(); string str; if(i=0) str="等待" else if(i=1) str="就餐" else str="思考" return str; string toolstatus

11、(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<6;i+) toolsi=true; /3組筷子都未使用,初始化Philosopher P1(1),P2(2),P3(3),P4(4),P5(5),P6(6); InitializeCriticalSection (&cs) ; /初始化初始化臨界區(qū)cout<<"哲學(xué)

12、家們開(kāi)始生活:"<<endl;cout<<endl;cout<<endl;while(con='y') P1.Change();P2.Change();P3.Change();P4.Change();P5.Change();P6.Change();cout<<"當(dāng)前狀態(tài)為:"<<endl;cout<<""<<P1.find()<<print(&P1)<<""<<endl;cout&l

13、t;<P6.find()<<print(&P6)<<""<<toolstatus(tools0)<<""<<toolstatus(tools1)<<""<<P2.find()<<print(&P2)<<endl;cout<<" "<<toolstatus(tools5)<<" "<<toolstatus(tools2)&

14、lt;<endl;cout<<P5.find()<<print(&P5)<<""<<toolstatus(tools4)<<""<<toolstatus(tools3)<<""<<P3.find()<<print(&P3)<<endl;cout<<""<<P4.find()<<print(&P4)<<"&quo

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

溫馨提示

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