操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋(píng)果問(wèn)題_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋(píng)果問(wèn)題_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋(píng)果問(wèn)題_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋(píng)果問(wèn)題_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋(píng)果問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 操作系統(tǒng)課程設(shè)計(jì)報(bào)告專(zhuān)業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí): 08計(jì)本(2)班 學(xué) 號(hào)姓 名成績(jī)*題目名稱(chēng): 蘋(píng) 果 問(wèn) 題 完成日期: 2011 年 6 月 目錄目錄11設(shè)計(jì)題目與要求21.1設(shè)計(jì)目的21.2設(shè)計(jì)要求22 總體設(shè)計(jì)思想22.1總體設(shè)計(jì)思想23 功能設(shè)計(jì)33.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)33.2模塊說(shuō)明33.3 各模塊的算法流程圖43.4 P、V原語(yǔ)的描述74 .開(kāi)發(fā)平臺(tái)及程序清單的主要部分84.1開(kāi)發(fā)平臺(tái)85. 運(yùn)行結(jié)果與運(yùn)行情況分析95.1運(yùn)行結(jié)果96. 自我評(píng)價(jià)與總結(jié)107. 參考資料11附錄121、分工說(shuō)明:122、程序源代碼:121設(shè)計(jì)題目與要求1.1設(shè)計(jì)目的

2、通過(guò)實(shí)現(xiàn)吃水果問(wèn)題的同步,深入了解和掌握進(jìn)程同步的原理。1.2設(shè)計(jì)要求吃水果問(wèn)題的描述:桌子上有一只盤(pán)子,最多可容納兩個(gè)水果,每次只能放入或者取出一個(gè)水果。爸爸專(zhuān)門(mén)向盤(pán)子中放蘋(píng)果(apple),媽媽專(zhuān)門(mén)向盤(pán)子中放橘子(orange),兩個(gè)兒子專(zhuān)門(mén)等待吃盤(pán)子中的橘子,兩個(gè)女兒專(zhuān)門(mén)等吃盤(pán)子中的蘋(píng)果。2 總體設(shè)計(jì)思想2.1總體設(shè)計(jì)思想這是進(jìn)程同步與互斥問(wèn)題的模擬,可以把向盤(pán)子放或取水果的每一個(gè)過(guò)程可以轉(zhuǎn)為一個(gè)進(jìn)程的操作,這些進(jìn)程是互斥的,同時(shí)也存在一定的同步關(guān)系。通過(guò)編程實(shí)踐時(shí),實(shí)際是隨機(jī)的調(diào)用一個(gè)進(jìn)程的操作,而這些進(jìn)程的操作相當(dāng)于程序中的函數(shù)調(diào)用。而計(jì)算機(jī)在執(zhí)行時(shí)每一個(gè)時(shí)刻只能執(zhí)行一個(gè)操作,這就是

3、互斥的表現(xiàn)。同步的模擬可以類(lèi)似于函數(shù)調(diào)用時(shí)的前提關(guān)系即先決條件。這樣進(jìn)程同步模擬就完全可以通過(guò)函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)。 具體的每一個(gè)操作的對(duì)應(yīng)的函數(shù)的關(guān)系: 爸爸向盤(pán)子中放一個(gè)蘋(píng)果:Father() 媽媽向盤(pán)子中放一個(gè)橘子:Mother() 兒子1從盤(pán)子取一個(gè)橘子:Son1() 兒子2從盤(pán)子取一個(gè)橘子:Son2() 女兒1從盤(pán)子取一個(gè)橘子:Daugther1() 女兒2從盤(pán)子取一個(gè)橘子:Daugther2()3 功能設(shè)計(jì)3.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(1)用一個(gè)整型變量Plate_Size表示盤(pán)子里的水果數(shù)量,初始值為0,當(dāng)放水果時(shí)Plate_Size加1,取水果時(shí)Plate_Size減1。變量Plate_S

