一個小型的操作系統(tǒng)設計與實現(xiàn)_第1頁
一個小型的操作系統(tǒng)設計與實現(xiàn)_第2頁
一個小型的操作系統(tǒng)設計與實現(xiàn)_第3頁
一個小型的操作系統(tǒng)設計與實現(xiàn)_第4頁
一個小型的操作系統(tǒng)設計與實現(xiàn)_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程設計報告南通大學計算機科學與技術(shù)學院操作系統(tǒng)課程設計報告1912專 業(yè):計嵌 151學生姓名:王志宏學號:1513052018時間:2017/6/28設計一個小型的操作系統(tǒng)設計要求主流程圖開始的圖形界面中斷處理頁面替換磁盤調(diào)度時先銀先L學鐘來行進R豕(一)設計流程圖將本學期三次的實驗集成實現(xiàn)1中斷處理2. 作業(yè)調(diào)度3. P原語4. 死鎖5. 頁面替換6. 磁盤調(diào)度操作系統(tǒng)課程設計報告作業(yè)調(diào)度1先來先PV原語|死鎖1哲吃服算通出算服務法心第 1 頁 共 2 頁算法務操作系統(tǒng)課程設計報告1中斷處理模擬時鐘中斷的產(chǎn)生及設計一個對時鐘中斷事件進行處理的模擬程序。計算機系統(tǒng)工作過程中, 若出

2、現(xiàn)中斷事件,硬件就把它記錄在中斷寄存器中。 中斷寄存器的每一位可與一個中斷事件對應,當出現(xiàn)某中斷事件后,對應的中斷寄存器的某一位就被置成 一11I。處理器每執(zhí)行一條指令后,必須查中斷寄存器,當中斷寄存器內(nèi)容不為一oil時,說明有中斷事件發(fā)生。硬件把中斷寄存器內(nèi)容 以及現(xiàn)行程序的斷點存在主存的固定單元,且讓操作系統(tǒng)的中斷處理程序占用處理器來處理出現(xiàn)的中斷事件。操作系統(tǒng)分析保存在主存固定單元中的中斷寄存器內(nèi)容就可知道出現(xiàn)的中斷事件的性質(zhì),從而作出相應的處理。本實習中,用從鍵盤讀入信息來模擬中斷寄存器的作用,用計數(shù)器加1來模擬處理器執(zhí)行了一條指令。每模擬一條指令執(zhí)行后,從鍵盤讀入信息且分析,當讀入信

3、息=0時,表示無中斷事件發(fā)生,繼續(xù)執(zhí)行指令;當讀入信息=1時,表示發(fā)生了時鐘中斷事件,轉(zhuǎn)時鐘中斷處理程序2. 作業(yè)調(diào)度1)先來先服務FCFS開始初始化進程控制塊,讓進程控制塊按 進程到達先后順序讓進程排隊L亠調(diào)度數(shù)組中首個進程,并讓數(shù)組 中的下一位移到首位(計算并打印進程的完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間其中:周轉(zhuǎn)時間 =完成時間-到達時間帶權(quán)周轉(zhuǎn)時間=周轉(zhuǎn)時間/服務時間更改計時器的當前時間,即下一刻進程的開始時間當前時間= 前一進程的完成時間+ 其服務時間第2頁共3頁操作系統(tǒng)課程設計報告Y結(jié)束L先來先服務算法流程3. P原語1 )哲學家吃通心面問題哲學家吃通心面: 在這道題目里, 每把叉子必

