進(jìn)程同步模擬吃水果,操作系統(tǒng)課程設(shè)計(jì)解析_第1頁
進(jìn)程同步模擬吃水果,操作系統(tǒng)課程設(shè)計(jì)解析_第2頁
進(jìn)程同步模擬吃水果,操作系統(tǒng)課程設(shè)計(jì)解析_第3頁
進(jìn)程同步模擬吃水果,操作系統(tǒng)課程設(shè)計(jì)解析_第4頁
進(jìn)程同步模擬吃水果,操作系統(tǒng)課程設(shè)計(jì)解析_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)扌艮告課程名稱:操倫菜統(tǒng)課程設(shè)計(jì)設(shè)計(jì)題目:進(jìn)程同步模擬吃水果問題系 別:計(jì)算機(jī)系專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)組 別:學(xué)生姓名:學(xué)號:起止日期:指導(dǎo)教師:指導(dǎo)教師評語:指導(dǎo)教師簽名:年月日成 績 評 定項(xiàng)目權(quán)重成績1、設(shè)計(jì)過程中出勒、學(xué)習(xí)態(tài)度等方而0. 12、設(shè)計(jì)技術(shù)水平0.43、安全程度及可操作程度0.24、設(shè)計(jì)報(bào)告書寫及圖紙規(guī)范程度0. 3總成績教研室審核意見:教研室主任簽字:年月日教學(xué)院(系)審核意見:主任簽字:年月日目錄第一章需求分析11.1問題概述11. 2任務(wù)分析11 3設(shè)計(jì)思路11 4運(yùn)行環(huán)境1第二章概要設(shè)計(jì)22.1數(shù)據(jù)結(jié)構(gòu)22. 2模塊說明22. 2.1主函數(shù)22.2.2 6

2、個(gè)進(jìn)程函數(shù)22. 3操作的流程圖3第三章詳細(xì)設(shè)計(jì)43. 1定義類43. 2定義各個(gè)過程53. 3定義Print 0函數(shù)53. 4主函數(shù)6第四章調(diào)式和操作說明134. 1測試用例134. 2運(yùn)行結(jié)果14第五章總結(jié)和體會15參考文獻(xiàn):15致謝:15第一章需求分析1.1問題概述桌子上有一只盤子,最多可容納兩個(gè)水果,每次只能放入或者取出一個(gè) 水果。爸爸專門向盤子中放蘋果,媽媽專門向盤子中放橘子,兩個(gè)兒子專門 等待吃盤子中的橘子,兩個(gè)女兒專門等吃盤子中的蘋果。1.2任務(wù)分析1. 模擬吃水果的同步模型:桌子上有一只盤子,最多可容納兩個(gè)水果, 每次只能放入或者取出一個(gè)水果。爸爸專門向盤子中放蘋果,媽媽專門向

3、 盤子中放橘子,兩個(gè)兒子專門等待吃盤子中的橘子,兩個(gè)女兒專門等吃盤 子中的蘋果。2. 設(shè)計(jì)報(bào)告內(nèi)容要求:模擬吃水果問題,實(shí)現(xiàn)進(jìn)程的同步操作; 給出實(shí)現(xiàn)方案(包括數(shù)據(jù)結(jié)構(gòu)和模塊說明等);畫出程序的基本結(jié)構(gòu)框圖和 流程圖;分析說明每一部分程序的的設(shè)計(jì)思路;實(shí)現(xiàn)源代碼;按期提交完整的程序代碼和可執(zhí)行程序;根據(jù)要求完成課程設(shè)計(jì)報(bào)告。1 3設(shè)計(jì)思路這是進(jìn)程同步問題的模擬,可以把向盤子放或取水果的每一個(gè)過程可以 轉(zhuǎn)為一個(gè)進(jìn)程的操作,這些進(jìn)程是互斥的,同時(shí)也存在一定的同步關(guān)系。通 過編程實(shí)踐時(shí),實(shí)際是隨機(jī)的調(diào)用人一個(gè)進(jìn)程的操作,而這些進(jìn)程的操作相 當(dāng)于程序中的函數(shù)調(diào)用。而計(jì)算機(jī)在執(zhí)行時(shí)每一個(gè)時(shí)刻只能執(zhí)行一個(gè)

