![操作系統(tǒng)課程設(shè)計-哲學(xué)家進餐問題_第1頁](http://file4.renrendoc.com/view/493aee97c1669cc081de8a499c98f53d/493aee97c1669cc081de8a499c98f53d1.gif)
![操作系統(tǒng)課程設(shè)計-哲學(xué)家進餐問題_第2頁](http://file4.renrendoc.com/view/493aee97c1669cc081de8a499c98f53d/493aee97c1669cc081de8a499c98f53d2.gif)
![操作系統(tǒng)課程設(shè)計-哲學(xué)家進餐問題_第3頁](http://file4.renrendoc.com/view/493aee97c1669cc081de8a499c98f53d/493aee97c1669cc081de8a499c98f53d3.gif)
![操作系統(tǒng)課程設(shè)計-哲學(xué)家進餐問題_第4頁](http://file4.renrendoc.com/view/493aee97c1669cc081de8a499c98f53d/493aee97c1669cc081de8a499c98f53d4.gif)
![操作系統(tǒng)課程設(shè)計-哲學(xué)家進餐問題_第5頁](http://file4.renrendoc.com/view/493aee97c1669cc081de8a499c98f53d/493aee97c1669cc081de8a499c98f53d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)課程設(shè)計課程設(shè)計題目:哲學(xué)家進餐問題姓 名:專 業(yè):班 級:學(xué) 號:指導(dǎo)教師:2014年6月10日目錄1.設(shè)計題目與要求 21.1實驗?zāi)康?21.2初始條件...........................................................................................錯誤!未定義書簽。2總體設(shè)計思想及相關(guān)知識 32.1總體設(shè)計思想 32.2臨界區(qū)互斥編程原理 42.3開發(fā)環(huán)境與工具 33模塊說明 33.1狀態(tài)改變模塊 44. 部分源程序代碼及測試結(jié)果 65.課設(shè)總結(jié) 9參考文獻 911.設(shè)計題目與要求1.1實驗?zāi)康耐ㄟ^實現(xiàn)哲學(xué)家進餐問題的同步 ,深入了解和掌握進程同步和互斥的原理。C++進行線程的創(chuàng)建與撤銷代碼相對來說比較簡單,因為封裝比較多,我們能做的就是創(chuàng)建與調(diào)用。當(dāng)然,代碼中也有一些復(fù)雜的地方,不是對線程的操作,而是關(guān)于界面的顯示與操作,單個線程容易創(chuàng)建與撤銷,但難的是合理的“監(jiān)控”與組織多個線程并及時進行狀態(tài)的顯示。雖然用程序語言實現(xiàn)了進程創(chuàng)建(當(dāng)然,這是在并不會理論的情況下),但還是沒弄清理論的實質(zhì)??赡芾碚摳橄笮┌?。在平常的編程中,雖然經(jīng)常遇到過要使用多線程的問題,但沒有去試過從操作系統(tǒng)的角度去考慮線程的運行,在以后的學(xué)習(xí)中,我想還是會深入了解與學(xué)習(xí)這方面的東西的。1.2設(shè)計要求哲學(xué)家有N個,也定全體到達(dá)后開始討論:在討論的間隙哲學(xué)家進餐,每人進餐時都需使用刀、叉各一把,所有哲學(xué)家刀和叉都拿到后才能進餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè)定,實現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。(1)操作系統(tǒng):windows(2)程序設(shè)計語言:C++(3)設(shè)定圓桌上有六個哲學(xué)家,三對刀叉,如下圖擺放:2圖1-1哲學(xué)家進餐問題設(shè)定圖總體設(shè)計思想及相關(guān)知識2.1總體設(shè)計思想哲學(xué)家的生活就是思考和吃飯,即思考,就餐,再思考,往復(fù)循環(huán)。要求是:每一個哲學(xué)家只有在拿到位于他左右的刀叉后,才能夠就餐;哲學(xué)家只能先拿一把刀或叉,再去拿另一把刀或叉,而不能同時去抓他旁邊的兩把餐具,也不能從其他哲學(xué)家手中搶奪餐具;哲學(xué)家每次就餐后必須放下他手中的兩把餐具后恢復(fù)思考,不能強抓住餐具不放。設(shè)計一個程序,能夠顯示當(dāng)前各哲學(xué)家的狀態(tài)和桌上餐具的使用情況,并能無死鎖的推算出下一狀態(tài)各哲學(xué)家的狀態(tài)和桌上餐具的使用情況。即設(shè)計一個能安排哲學(xué)家正常生活的程序。為哲學(xué)家設(shè)計3種狀態(tài),即“等待”“進餐”“思考”。每個哲學(xué)家重復(fù)進行“等待”->“進餐”->“思考”的行動循環(huán)。其中:3“等待”->“進餐”:只有一個哲學(xué)家處于等待進餐狀態(tài),且左右手兩邊的餐具都處于“空閑”狀態(tài)時,可以發(fā)生這種狀態(tài)改變。此狀態(tài)改變發(fā)生后,哲學(xué)家拿起左右手兩邊的餐具。“進餐”->“思考”:此狀態(tài)改變發(fā)生后,哲學(xué)家放下左右手上的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e”?!八伎肌?>“等待”:哲學(xué)家思考結(jié)束后,無條件轉(zhuǎn)入等待狀態(tài)。由上所述,程序中應(yīng)設(shè)置 6個元素的信號量數(shù)組,tools[6],用來保持哲學(xué)家之間的同步。2.2 臨界區(qū)互斥編程原理不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。每個進程中訪問臨界資源的那段代碼稱為臨界區(qū)( CriticalSection)。每個進程中訪問臨界資源的那段程序稱為臨界區(qū)(CriticalSection)(臨界資源是一次僅允許一個進程使用的共享資源)。每次只準(zhǔn)許一個進程進入臨界區(qū),進入后不允許其他進程進入。不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。本程序主要使用了EnterCriticalSection(&cs)和LeaveCriticalSection(&cs)兩個函數(shù)實現(xiàn)臨界區(qū)互斥,臨界區(qū)用EnterCriticalSection(&cs)來進入,LeaveCriticalSection(&cs)用來離開臨界區(qū)。2.3開發(fā)環(huán)境與工具系統(tǒng)平臺:WINDOW環(huán)境實現(xiàn)語言:C++開發(fā)工具:VisualC++6.03.模塊說明本人在此次課程設(shè)計中,打開 visualC++——》新建——》 project——》win32 console4application 建立一個 zxm工程。利用工作區(qū)間打開 zxm.cpp編譯。Philosopher-number:int-status:int+Philosopher(innum:int)+find()const:int+getinfo()const:int+Change():void圖3-1 哲學(xué)家類的 UML圖(該圖闡述了 zxm.cpp文件的主要結(jié)構(gòu):創(chuàng)建一個philosopher類,在 philosopher類中定義了 status、number整型成員變量。Philosopher()構(gòu)造函數(shù),find()、getinfo()、change()成員函數(shù))5圖3-3狀態(tài)改變模塊Change()流程圖6部分源程序代碼部分源代碼:voidPhilosopher::Change() //Philosopher 類中change成員函數(shù){EnterCriticalSection(&cs) //進入臨界區(qū)if(status==1)//正在進餐{tools[number%5]=true; //放下左手工具tools[(number-1)%5]=true; //放下右手工具status=2; //改變狀態(tài)為思考}elseif(status==2)//思考中{status=0; //改變狀態(tài)為等待}elseif(status==0)//等待中{if(tools[number%5]&&tools[(number-1)%5]) //左右手兩邊工具均為空閑狀態(tài){tools[number%5]=false; //拿起左手工具tools[(number-1)%5]=false; //拿起右手工具status=1;}}LeaveCriticalSection(&cs)}7測試及結(jié)果圖5-1程序運行開始界面8課設(shè)總結(jié)經(jīng)過了前后共 1周的時間,我們小組三人艱辛的完成了這次課程設(shè)計。由開始的蘋果問題到現(xiàn)在所解決的哲學(xué)家進餐問題,不僅體現(xiàn)了我的應(yīng)急能力差,還反映出了對操作系統(tǒng)這門功課理解的不到位,沒有真正理解進程和線程的創(chuàng)建與作用,線程的同步與互斥。通過這次課程設(shè)計,我學(xué)到了許多課本學(xué)到的知識和課本上學(xué)不到的問題,體會到了對一個團隊來說合作才是最重要的,就算你一個人沒日沒夜的做也不如大家一起思考一個小時。聰明的人往往是能很好的利用身邊的人和資源。通過這次設(shè)計,我得到了一個很好的理論聯(lián)系實際的機會,鍛煉了通過理論解決實際問題的能力。正所謂“實踐出真知” ,有些代碼看上去沒什么問題,但是實際運行起來就是不出正確結(jié)果。代碼內(nèi)部可能存在邏輯或語法等方面我們平時不會注意到的小問題,通過這次課程設(shè)計,我積累了不少這樣小問題的解決方法。有些時候,學(xué)習(xí)到的知識是次要的,重要的是學(xué)習(xí)知識的方法。知識是死的,人事活著的。死讀書就是讀死書,作為一個當(dāng)代大學(xué)生,我們應(yīng)該充實發(fā)揮大腦,靈活運用、參考文獻《計算機操作系統(tǒng)》湯子瀛,哲
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 歷史街區(qū)石材裝修配送協(xié)議
- 親子酒店裝修項目合同
- 校園裝修合同樣本-@-1
- 鎮(zhèn)江彩鋼瓦防腐施工方案
- 木材加工配送合同模板
- 化工原料特種運輸協(xié)議
- 2025年度網(wǎng)絡(luò)安全技術(shù)顧問聘用協(xié)議
- 國際旅游業(yè)務(wù)居間協(xié)議
- 魚塘合作管理方案
- 象山消防通風(fēng)排煙施工方案
- 徐金桂行政法與行政訴訟法新講義
- 瀝青拌合設(shè)備結(jié)構(gòu)認(rèn)知
- GB/T 13234-2018用能單位節(jié)能量計算方法
- (課件)肝性腦病
- 北師大版五年級上冊數(shù)學(xué)教學(xué)課件第5課時 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請書
- 高考物理二輪專題課件:“配速法”解決擺線問題
- 檢驗科生物安全風(fēng)險評估報告
- 京頤得移動門診產(chǎn)品輸液
- 如何做一名合格的帶教老師PPT精選文檔
評論
0/150
提交評論