4、須互斥使用, 當一位哲學家吃 通心面之前必須執(zhí)行兩個 P操作,獲得自己左右兩邊的叉子, 在吃完通心面后必 須執(zhí)行兩個 V操作,放下叉子。第3頁共4頁操作系統(tǒng)課程設計報告S背宇家處于等待 SutusO4是放丁左右 手工具否哲學家IIISta:us2汙更考狀態(tài)一2r是橋態(tài)改為等仔sratus=C4. 死鎖1)銀行家算法5. 頁面替換第4頁共5頁操作系統(tǒng)課程設計報告1)先進先出FIFO輸出“裝入 L頁調(diào)整FIFO隊列,將 L插入隊尾(HEAD=(HEAD+1)modM)修改主存分塊表和頁表2)LRUFIFO淘汰算法流程第5頁共6頁輸出“裝入L頁調(diào)整堆棧,使 HEAD所指兀素 及以下的元素下移 PHE

5、AD=L修改主存分塊表和頁表LRU淘汰算法流程6.磁盤調(diào)度1)先來先服務算法FCFS第6頁共7頁操作系統(tǒng)課程設計報告開始輸入總的磁道數(shù)輸入提岀遊盤I 0申請 的進程數(shù)輸入晞道序列1似0結(jié)束輸入開始的盛道號輸出碗盤請求序列和掃描 序列求移動的總的硯道數(shù)求平均尋道長度結(jié)束(二)實現(xiàn)原理主界面設計一個框架分別去鏈接處理機管理、存儲器管理和缺頁調(diào)度相關的程序1.中斷第7頁共8頁操作系統(tǒng)課程設計報告2.作業(yè)調(diào)度1)先來先服務FCFS(一)任務先來先服務的調(diào)度算法實現(xiàn)處理機調(diào)度(二)要求1. 實現(xiàn)對FCF算法的模擬實現(xiàn)2. 計算出該算法的平均作業(yè)周轉(zhuǎn)時間、平均帶權(quán)作業(yè)周轉(zhuǎn)時間(三)原理先到達cpu勺作業(yè)先

6、被執(zhí)按作業(yè)到達CP時間先后順序進行非剝奪式調(diào)度, 行。(四)數(shù)據(jù)結(jié)構(gòu)struct task_structchar n ame;/*int nu mber; /*float come_time; /* float run _begin_tin/fe; float run _time; /*float run_en d_tim/e ; int priority; /* int order;/*int run _flag;/*tasksMAX;int fcfs()/*先來 進程名鏈接指針K先服務算法進程名稱*/ 進程編號*/ 到達時間*/ 開始運行時間*/ 運行時間*/ 運行結(jié)束時間*/ 優(yōu)先級*/