4、ize的最大值為2,當(dāng)為2時(shí)表示盤(pán)子已經(jīng)滿(mǎn),此時(shí)若進(jìn)行放水果操作,放水果將處于等待狀態(tài);為0時(shí)表示盤(pán)子為空,此時(shí)若進(jìn)行取水果操作,取水果操作將處于等待狀態(tài),Plate_Size是爸爸和媽媽進(jìn)行放水果的私有信號(hào)量。(2)整型變量orange和apple分別表示盤(pán)子中的橘子和蘋(píng)果數(shù)目,初始都為0,其中orange是兒子的私有變量,apple是女兒的私有變量,盤(pán)子中的總水果數(shù)是 Plate_Size=apple+orange。(3)用6個(gè)bool型的變量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六個(gè)進(jìn)程

5、是否處于等待狀態(tài)。處于等待時(shí),變量值為true。(4)兩個(gè)放水果進(jìn)程同時(shí)處于等待狀態(tài)時(shí),若有取水果的操作將自動(dòng)執(zhí)行等待的放水果進(jìn)程,執(zhí)行按等待的先后順序自動(dòng)調(diào)用;兩個(gè)取蘋(píng)果或橘子進(jìn)程同時(shí)候處于等待狀態(tài),若有放蘋(píng)果或橘子的操作將自動(dòng)執(zhí)行等待的取進(jìn)程,進(jìn)行按等待的先后順序自動(dòng)調(diào)用。(5)用一個(gè)隨機(jī)的函數(shù)產(chǎn)生05的6個(gè)整數(shù),分別對(duì)應(yīng)六個(gè)進(jìn)程的調(diào)用。3.2模塊說(shuō)明3.2.1 主函數(shù) 用一個(gè)隨機(jī)的函數(shù)產(chǎn)生05的6個(gè)整數(shù),即 i=rand()%6,分別對(duì)應(yīng)六個(gè)進(jìn)程的調(diào)用,調(diào)用的次數(shù)可以通過(guò)修改K值來(lái)實(shí)現(xiàn),for(k=0;k<10;k+),本程序共產(chǎn)生了10次隨機(jī)的調(diào)用進(jìn)程。3.2.2 6個(gè)進(jìn)程函數(shù)

6、爸爸向盤(pán)子中放一個(gè)蘋(píng)果操作:Father() 媽媽向盤(pán)子中放一個(gè)橘子操作:Mother() 兒子1從盤(pán)子取一個(gè)橘子操作:Son1() 兒子2從盤(pán)子取一個(gè)橘子操作:Son2()女兒1從盤(pán)子取一個(gè)橘子操作:Daugther1()女兒2從盤(pán)子取一個(gè)橘子操作:Daugther2() 3.2.3 Print函數(shù)用于輸出盤(pán)子中蘋(píng)果和橘子的個(gè)數(shù),水果總個(gè)數(shù)及哪些進(jìn)程處于等待狀態(tài)。3.3 各模塊的算法流程圖331放水果操作A、爸爸放蘋(píng)果進(jìn)程的操作流程圖: Father操作:Plate_Size=2否否Daugther1或Daugher2處于等待狀態(tài)是按等待先后順序調(diào)用Daugther1或Daughter2操作

7、是Father進(jìn)程處于等待狀態(tài)Father進(jìn)程調(diào)用:apple+1Plate_Size+1,Print()函數(shù)調(diào)用返回B、媽媽放橘子進(jìn)程的操作流程圖Mother操作:Plate_Size=2否否Son1或Son2處于等待狀態(tài)是按等待先后順序調(diào)用Son1或Son2操作是Mather進(jìn)程處于等待狀態(tài)Mather進(jìn)程調(diào)用:orange+1Plate_Size+1,Print()函數(shù)調(diào)用返回332取水果操作 兒子1取橘子的操作流程圖Son i操作:Plate_Size=0否否Mother處于等待狀態(tài)是調(diào)用Mother操作是Son i進(jìn)程處于等待狀態(tài)Son i進(jìn)程調(diào)用:orange-1Plate_Siz