4、操作, 這就默認(rèn)了互斥。同步的模擬可以類似于函數(shù)調(diào)用時(shí)的前提關(guān)系即先決條 件。這樣進(jìn)程同步模擬就完全可以通過函數(shù)的調(diào)用來實(shí)現(xiàn)。具體的每一個(gè)操作的對應(yīng)的函數(shù)的關(guān)系:爸爸向盤子中放一個(gè)蘋果:FatherO媽媽向盤子中放一個(gè)橘子:Mother ()兒子1從盤子取一個(gè)橘子:Son 1()兒子2從盤子取一個(gè)橘子:Son2()女兒1從盤子取一個(gè)橘子:Daugtherl()兒子1從盤子取一個(gè)橘子:Daugther2()1.4運(yùn)行環(huán)境(1) :硬件配置個(gè)人計(jì)算機(jī):PHI 500MHz以上/128M內(nèi)存/10G硬盤(2) :軟件配置操作系統(tǒng):Windows XP開發(fā)軟件:VisualC+6. 0第二章概要設(shè)計(jì)2

5、.1數(shù)據(jù)結(jié)構(gòu)用一個(gè)整型變量Plate_Size表示盤子,初始值為0,當(dāng)放水果時(shí) Plate_Size加1,取水果時(shí)Plate.Size減1。變量Plate_Size的最大值為2, 當(dāng)為2時(shí)表示盤子已經(jīng)滿,此時(shí)若進(jìn)行放水果操作,放水果將處于等待 狀態(tài);為0時(shí)表示盤子為空,此時(shí)若進(jìn)行取水果操作,取水果操作將處 于等待狀態(tài)。(2) 整型變量orange和apple分別表示盤子中的橘子和蘋果數(shù)山 初始都 為 0, Plate_Size=apple+orangeo(3) 用 6 個(gè) bool 型的變量 Father_lag, Mother_lag, Sonl_lag, Son2_lag, Daughte

6、r 1 Jag, Daughter2ag表示六個(gè)進(jìn)程是否處于等待狀態(tài)。處于等 待時(shí),變量值為true。(4) 兩個(gè)放水果進(jìn)程進(jìn)程同時(shí)處于等待狀態(tài)時(shí),若有取水果的操作將自動 執(zhí)行等待的放水果進(jìn)程,執(zhí)行按等待的先后順序;兩個(gè)取蘋果或橘子進(jìn) 程同時(shí)候處于等待狀態(tài),若有放蘋果或橘子的操作將自動執(zhí)行等待的取 進(jìn)程,進(jìn)行按等待的先后順序。(5) 用一個(gè)隨機(jī)的函數(shù)產(chǎn)生05的6個(gè)整數(shù),分別對應(yīng)六個(gè)進(jìn)程的調(diào)用。2. 2模塊說明2.2.1主函數(shù)用一個(gè)隨機(jī)的函數(shù)產(chǎn)生0-5的6個(gè)整數(shù),分別對應(yīng)六個(gè)進(jìn)程的調(diào)用, 調(diào)用的次數(shù)可以自己輸入,本程序共產(chǎn)生了 10次隨機(jī)的調(diào)用進(jìn)程。 2.2.2 6個(gè)進(jìn)程函數(shù)爸爸向盤子中放一個(gè)蘋