7、 運行次序*/調(diào)度標志*/*/到達時間 估計運行時間進程狀態(tài)進程控制塊結(jié)構(gòu)(五)實現(xiàn)方法建立一個鏈表按照到達 cpu勺時間從小到大排列, 只需從第一個作業(yè) (頭結(jié)第8頁共9頁操作系統(tǒng)課程設計報告點)依次調(diào)度到最后一個作業(yè)(尾結(jié)點)(六)運行界面測試數(shù)據(jù):作業(yè)名.到達時間運行時間A028B09C03執(zhí)行FCF算法如下:3. 死鎖假定本系統(tǒng)中的各個所需資源均是獨占型資源,在進程運行的過程中不再釋放,故只需要遍歷鏈表將各個進程中所需的資源統(tǒng)計出來,只要不大于系統(tǒng)中預設的即可,一旦進程所需的資源大于系統(tǒng)中的最大量,給予用戶選擇kill 一進程,已達到釋放資源的目的。死鎖檢測函數(shù):void sisuo(

8、)死鎖解除函數(shù):void safe()第9頁共10頁操作系統(tǒng)課程設計報告4.缺頁調(diào)度1)先進先出FIFO(一)任務采用先進先出FIFO!法實現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的 頁號和運行結(jié)果。(二)要求1.實現(xiàn)對FIFOI法的模擬實現(xiàn)2輸出每次執(zhí)行的結(jié)果。(三)原理基于程序總是按線性順序來訪問物理空間這一假設,總是淘汰最先調(diào)入主存的頁面,即淘汰在主存中駐留時間最長的頁面, 的可能性較大。(四)數(shù)據(jù)結(jié)構(gòu)void FIFO()int len gth;int fifo100=0;int pageLe ngth;in t fifoPage100=0;int i,j;*認為駐留時間最長的頁不再使

9、用先進先 出 算法*He ndl;pageLe ngth=3;len gth=9;for(i=1;i=le ngth;i+)int flag=0;for(j=1;jv=pageLe ngth;j+) if(fifoi=fifoPagej)flag=1; j=pageLe ngth+1;else if(fifoPagej=0) fifoPagej=fifoi; j=pageLe ngth+1;flag=1;if(flag=1)elsecoutvvfor(j=1;j=pageLe ngth;j+) fifoPagej=fifoPagej+1;淘汰vfifoPage1vvendl;第10頁共11頁操

10、作系統(tǒng)課程設計報告fifoPagepageLe ngth=fifoi;(五)實現(xiàn)方法當采用先進先出算法時,用一個數(shù)組構(gòu)成先進先出隊列,數(shù)組中各個元素為進程已在主存的頁號,其隊列頭指針初始化為0.假設分配給每個進程的內(nèi)存塊數(shù)固定。當隊列滿需淘汰時,淘汰最先進入主存的一頁。若該頁修改過,還有存 入磁盤。然后要把當前訪問的頁裝入該塊,并修改頁表和存儲分塊表的對應標志。(六)運行界面測試數(shù)據(jù):頁表長度:9;頁框長度:3;頁面請求數(shù)列:4,4,3,5,1,123,22)LRU(一)任務采用先進先出LR算法實現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的頁號和運行結(jié)果。(二)要求1.實現(xiàn)對LR算法的模擬實現(xiàn)2

11、輸出每次執(zhí)行的結(jié)果。(三)原理最近最少使用頁面替換算法淘汰的頁面是在最近一段時間內(nèi)最久未被訪問的那一頁,它是基于程序局部性原理來考慮的,認為那些剛被使用過的頁面可能還有立即被使用, 而那些在較長時間內(nèi)未被使用的頁面可能不會立即使用。在分頁虛擬存儲系統(tǒng)中, 當硬件發(fā)出缺頁中斷后轉(zhuǎn)操作系統(tǒng)處理缺頁中斷。如果主存中已無空閑塊,可采用LRI算法進行缺頁處理。第11頁共12頁操作系統(tǒng)課程設計報告(四) 數(shù)據(jù)結(jié)構(gòu)void LRU()int len gth;int lru100=0;int pageLe ngth;int lruPage100=0;int i,j;coutvv*最近最少使用LRU算法*He

12、ndl;pageLe ngth=3;len gth=9;for(i=1;i0;cc-) lruPagecc=lruPagecc-1;lruPage1=lrui;flag=1;j=pageLe ngth+1;else if(lruPagej=0)for(i nt vv=j;vv0;vv-)lruPagevv=lruPagevv-1; lruPage1=lrui;j=pageLe ngth+1;flag=1;if(flag=1)elsecoutvvvvlruPagepageLe ngthvve ndl;for(j=pageLe ngth;jO;j-)lruPagej=lruPagej-1;lruP

13、age1=lrui;(五) 實現(xiàn)方法第12頁共13頁操作系統(tǒng)課程設計報告當采用lrU算法時,用一個數(shù)組構(gòu)成堆棧,堆棧中各個元素為進程已在主存的頁號,為了進行頁面置換,可設置一個棧指針,初始化為o.假定分配給每個進程的內(nèi)存塊數(shù)固定不變。當隊列滿需淘汰時,操作系統(tǒng)選擇棧底元素淘汰,他元素向下移一個位置,將新調(diào)入頁放棧指針指示的棧頂。當訪問的頁在棧中時,還應調(diào)整頁從當前位置到棧頂。(六)運行界面測試數(shù)據(jù):頁表長度:9;頁框長度:3;頁面請求數(shù)列: 2,3,5,1,5,5,4,4,3執(zhí)行最近最少使用 LRUI法結(jié)果如下:5.磁盤調(diào)度1)先來先服務算法 FCFS這是一種比較簡單的磁盤調(diào)度算法。它根據(jù)進程

14、請求訪問磁盤的先后次序進行調(diào)度。算法的優(yōu)點是公平、簡單,且每個進程的請求都能依次得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。此算法由于未對尋道進行優(yōu)化,在對磁盤的訪問請求比較多的情況下,此算法將降低設備服務的吞吐量,致使平均尋道時間可能較長,但各進程得到服務的響應時間的變化幅度較小。第13頁共14頁操作系統(tǒng)課程設計報告(三)總結(jié)與體會通過本次課程設計讓我對于圖形界面設計有了一定的思路和看法,同時我對先來先服務、時間片輪轉(zhuǎn)、首次適應算法、最佳適應算法、先進先出和最近最少 使用算法有了更詳盡的認識。在編程的過程中發(fā)現(xiàn)會用到大量的指針,用指針來操作大量的數(shù)據(jù)比較方便,但最后應該記得釋放資源

15、。 從這次實驗中我發(fā)現(xiàn)我對于C+掌握也有所不足,程序經(jīng)過了多次修改才得以完善,在以后應該注重編程 方面的訓練。此外我還更深入的理解了各個進程調(diào)度算法,及實現(xiàn)過程。在編寫程序時查詢了很多資料,間接提高了我的搜索能力。在此次課程設計過程中,對進程的相關知識有了一定的加深。 特別是對進程的進程控制塊的存在和價值有了更進一步 的認識。在編寫程序的過程之中,對進程自身信息的設計和管理以及調(diào)度的算法都有助于對書本知識的理解和掌握。特別是設計先來先服務調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法的時候, 對進程的調(diào)度算法有了更好的深入理解。對進程管理中的等待隊列,就緒隊列,時間片等概念有了更深刻的印象。在設計此模擬操作系統(tǒng)

16、的課設中,也加深了對C+知識的把握。解決了一些以往在編程中遇到了困難。 通過此次的課程設計, 不僅提高了對操作系統(tǒng)的認知, 也在同時提高了編程的能力,加強了實踐。另外,我覺得此次課程設計雖然主要問題是在編程上, 但是經(jīng)過不斷的去調(diào)試,還是成功的調(diào)試了出來。但是這幾個程序用了多天的時間進行分析和修改,雖然出現(xiàn)了不少問題,但收獲頗多!源代碼:#i nclud#i nclud#in elude #in clude 第14頁共15頁操作系統(tǒng)課程設計報告#in elude #in elude #in elude #in clud#in cludusing n amespaeestd;int fcfsou

17、tput(); /* 調(diào)度結(jié)果輸出 */ int fefsi nput(); /進程參數(shù)的初始化 voidkaishi();#defi ne MAX10#defi ne maxsize 1000struct node/建立鏈表來存放進程數(shù)據(jù)charname5; / 進程名稱int need_time;/所需要的時間int allocation;占用epu的情況charstate;/目前的狀態(tài) R為運行,E為運行完畢node *n ext;/鏈表的尾結(jié)點;struct task_struetchar name;/*進程名稱*/int number;/*進程編號*/float come time;