8、e-1,Print()函數(shù)調(diào)用返回女兒i取蘋(píng)果的操作流程圖Douther i操作:Plate_Size=0否否Father處于等待狀態(tài)是調(diào)用Father操作是Dauther i進(jìn)程處于等待狀態(tài)Douther i進(jìn)程調(diào)用:apple-1Plate_Size-1,Print()函數(shù)調(diào)用返回3.4 P、V原語(yǔ)的描述Semaphore Plate_SizSemaphore appleSemaphore orangeFather()While(ture) P(Plate_Siz) P(mutex) 父親向盤(pán)子中放進(jìn)一個(gè)蘋(píng)果 V(apple) V(mutex)Mother()While(ture) P(P

9、late_Siz) P(mutex) 母親向盤(pán)子中放進(jìn)一個(gè)桔子 V(orange) V(mutex)Son(i)While(ture) P(Plate_Siz) P(mutex) P(apple) 兒子從盤(pán)子中走一個(gè)桔子 V(orange) V(mutex)Daugther (i)While(ture) P(Plate_Siz) P(mutex) 女兒從盤(pán)子中走一個(gè)蘋(píng)果 V(apple) V(mutex)4 .開(kāi)發(fā)平臺(tái)及程序清單的主要部分4.1開(kāi)發(fā)平臺(tái) (1)使用系統(tǒng):indows XP(2)使用語(yǔ)言:C+(3)開(kāi)發(fā)工具:Visual C+ 6.05. 運(yùn)行結(jié)果與運(yùn)行情況分析5.1運(yùn)行結(jié)果第一

10、次運(yùn)行結(jié)果為:第二次運(yùn)行結(jié)果為:6. 自我評(píng)價(jià)與總結(jié) 此次試驗(yàn)是完全在小組合作下完成的,首先在分析問(wèn)題并把問(wèn)題轉(zhuǎn)化為編程問(wèn)題,對(duì)進(jìn)程同步理解的比較透徹;其次我用了個(gè)隨機(jī)函數(shù)來(lái)調(diào)用相應(yīng)的進(jìn)程函數(shù),這對(duì)進(jìn)程間的同步和等待狀態(tài)有很好的說(shuō)明和十分的全面;再次我們?cè)O(shè)了六個(gè)bool型的變量來(lái)表示各進(jìn)程時(shí)候處于等待狀態(tài),還設(shè)置了相應(yīng)的整型變量來(lái)解決等待進(jìn)程在適當(dāng)?shù)臈l件下自動(dòng)調(diào)用的先后問(wèn)題。 任有不足之處,由于各進(jìn)程調(diào)用是隨機(jī)的,在某個(gè)處于等待狀態(tài)時(shí),可以還能被調(diào)用,事實(shí)上這不是很合理。因?yàn)樘幱诘却隣顟B(tài)的進(jìn)程就不可能在被分配調(diào)用。再有就是程序有些代碼部分有重的,可以把這些重復(fù)執(zhí)行的代碼寫(xiě)成函數(shù),需要用時(shí)直接調(diào)

11、用代碼函數(shù)。 這次自己的收獲還是不小,首先使我們提高了分析問(wèn)題,并根據(jù)需求轉(zhuǎn)化成相應(yīng)的程序結(jié)構(gòu)的能力;其次也豐富了自己編寫(xiě)程序,調(diào)試程序的經(jīng)驗(yàn),這使得我編程時(shí)可能出現(xiàn)的錯(cuò)誤的認(rèn)識(shí),并如何去避免產(chǎn)生了新的認(rèn)識(shí)。 對(duì)于此題我覺(jué)得除了可以用隨機(jī)函數(shù)來(lái)產(chǎn)生隨機(jī)數(shù)來(lái)調(diào)用相應(yīng)的進(jìn)程函數(shù),也可以用人輸入的方式來(lái)選擇調(diào)用相應(yīng)的進(jìn)程函數(shù),這樣可以會(huì)麻煩些,不過(guò)對(duì)進(jìn)程同步的模擬可能會(huì)更加透徹??偟膩?lái)說(shuō)這次試驗(yàn)比較成功,加深我了進(jìn)程的理解,同時(shí)也提高了自己的編程的能力。編程是個(gè)長(zhǎng)久的過(guò)程,平時(shí)要多去動(dòng)手實(shí)踐,去提高自己分析問(wèn)題、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力。7. 參考資料1宗大華,宗濤,陳吉人著 操作系統(tǒng) 北京:人民郵