7、果操作:Father()媽媽向盤子中放一個(gè)橘子操作:Mother()兒子1從盤子取一個(gè)橘子操作:Son 1()兒子2從盤子取一個(gè)橘子操作:Son2()女兒1從盤子取一個(gè)橘子操作:Daugtherl()女兒2從盤子取一個(gè)橘子操作:Daugther2()2. 2. 3 Print 函數(shù)用于輸出盤子中蘋果和橘子的個(gè)數(shù),水果總個(gè)數(shù)及有哪些進(jìn)程處于等待狀 態(tài)。2. 3操作的流程圖Sonl操作:圖二吃水果的流程圖(假如兒子1先第三章詳細(xì)設(shè)計(jì)3. 1定義類*/*cI ass A1pr ivate:int apple=0; int orange二0;public:void Fat her (); void M

8、other ();void Son1 ();void Son2 ();void Daughter1 (); void Daughter2 ();void pr int ();3. 2定義各個(gè)過程void Father () /Father 進(jìn)程apple+; Print ();void Mother () /Mother 進(jìn)程orange+;/Print ();void Sonl () /Sonl 進(jìn)程/void Son2 ()orange; Print ();/Son2進(jìn)程orange;/Print ();void Daughterl () /Daughterl 進(jìn)程apple;/Print

9、 ();void Daughter2 () /Daughter2 進(jìn)程apple;/Print ();33定義Print ()函數(shù)void Print ()coutz,現(xiàn)在盤子里有,apple,z個(gè)蘋果,orangez,個(gè)橘子共有,apple+orange,/個(gè)水果.,zendl;if(Father_lag=true)cout,F(xiàn)ather進(jìn)程處于等待狀態(tài),“;if(Mother_lag=true)cout,Mother進(jìn)程處于等待狀態(tài),“;if(Sonl_lag=true)cout,zSonl進(jìn)程處于等待狀態(tài),“;if(Son2_lag=true)cout,Son2進(jìn)程處于等待狀態(tài),“;if

10、(Daughterl_lag=true)cout,Daughterl進(jìn)程處于等待狀態(tài),“;if(Daughter2_lag=true)cout,Daughter2進(jìn)程處于等待狀態(tài),“; if(Father_lag=false)&(Mother_ld薩二false) &(Sonl_ldg二二false)&(Son2_la滬二false)&(Daughterl_lag=false)&( Daughter2_lag=false)!=true)coutendl;3. 4主函數(shù)int main()int k;srand(unsigned) time (NULL) ;/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間

11、開始的 隨機(jī)種子for(k=0;k10;k+) int i;cout/z 第次操作:/zendl;i=rand() %6;/隨進(jìn)生成 1-5.Plat e_S i z eapp1e+orange;switch(i)case 0:cout,F(xiàn)ather 調(diào)用.,endl; if(Plate_Size=2) Father_lag=true; /Father ()等待Print ();if(Mother_lag=false)MonFa_c=l;elseFatherO ;Print ();if(Daughterl_lag=true)&(Daughter2_lag=true)if(Daughter_b=

12、l)Daughterl_lag=false; /Daughterl 等待取消 cout,z處于等待的Daughterl自動被調(diào)HI,endl; Daughterl () :/處于等待的Daughterl自動調(diào)用Print ();Daughter_b=2;elseDaughter2_lag=false; /Daughter2 等待取消 cout處于等待的Daughter2自動被調(diào)用endl; Daughter2 () ;/處于等待的Daughter2 ()自動調(diào)用Print ();Daughter_b=l;elseif (Daughterl_lag=true)Daughterl_lag=fals

13、e; /Daughterl 等待取消 cout處于等待的Daughterl自動被調(diào)用,endl; Daughterl () ;/處于等待的Daughterl ()自動調(diào)用Print ();Daughter_b=O;else if(Daughter2_lag=true)Daughter2_lag=false; /Daughter2 等待取消 cout處于等待的Daughterl自動被調(diào)用,endl;Daughter2 () ;/處于等待的Daughter2 ()自動調(diào)用Daughter_b=O;break;case 1:cout,/Mother 調(diào)用.z,endl;辻(Plate_Size=2)

14、Mother_lag=true; /等待Print ();if(Father_lag=false)MonFa_c=2;elseMother ();Print ();if(Sonl_lag=true)&(Son2_lagF二true)if(Son_a=l)Sonl_la薩fdlse;/Sonl 等待取消cout,z處于等待的Sonl自動被調(diào)用endl;Sonl (): 處于等待的Sonl ()自動調(diào)用 Print ();Son_a=2;elseSon2_lag=false;/Son2 等待取消cout/z處于等待的Son2自動被調(diào)用,zendl;Son2 (); 處于等待的Son2()自動調(diào)用

15、Print ();Son_a=l;elseif (Sonl_lag=true)Sonl_lag二false; /Sonl 等待取消cout,z處于等待的Sonl自動被調(diào)用z,endl;Sonl ();處于等待的Sonl ()自動調(diào)用Print ();Son_a=0;else if(Son2_lag=true)Son2_lag=false; /Son2 等待取消cout,/處于等待的Son2自動被調(diào)用,endl: Son2() ;/處于等待的Son2()自動調(diào)用Print ();Son_a=0;break;case 2:cout,Sonl 調(diào)用.,endl:if(orange=0)Sonl_la

16、g=true; /Sonl 處 F等待Print ();if(Son2_ldg二二false)Son_a=l;/用于判斷Sonl和Son2等待的先后性elseSonl ():Print ();if(Father_lag=true)&(Mother_ldgF二true)if (MonFa_c=l) /Father和Mother同時(shí)處于等待,但Father先等待,因此 先調(diào)用Father_lag=false;cout處于等待的Father自動被調(diào)用,endl;Father ();Print ();MonFa_c=2;else /Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)

17、用Mother_lag=false;cout,/處于等待的Mother自動被調(diào)用endl; Mother ();Print ();MonFa_c=l;else辻(Father_lag=true) /只有Father處于等待,調(diào)用Father_lag=false;cout/,處于等待的Father自動被調(diào)用,endl;FatherO ;Print ();MonFa_c=0;else if (Mother_lag=true)/只有 Mothe 處于等待, 調(diào)用Mother_lag=false;coutz,處于等待的Mother自動被調(diào)用endl;Mother ();Print (); MonFa_

18、c=0;break;case 3:coutSon2 調(diào)用.,endl:if(orange=0)Son2_lag=true; /Son2 處于等待Print ();if(Sonl_lag=false)Son_a=2;elseSon2 ();Print ();if(Father_lag=true)&(Mother_lagF二true)辻(MonFa_c=l) /Father和Mother同時(shí)處于等待,但Father先等 待,因此先調(diào)用Father_lag=false;cout/,處于等待的Father自動被調(diào)用endl; Father ();Print (); MonFa_c=2;else /Fa

19、ther和Mother同時(shí)處于等待,但Mother先等待, 因此先調(diào)用Mother_lag=false;cout處于等待的Mother自動被調(diào)用endl;Mother ();Print ();MonFa_c=l;else辻(Father_lag=true)/只有 Father 處于等待,調(diào)用Father_lag=false;cout,/處于等待的Father自動被調(diào)用end Father ();Print ();MonFa_c=0;else if (Mother_lag=true) /只有 Mother 處于等待,調(diào)用Motherlagfalse;cout/,處于等待的Mother自動被調(diào)用,

20、endl; Mother ();Print ();MonFa_c=0;break;case 4:cout,Daughterl 調(diào)用.endl;if (apple二二0)Daught er1_1ag=true;/Daughter1Print ();if(Daughter2_lag=false)Daughter_b=l;Daughter 1 ();Print ();if(Father_lag=true)&(Mother_lag二二true)辻(MonFa_c=l) /Father 和 Mother 同時(shí)處于等待,但 Father 先 /等待,因此先調(diào)用Father_lag=false;cout,z

21、處于等待的Father自動被調(diào)用endl;Father ();Print (); MonFa_c=2;else /Father和Mother同時(shí)處于 等待,但Mother先等待,因此先調(diào)用Mother_lag=false;cout,/處于等待的Mother自動被調(diào)用,endl;Mother ();Print ();MonFa_c=l;else辻(Father_lag=true) /只有Father處于等待,調(diào)用Father_lag=false; cout處于等待的Father自動被調(diào)用endl;Father ();Print (); MonFa_c=0;else if (Mother_lag=

22、true) /只有 Mother 處于等待,調(diào)用Mother_lag=false;cout,/處于等待的Mother自動被調(diào)用endl;Mother (); Print ();MonFa_c=0;break; case 5:cout,Daughter2 調(diào)用.endl;if (apple二二0)Daughter2_lag=true; /Daughter2 等待Print ();if (Daught er1_1ag=fa1s e)Daughter_b=2;elseDaught er2 ();Print ();if(Father_lag=true)&(Mother_lag=true)if (Mon

23、Fa_c=l) /Father 和 Mother 同時(shí)處于等待,但 Father 先等 待,因此先調(diào)帀Father_lag=false;cout/,處于等待的Father自動被調(diào)用endl; Father ();Print ();MonFa_c=2;else /Father和Mother同時(shí)處于等待,但Mother先等待,因此 先調(diào)用 Mother_lag=false;cout/,處于等待的Mother自動被調(diào)用,endl; Mother ();Print (); MonFa_c=l;elseif (Father_lag=true)/只有 Father 處于等待,調(diào)用 Father_lag=f

24、alse;cout/,處于等待的Father自動被調(diào)用,endl; Father ();Print (); MonFa_c=0;else 辻(Mother_lag=true) /只有Mother 處于等待, 調(diào)用 Mother_lag=false;cout處于等待的Mother自動被調(diào)用,endl;Mother ();Print (); MonFa_c=0;break;return 0;第四章調(diào)式和操作說明4. 1測試用例由于程序是模擬產(chǎn)生10次隨機(jī)的操作,執(zhí)行相應(yīng)的函數(shù)來模擬進(jìn)程同步。可以將程序運(yùn)行兩次將會得到不同的結(jié)果。4. 2運(yùn)行結(jié)果隨即運(yùn)行的結(jié)果C: Distrat.QrLocLL S

25、Eonl.調(diào)用.現(xiàn)在盤子里有0個(gè)蘋果,0個(gè)槁子尹有0個(gè)水杲 弱門丄進(jìn)建處于等待狀態(tài)再“2進(jìn)翟處于等待狀態(tài). 第7次操作二 ionl.調(diào)用現(xiàn)在盤子里有0個(gè)蘋果,0個(gè)槁子,并有0個(gè)水果. -onlSg處于蒔彳寺狀態(tài)進(jìn)垂于等待秩態(tài). 第8次扌仕_ thei*W5onl進(jìn)程處于等待狀態(tài),Son201子“共有0個(gè)水果-蘇囂嗨調(diào) 曲nl進(jìn)程處于等待: 第9次堤律it herT?n e現(xiàn)在盤第邁決播彳乍二 otherra廠 斑在鋅. Jonlpgfe:few廿子Egi*ess an y ke y to cont: inulc子共有1個(gè)水果.c: C: BocnBeiits and Sett incslAdhi ni str at or Local

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論