18、/*到達時間*/float runbeg in _time;/*開始運行時間*/float run_time;/*運行時間*/float run end time;/*運行結(jié)束時間*/int priority;/*優(yōu)先級*/int order;/*運行次序*/int run_flag;/*調(diào)度標志*/tasksMAXint counter; /*實際進程個數(shù)*/int fcfs() /*先來先服務算法*/, fcfsinput();float time_temp = 0;int i;int number_schedul;time_temp = e_time;for (i =

19、 0; ico un ter; i+)第15頁共16頁操作系統(tǒng)課程設計報告tasksi.r un _beg in _time = time_temp;tasksi.r un_en d_time = tasksi.r un _begi n_time + tasksi.r un _time;tasksi.r un _flag = 1;time_temp = tasksi.r un_en d_time;nu mber_schedul = i;tasks nu mber_schedul.order = i + 1;fcfsoutput();retur n 0; int fcfsi nput()task

20、_structtt;int i, j;/初始化進程數(shù)coun ter = 3;/初始化每個到達系統(tǒng)的時間為5、7 8e_time =二 ran d() % 9;e_time =二 ran d() % 9;e_time =二 ran d() % 9;for (i = 1; i3; i+)for (j = 0; jtasksj + 1.come_time) tt = tasksj;tasksj = tasksj + 1;tasksj + 1 = tt;/初始化每個進程估計運行的時間 tasksO.run_time = 28;tasks1.