12、電出版社,20092李?lèi)?ài)華,程磊著 面相對(duì)象程序設(shè)計(jì)(C+語(yǔ)言) 北京: 清華大學(xué)出版社,20103宋曉宇 , windows操作系統(tǒng)核心編程實(shí)驗(yàn)教程 中國(guó)鐵道出版社4張麗芬 劉利雄 王金玉編著 操作系統(tǒng)實(shí)驗(yàn)教程 清華大學(xué)出版社附錄1、分工說(shuō)明:*定義信號(hào)量的描述,完成P、V原語(yǔ),畫(huà)出流程圖,寫(xiě)子女進(jìn)程(Son和Daugther)*查找用到的系統(tǒng)調(diào)用,,寫(xiě)父母進(jìn)程(Father和Mother)和main函數(shù)2、程序源代碼:#include<time.h> /用到了time函數(shù),所以要有這個(gè)頭文件#include<stdlib.h> /用到了srand函數(shù),所以要有這個(gè)頭

13、文件#include<iostream.h> int Plate_Size=0; /表示盤(pán)子中當(dāng)前有幾個(gè)水果int orange=0,apple=0; /表示盤(pán)子中orange和apple的個(gè)數(shù)bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag; /六個(gè)進(jìn)程處于等待時(shí),變量值為truevoid main() /main()函數(shù),實(shí)現(xiàn)其他功能函數(shù)的調(diào)用 void Print(); /函數(shù)聲明 void Father(); void Mother(); void Son1(); void So

14、n2(); void Daughter1(); void Daughter2(); int k; srand(unsigned)time(NULL);/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開(kāi)始的隨機(jī)種子 for(k=0;k<10;k+) cout<<"第"<<k+1<<"次操作:"<<endl; /printf("第%d次操作:n",k+1); int i=rand()%6; /隨進(jìn)生成6以?xún)?nèi)的整數(shù),即0-5的6個(gè)整數(shù) Plate_Size=apple+orange; int Mo

15、nFa_c,Daughter_b,Son_a; /for語(yǔ)句的局部變量,控制進(jìn)程等待的優(yōu)先次序,MonFa_c=2,Mather()執(zhí)行,MonFa_c=1,F(xiàn)ather()執(zhí)行 switch(i) /0為Father()調(diào)用,1為Mother()調(diào)用,2、3為Son1()、Son2()調(diào),4、5為Daughteri()調(diào)用 case 0: cout<<"Father調(diào)用."<<endl; if(Plate_Size=2) Father_lag=true; /Father()等待 Print(); if(Mother_lag=false) MonFa

16、_c=1; else Father(); if(Daughter1_lag=true)&&(Daughter2_lag=true) if(Daughter_b=1) Daughter1_lag=false;/Daughter1等待取消 Daughter1(); /處于等待的Daughter1自動(dòng)調(diào)用 Daughter_b=2; /優(yōu)先級(jí)讓給Daughter2 else Daughter2_lag=false;/Daughter2等待取消 Daughter2(); /處于等待的Daughter2()自動(dòng)調(diào)用 Daughter_b=1; /優(yōu)先級(jí)讓給Daughter1 else i