21、ru n_time = 9;tasks2.r un _time = 3;/初始化每個進程的名字 tasks0. name =A;第16頁共17頁操作系統(tǒng)課程設計報告 爭;tasks2. name f ;cout H*先來先服務算法*“ endl en dl;for (i = 0; ico un ter; i+)tasksi.r un _beg in _time = 0;tasksi.r un_en d_time = 0; tasksi.order = 0;tasksi.r un _flag = 0;retur n 0; int fcfsoutput() /* 調(diào)度結(jié)果輸出

22、 */int i;先來先服務cout ”float turn_round_time = 0, f1, w = 0;for (i = 0; ico un ter; i+)f1 = tasksi.r un_en d_time - e_time;turn_ro un d_time += f1;w += (f1 / tasksi.r un _time);cout vt e_time t tasksi.r un time t tasksi.r un beg in tim&v t tasksi.run_end_time t tasksi.or

23、der t f1 t* en dl;cout 作業(yè)名到達時間 運行時間 開始時間停止時間 運行次序 周轉(zhuǎn)時間 endl;en dl;cout 平均周轉(zhuǎn)時間: turn_roun d_time / coun ter en dl;cout 平均帶權(quán)周轉(zhuǎn)時間: w / cou nter endl;cout ;retur n 0;voidzuoyediaodu/)作業(yè)調(diào)度int n;cout t1.先來先服務算法 t 2.返回開始菜單 n;switch( n)case 1: fcfs(); kaishi(); break ;case 2: kaishi(); kaishi(); break ; voi

24、dFIFO()int length;int fifo100 = 0 ;int pageLength;int fifoPage100 = 0 ;int i, j;cout *pageLe ngth = 3;len gth = 9;cout 時刻 t t;for (i = 0; ile ngth; i+)先進先出算法*“ en dl;cout i t;cout endl 引用串 t for (i = 1; i = len gth; i+)fifoi = ran d() % 5 + 1; cout fifoi t; for (i = 1; i = len gth; i+)int flag = 0;f

25、or (j = 1; j = pageLe ngth; j+) if (fifoi = fifoPagej) flag = 1;j = pageLe ngth + 1;else if (fifoPagej = 0) fifoPagej = fifoi;j = pageLe ngth + 1; flag = 1;if (flag = 1)第18頁共19頁操作系統(tǒng)課程設計報告elsecout ”t淘汰 fifoPage1 endl;for (j = 1; j = pageLe ngth; j+)fifoPagej = fifoPagej + 1;fifoPagepageLe ngth = fifo

26、i;cout endl t= i - 1 時 t for ( int jk = 1; jk = pageLe ngth; jk+) cout P VV jk t cout v endl tfor ( int s = 1; s = pageLength; s+) cout v fifoPages t;cout v en dl;voidLRU()int length;int lru100 = 0 ;int pageLength;int lruPage100 = 0 ;int i, j;cout V *近最/卜使用LRU算*en dl;pageLe ngth = 3;le ngth = 9;cout

27、 v 時刻 t v t for (i = 0; ile ngth; i+)cout VV i VV t;cout vv endl vv引用串vv tfor (i = 1; i = len gth; i+)lrui = ran d() % 5 + 1;cout v lrui v t第19頁共20頁操作系統(tǒng)課程設計報告for (i = 1; i = len gth; i+)int flag = 0;for (j = 1; j 0; cc-)lruPagecc = lruPagecc - 1;lruPage1 = lrui;flag = 1;j = pageLe ngth + 1;else if (

28、lruPagej = 0)for ( int vv = j; vv0; vv-)lruPagevv = lruPagevv - 1;lruPage1 = lrui;j = pageLe ngth + 1;flag = 1;if (flag = 1)elsecout t淘汰 lruPagepageLe ngth 0; j-)lruPagej = lruPagej - 1;lruPage1 = lrui;cout endl t= i - 1 時 t;for ( int jk = 1; jk = pageLe ngth; jk+)cout P vv jk t;cout endl t;for ( in

29、t s = 1; s = pageLength; s+)cout lruPages vt;cout en dl;第20頁共21頁操作系統(tǒng)課程設計報告voidqueye()/頁面替換int n;cout en dl;cout t1.先進先出算法t2.LRl算法t3.返回開始菜單 n;switch( n)case 1: FIFO(); kaishi(); break ;case 2: LRU(); kaishi(); break ;case 3: kaishi(); kaishi(); break ; /*判斷輸入數(shù)據(jù)是否有效*int decide(char str) /判斷輸入數(shù)據(jù)是否有效 in

30、t i = 0;while( str i !=0)if ( str i 9)return 0;break ; i+;retur n i;將字符串轉(zhuǎn)換成數(shù)字*int trans( char str , int a) /將字符串轉(zhuǎn)換成數(shù)字 int i;int sum = 0;for (i = 0; i a; i+)sum = sum +n( )( stri -0 )*pow(10,a - i - 1);retur n sum;第21頁共22頁操作系統(tǒng)課程設計報告*先來先服務調(diào)度算*voidFCFS(int cidao , int m 磁道號數(shù)組,個數(shù)為 mint now; /當前磁道號int su

31、m = 0;/總尋道長度 int j, i;int a;charstr100;cout vv *先來先服* en dl;float ave; /平均尋道長度cout 磁盤請求序列為:for (i = 0; i mi+)/按先來先服務的策略輸出磁盤請求序列cout cidao i cout en dl;cout str; /對輸入數(shù)據(jù)進行有效性判斷a = decide(str);if (a = 0)cout 輸入數(shù)據(jù)的類型錯誤,請重新輸入! en dl;gotoB;elsenow = tra ns(str, a);/輸入當前磁道號sum += absid ao 0 - now);cout 磁盤掃

32、描序列為:for (i = 0; i mi+)/輸出磁盤掃描序列cout cidao i for (i = 0, j = 1; j mi+, j+)/ 求平均尋道長度sum += abcdl ao j - cidao i);ave = (float )(sum) / ( float )( m);cout en dl;cout 平均尋道長度: ave endl;voidcipa ndiaodu() 磁盤調(diào)度int a;第22頁共23頁操作系統(tǒng)課程設計報告int c; /菜單項int cidao maxsigeint i = 0, count;charstr100;cout en dl;cout

33、t1.先來先服務t2.返回開始菜單 str;/對輸入數(shù)據(jù)進行有效性判斷a = decide(str);if (a=0)cout vv 輸入數(shù)據(jù)的類型錯誤,請重新輸入! endl; |gotoF; /輸入錯誤,跳轉(zhuǎn)到F,重新輸入elsec = tran s(str, a);cout 請輸入磁道序列(0結(jié)束): str;/對輸入數(shù)據(jù)進行有效性判斷a = decide(str);if (a = 0)cout str;/對輸入數(shù)據(jù)進行有效性判斷a = decide(str);(a = 0)cout ”輸入數(shù)據(jù)的類型錯誤,請重新輸入! en dl;elsecidaoi = tran s(str, a);

34、i+;一cou nt = i - 1;/要訪問的磁道數(shù)cout 你輸入的磁道序列為:;for (i = 0; ico unt; i+)cout cidaoi ;/ 輸出磁道序列第23頁共24頁操作系統(tǒng)課程設計報告switch(c)case 1:/使用FCF算法FCFS(cidao, coun t); kaishi(); break ;case 2:kaishi(); kaishi(); breakbooltools5;/全局變量,用餐工具CRITICAL_SECTIO N信號量,在線程中使用,臨界區(qū)class Philosopherprivate:int number;int status;

35、/標記當前哲學家的狀態(tài),0表示正在等待/ (即處于饑餓狀態(tài)),1表示得到兩支筷子正在吃飯,2表示正在思考publicPhilosopher t num二 0) : status(2), numberQumX const int find()retur n nu mber;const int getinfo()return status;void Chan ge(); /狀態(tài)改變函數(shù)void dead_lock();void Philosopherdead_lock()_E nterCriticalSectio n(&cs); / 進入臨界區(qū)stri ng s;_if (status = 1)t

36、ools nu mber % 5 true;II tools(number-1)%5=true;status = 2;第24頁共25頁操作系統(tǒng)課程設計報告else if (status = 2)status = 0;tools( nu mber-1)%5=false;tools( nu mber-1)%5=true;else if (status = 0)tools nu mber % 5 false;tools( nu mber - 1) % 5 = false;status = 1;LeaveCriticalSecti on(&cs);/ coutCha nge();第25頁共26頁操作系

37、統(tǒng)課程設計報告int i =pA-getinfo();string str;if (i = 0)str =等待”else if (i = 1)str =就餐”stri ng toolstatus( bool a)string state;if ( a =true)state =閑;if ( a =false)state =用;retur n state;voiddead_lock()charcon = y ; /判斷是否繼續(xù)/ con 二n;for ( int i = 0; i5; i+)toolsi =true; /筷子都未使用,初始化PhilosopheP 1(1), P2(2), P3(

38、3), P4,P5(5);InitializeCriticalSection(&cs);II 初始化初始化臨界區(qū)cout ”*pv原1 語 * en dl;cout -狀態(tài)說明示意圖: en dl;cout ” 哲學家1號的狀態(tài) en dl;cout ”筷子0的狀態(tài) 筷子1的狀態(tài)en dl;cout 哲學家5號的狀態(tài) 哲學家2號的狀態(tài) endl;cout ”筷子4的狀態(tài) 筷子2的狀態(tài)en dl;cout ”哲學家4號的狀態(tài) 哲學家3號的狀態(tài) endl;cout ” 筷子3的狀態(tài) endl;coutvvvv哲學家 3號的狀態(tài) endl;cout 筷子的狀態(tài),用表示使用中,閑表示空閑中。” end

39、l;cout ” endl;IIcout 哲學家們開始生活:e ndl;IIcout 當前狀態(tài):;cout con;while(c on = y)Pl.Cha nge(); P2.ChfingC)a ngi(4Cha ngdP5.Cha nge();第26頁共27頁操作系統(tǒng)課程設計報告cout 當前狀態(tài)為: endl;cout ” P1.find() print(&P1) endl;cout toolstatus(tools0) toolstatus(tools1) en dl;cout P5.fi nd() prin t(&P5) P2.fi nd() print(&P2) en dl;co

40、ut toolstatus(tools4) toolstatus(tools2) en dl;cout P4.fi nd() print(&P4) P3.fi nd() prin t(&P3) en dl;cout toolstatus(tools3) endl;cout en dl;cout con;Sleep(20);while(c on = n)Pl.deadock();P2.deadock(); P3.deado ck(); P4.deado ck(); P5.deadock();cout 死鎖情況 endl;cout P1.find() print(&P1) endl;cout toolstatus(tools0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論