17、f(Daughter1_lag=true) Daughter1_lag=false;/Daughter1等待取消 Daughter1(); /處于等待的Daughter1()自動(dòng)調(diào)用 Daughter_b=0; /沒(méi)有等待的Dauther進(jìn)程 else if(Daughter2_lag=true) Daughter2_lag=false;/Daughter2等待取消 Daughter2(); /處于等待的Daughter2()自動(dòng)調(diào)用 Daughter_b=0; break; case 1: cout<<"Mother調(diào)用."<<endl; if(P

18、late_Size=2) Mother_lag=true; /Mother()等待 Print(); if(Father_lag=false) MonFa_c=2; else Mother(); if(Son1_lag=true)&&(Son2_lag=true) /Son1和Son2都等待 if(Son_a=1) /Son1執(zhí)行 Son1_lag=false;/Son1等待取消 Son1(); /處于等待的Son1()自動(dòng)調(diào)用 Son_a=2; /優(yōu)先級(jí)讓給Son2 else Son2_lag=false;/Son2等待取消 Son2(); /處于等待的Son2()自動(dòng)調(diào)用

19、Son_a=1; /優(yōu)先級(jí)讓給Son1 else if(Son1_lag=true) Son1_lag=false; /Son1等待取消 Son1(); /處于等待的Son1()自動(dòng)調(diào)用 Son_a=0; else if(Son2_lag=true) Son2_lag=false; /Son2等待取消 Son2(); /處于等待的Son2()自動(dòng)調(diào)用 Son_a=0; break; case 2: cout<<"Son1調(diào)用."<<endl; if(orange=0) Son1_lag=true; /Son1處于等待 Print(); if(Son2

20、_lag=false) Son_a=1; /用于判斷Son1和Son2等待的先后性 else Son1(); if(Father_lag=true)&&(Mother_lag=true) if(MonFa_c=1) /Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用 Mother_lag=false; Mother(); MonFa_c=1; else if(Father_lag=true)

21、/只有Father處于等待,調(diào)用 Father_lag=false; Father(); MonFa_c=0; else if(Mother_lag=true)/只有Mother處于等待,調(diào)用 Mother_lag=false; Mother(); MonFa_c=0; break; case 3: cout<<"Son2調(diào)用."<<endl; if(orange=0) Son2_lag=true; /Son2處于等待 Print(); if(Son1_lag=false) Son_a=2; else Son2(); if(Father_lag=tr

22、ue)&&(Mother_lag=true) if(MonFa_c=1)/Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用 Mother_lag=false; Mother(); MonFa_c=1; else if(Father_lag=true) /只有Father處于等待,調(diào)用Father Father_lag=false; Father(); MonFa_c=0; else if(Mo

23、ther_lag=true) /只有Mother處于等待,調(diào)用Mother Mother_lag=false;Mother();MonFa_c=0; break; case 4: cout<<"Daughter1調(diào)用."<<endl; if(apple=0) Daughter1_lag=true; /Daughter1等待 Print(); if(Daughter2_lag=false) Daughter_b=1; else Daughter1(); if(Father_lag=true)&&(Mother_lag=true) if(

24、MonFa_c=1) /Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用 Mother_lag=false; Mother(); MonFa_c=1; else if(Father_lag=true) /只有Father處于等待,調(diào)用 Father_lag=false;Father();MonFa_c=0; else if(Mother_lag=true) /只有Mother處于等待,調(diào)用 Mother_la

25、g=false;Mother();MonFa_c=0; break; case 5: cout<<"Daughter2調(diào)用."<<endl; if(apple=0) Daughter2_lag=true;/Daughter2等待 Print();if(Daughter1_lag=false) Daughter_b=2; else Daughter2();if(Father_lag=true)&&(Mother_lag=true) if(MonFa_c=1) /Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用Fa

26、ther_lag=false;Father();MonFa_c=2; else /Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用 Mother_lag=false;Mother();MonFa_c=1; else if(Father_lag=true) /只有Father處于等待,調(diào)用 Father_lag=false; Father(); MonFa_c=0; else if(Mother_lag=true) /只有Mother處于等待,調(diào)用 Mother_lag=false; Mother(); MonFa_c=0; break; /switch語(yǔ)句結(jié)束 /for語(yǔ)句結(jié)束 /main函數(shù)結(jié)束void Print() /Print函數(shù)(打印盤(pán)子剩余水果及各進(jìn)程等待狀態(tài)) cout<<"現(xiàn)在盤(pán)子里有"<<apple<<"個(gè)蘋(píng)果,"<<orange<&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論