一個(gè)小型的操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
一個(gè)小型的操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁
一個(gè)小型的操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、南通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院操作系統(tǒng)課程設(shè)計(jì)報(bào)告專 業(yè):計(jì)嵌151學(xué)生姓名:王志宏學(xué)號(hào):18 時(shí)間:2017/6/28設(shè)計(jì)一個(gè)小型的操作系統(tǒng)設(shè)計(jì)要求將本學(xué)期三次的實(shí)驗(yàn)集成實(shí)現(xiàn):1. 中斷處理2作業(yè)調(diào)度3. PV原語4. 死鎖5. 頁面替換6. 磁盤調(diào)度(一)設(shè)計(jì)流程圖主流程圖1. 中斷處理模擬時(shí)鐘中斷的產(chǎn)生及設(shè)計(jì)一個(gè)對(duì)時(shí)鐘中斷事件進(jìn)行處理的模擬程序。計(jì)算機(jī)系統(tǒng)工作過程中,若出現(xiàn)中斷事件,硬件就把它記錄在中斷寄存器中。 中斷寄存器的每一位可與一個(gè)中斷事件對(duì)應(yīng), 當(dāng)出現(xiàn)某中斷事件后,對(duì)應(yīng)的中斷 寄存器的某一位就被置成一1 llo處理器每執(zhí)行一條指令后,必須查中斷寄存器, 當(dāng)中斷寄存器內(nèi)容不為一0

2、1時(shí),說明有中斷事件發(fā)生。硬件把中斷寄存器內(nèi)容 以及現(xiàn)行程序的斷點(diǎn)存在主存的固定單元,且讓操作系統(tǒng)的中斷處理程序占用處 理器來處理出現(xiàn)的中斷事件。操作系統(tǒng)分析保存在主存固定單元中的中斷寄存器 內(nèi)容就可知道出現(xiàn)的中斷事件的性質(zhì), 從而作出相應(yīng)的處理。本實(shí)習(xí)中,用從鍵 盤讀入信息來模擬中斷寄存器的作用,用計(jì)數(shù)器加1來模擬處理器執(zhí)行了一條指令。每模擬一條指令執(zhí)行后,從鍵盤讀入信息且分析,當(dāng)讀入信息=0時(shí),表示無中斷事件發(fā)生,繼續(xù)執(zhí)行指令;當(dāng)讀入信息 =1時(shí),表示發(fā)生了時(shí)鐘中斷事 件,轉(zhuǎn)時(shí)鐘中斷處理程序2作業(yè)調(diào)度1)先來先服務(wù)FCFS數(shù)組為空結(jié)束先來先服務(wù)算法流程原語當(dāng)一位哲學(xué)家吃 在吃完通心面后必1

3、 )哲學(xué)家吃通心面問題哲學(xué)家吃通心面:在這道題目里,每把叉子必須互斥使用, 通心面之前必須執(zhí)行兩個(gè)P操作,獲得自己左右兩邊的叉子, 須執(zhí)行兩個(gè)V操作,放下叉子。4.死鎖1)銀行家算法5.頁面替換1)先進(jìn)先出FIFO2) LRUFIFO淘汰算法流程修改主存分塊表和頁表LRU淘汰算法流程6.磁盤調(diào)度1)先來先服務(wù)算法FCFS幵始輸入呈的讎道數(shù)輸入握岀磁盤10申請(qǐng) 的進(jìn)程數(shù)輸入磁道序列(10結(jié)束諭入開始的磁道號(hào)諭出磁盤請(qǐng)求疼列和打描 序列求移動(dòng)的總的5S道數(shù)求平均尋道長(zhǎng)度結(jié)東(二)實(shí)現(xiàn)原理主界面設(shè)計(jì)一個(gè)框架分別去鏈接處理機(jī)管理、存儲(chǔ)器管理和缺頁調(diào)度相關(guān)的程序操作系統(tǒng)課程祓計(jì)1中斷處理 2-作業(yè)調(diào)度3

4、死鎖4.頁面替換5磁盤調(diào)度1. 中斷1申曲處魚乩柞玄死櫃丄口匠替楓11開始£憊回開洶某隼1 _當(dāng)前殺圮咖:Tun 28 13:9:53 2D 17肪 斷 時(shí)晰 中 沖 中中 -I - rr 亍示 謹(jǐn) 區(qū) 喘m寺 lr- -牢 亍 亮一進(jìn)程名稱*/進(jìn)程編號(hào)*/到達(dá)時(shí)間*/開始運(yùn)行時(shí)間*/ 運(yùn)行時(shí)間*/ 運(yùn)行結(jié)束時(shí)間*/ 優(yōu)先級(jí)*/ 運(yùn)行次序*/ 調(diào)度標(biāo)志*/2作業(yè)調(diào)度1)先來先服務(wù)FCFS(一)任務(wù)先來先服務(wù)的調(diào)度算法實(shí)現(xiàn)處理機(jī)調(diào)度。(二)要求1. 實(shí)現(xiàn)對(duì)FCFS算法的模擬實(shí)現(xiàn)2. 計(jì)算出該算法的平均作業(yè)周轉(zhuǎn)時(shí)間、平均帶權(quán)作業(yè)周轉(zhuǎn)時(shí)間。(三)原理按作業(yè)到達(dá)CPU時(shí)間先后順序進(jìn)行非剝奪式

5、調(diào)度,先到達(dá)CPU的作業(yè)先被執(zhí) 彳亍。(四)數(shù)據(jù)結(jié)構(gòu)struct task_struct _char n ame;/*int nu mber;/*float come_time; /* float run_ begin_time;/*float run _time;/*float run_en d_time;/*int priority;/*int order;/*int run _flag;/*tasksMAX;int fcfs()/*先來先服務(wù)算法*/進(jìn)程名鏈接指針 到達(dá)時(shí)估計(jì)運(yùn)行時(shí)間 進(jìn)程狀態(tài) : 進(jìn)程控制塊結(jié)構(gòu)(五)實(shí)現(xiàn)方法建立一個(gè)鏈表按照到達(dá)CPU的時(shí)間從小到大排列,只需從第一個(gè)作業(yè)

6、(頭結(jié) 點(diǎn))依次調(diào)度到最后一個(gè)作業(yè)(尾結(jié)點(diǎn))。(六)運(yùn)行界面 測(cè)試數(shù)據(jù):作業(yè)名到達(dá)時(shí)間運(yùn)行時(shí)間A028B09C03執(zhí)行FCFS算法如下:2.返國H冰林冰水畔和并栩林冰半押栩林#先來先 服 務(wù)算法林林木林林半林木林林半林水林半33424553342【乍業(yè)名到達(dá)時(shí)間運(yùn)行時(shí)間開始時(shí)間停止時(shí)間運(yùn)行次序周轉(zhuǎn)時(shí)間1233.3333|: 5. 740741-中斷處理£作業(yè)調(diào)度3死鎖4頁面替換5.磁盤調(diào)度3. 死鎖假定本系統(tǒng)中的各個(gè)所需資源均是獨(dú)占型資源,在進(jìn)程運(yùn)行的過程中不再釋放,故只需要遍歷鏈表將各個(gè)進(jìn)程中所需的資源統(tǒng)計(jì)出來,只要不大于系統(tǒng)中預(yù) 設(shè)的即可,一旦進(jìn)程所需的資源大于系統(tǒng)中的最大量,給

7、予用戶選擇 kill 一進(jìn) 程,已達(dá)到釋放資源的目的。死鎖檢測(cè)函數(shù):void sisuo()死鎖解除函數(shù):void safe()rror!申請(qǐng)的労労盧專隸詁3 22 2 3o o 0-1 24 2 05 仃o 2 31 o o- .1 oTf rp-.帀3 炷.:r7risnr3. 7 3 nH 2 4己 0 2 3 2 oLls 丄$星 辛4. 缺頁調(diào)度1)先進(jìn)先出FIFO(一)任務(wù)采用先進(jìn)先出FIFO算法實(shí)現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的 頁號(hào)和運(yùn)行結(jié)果。(二)要求1. 實(shí)現(xiàn)對(duì)FIFO算法的模擬實(shí)現(xiàn)2. 輸出每次執(zhí)行的結(jié)果。(三)原理基于程序總是按線性順序來訪問物理空間這一假設(shè),

8、總是淘汰最先調(diào)入主存 的頁面,即淘汰在主存中駐留時(shí)間最長(zhǎng)的頁面, 認(rèn)為駐留時(shí)間最長(zhǎng)的頁不再使用 的可能性較大。(四)數(shù)據(jù)結(jié)構(gòu)void FIFO()int len gth;int fifo100=0;int pageLe ngth;int fifoPage100=0;*先進(jìn)先出算法int i,j;cout<<""<<e ndl;*pageLe ngth=3;len gth=9;for(i=1;i<=le ngth;i+)int flag=0; for(j=1;j<=pageLe ngth;j+) if(fifoi=fifoPagei) fl

9、ag=1;j=pageLe ngth+1;else if(fifoPagej=0)fifoPagej=fifoi;j=pageLe ngth+1;flag=1;if(flag=1)elsecout<<"f 淘汰"<<fifoPage1<<endl;for(j=1;j<=pageLe ngth;j+)fifoPagej=fifoPagej+1; fifoPagepageLe ngth=fifoi;(五) 實(shí)現(xiàn)方法當(dāng)采用先進(jìn)先出算法時(shí),用一個(gè)數(shù)組構(gòu)成先進(jìn)先出隊(duì)列,數(shù)組中各個(gè)元素為 進(jìn)程已在主存的頁號(hào),其隊(duì)列頭指針初始化為0.假設(shè)分配給每

10、個(gè)進(jìn)程的內(nèi)存塊數(shù)固定。當(dāng)隊(duì)列滿需淘汰時(shí),淘汰最先進(jìn)入主存的一頁。若該頁修改過,還有存 入磁盤。然后要把當(dāng)前訪問的頁裝入該塊,并修改頁表和存儲(chǔ)分塊表的對(duì)應(yīng)標(biāo)志。(六) 運(yùn)行界面測(cè)試數(shù)據(jù):頁表長(zhǎng)度:9;頁框長(zhǎng)度:3;頁面請(qǐng)求數(shù)列:4,4,3,5,1,1,2,3,2執(zhí)行先進(jìn)先出FIFO算法結(jié)果如下:最近最少使用 LRU 算法*"<<e ndl;2) LRU(一)任務(wù)采用先進(jìn)先出LRU算法實(shí)現(xiàn)分頁管理的缺頁調(diào)度,并輸出每次調(diào)入調(diào)出的頁 號(hào)和運(yùn)行結(jié)果。(二)要求1. 實(shí)現(xiàn)對(duì)LRU算法的模擬實(shí)現(xiàn)2. 輸出每次執(zhí)行的結(jié)果。(三)原理最近最少使用頁面替換算法淘汰的頁面是在最近一段時(shí)間內(nèi)最

11、久未被訪問 的那一頁,它是基于程序局部性原理來考慮的, 認(rèn)為那些剛被使用過的頁面可能 還有立即被使用,而那些在較長(zhǎng)時(shí)間內(nèi)未被使用的頁面可能不會(huì)立即使用。在分頁虛擬存儲(chǔ)系統(tǒng)中,當(dāng)硬件發(fā)出缺頁中斷后轉(zhuǎn)操作系統(tǒng)處理缺頁中斷。如果主存中已無空閑塊,可采用LRU算法進(jìn)行缺頁處理。(四)數(shù)據(jù)結(jié)構(gòu)void LRU()int len gth;int lru1OO=O;int pageLe ngth;int lruPage100=0;int i,j;m* pageLe ngth=3;len gth=9;for(i=1;i<=le ngth;i+)int flag=0;for(j=1;j<=pageL

12、e ngth;j+) if(lrui=lruPagej) for(i nt cc=j;cc>0;cc-)lruPagecc=lruPagecc-1; lruPage1=lrui;flag=1; j=pageLe ngth+1;else if(lruPagej=0) for(i nt vv=j;vv>0;vv-)lruPagevv=lruPagevv-1; lruPage1=lrui; j=pageLe ngth+1; flag=1;if(flag=1)elseCOUt<<"T 淘汰"<<lruPagepageLe ngth<<

13、e ndl;for(j=pageLe ngth;j>O;j-)lruPagej=lruPagej-1;lruPage1=lrui;(五)實(shí)現(xiàn)方法當(dāng)采用LRU算法時(shí),用一個(gè)數(shù)組構(gòu)成堆棧,堆棧中各個(gè)元素為進(jìn)程已在主存 的頁號(hào),為了進(jìn)行頁面置換,可設(shè)置一個(gè)棧指針,初始化為0.假定分配給每個(gè)進(jìn)程的內(nèi)存塊數(shù)固定不變。當(dāng)隊(duì)列滿需淘汰時(shí),操作系統(tǒng)選擇棧底元素淘汰,其 他元素向下移一個(gè)位置,將新調(diào)入頁放棧指針指示的棧頂。當(dāng)訪問的頁在棧中時(shí), 還應(yīng)調(diào)整頁從當(dāng)前位置到棧頂。(六)運(yùn)行界面測(cè)試數(shù)據(jù):頁表長(zhǎng)度:9;頁框長(zhǎng)度:3;頁面請(qǐng)求數(shù)列:2,3,5,1,5,5,4,4,3執(zhí)行最近最少使用LRU算法結(jié)果如下:

14、5. 磁盤調(diào)度1)先來先服務(wù)算法FCFS這是一種比較簡(jiǎn)單的磁盤調(diào)度算法。它根據(jù)進(jìn)程請(qǐng)求訪問磁盤的先后次序進(jìn)行調(diào)度。此算法的優(yōu)點(diǎn)是公平、簡(jiǎn)單,且每個(gè)進(jìn)程的請(qǐng)求都能依次得到處理,不會(huì)出現(xiàn)某一進(jìn)程的請(qǐng)求長(zhǎng)期得不到滿足的情況。此算法由于未對(duì)尋道進(jìn)行優(yōu)化,在對(duì)磁盤的訪問請(qǐng)求比較多的情況 下,此算法將降低設(shè)備服務(wù)的吞吐量,致使平均尋道時(shí)間可能較長(zhǎng),但各進(jìn)程得到服務(wù)的響應(yīng)時(shí)間的變化幅度較小。5.彳邁盤諧崔1 中斷處理 2作業(yè)調(diào)度&死鎖 匸頁面替換E為12號(hào)12殆 列:道:2.55 - 道禽列度 肇前序長(zhǎng)4戈掃尋 1請(qǐng)1120恨蹙焜毗平& 97M6S5nz- 1± _ro1 15 5

15、 o才返回開始菜單56732167357 9 2 1 6 7 3 57 9 2 16 7 2 5(三)總結(jié)與體會(huì)通過本次課程設(shè)計(jì)讓我對(duì)于圖形界面設(shè)計(jì)有了一定的思路和看法,同時(shí)我對(duì)先來先服務(wù)、時(shí)間片輪轉(zhuǎn)、首次適應(yīng)算法、最佳適應(yīng)算法、先進(jìn)先出和最近最少 使用算法有了更詳盡的認(rèn)識(shí)。在編程的過程中發(fā)現(xiàn)會(huì)用到大量的指針, 用指針來 操作大量的數(shù)據(jù)比較方便,但最后應(yīng)該記得釋放資源。從這次實(shí)驗(yàn)中我發(fā)現(xiàn)我對(duì) 于C+掌握也有所不足,程序經(jīng)過了多次修改才得以完善,在以后應(yīng)該注重編程 方面的訓(xùn)練。此外我還更深入的理解了各個(gè)進(jìn)程調(diào)度算法,及實(shí)現(xiàn)過程。在編寫程序時(shí)查 詢了很多資料,間接提高了我的搜索能力。在此次課程設(shè)計(jì)

16、過程中,對(duì)進(jìn)程的相 關(guān)知識(shí)有了一定的加深。特別是對(duì)進(jìn)程的進(jìn)程控制塊的存在和價(jià)值有了更進(jìn)一步 的認(rèn)識(shí)。在編寫程序的過程之中,對(duì)進(jìn)程自身信息的設(shè)計(jì)和管理以及調(diào)度的算法 都有助于對(duì)書本知識(shí)的理解和掌握。特別是設(shè)計(jì)先來先服務(wù)調(diào)度算法和時(shí)間片輪 轉(zhuǎn)調(diào)度算法的時(shí)候,對(duì)進(jìn)程的調(diào)度算法有了更好的深入理解。 對(duì)進(jìn)程管理中的等 待隊(duì)列,就緒隊(duì)列,時(shí)間片等概念有了更深刻的印象。在設(shè)計(jì)此模擬操作系統(tǒng)的課設(shè)中,也加深了對(duì) C+知識(shí)的把握。解決了一些 以往在編程中遇到了困難。通過此次的課程設(shè)計(jì),不僅提高了對(duì)操作系統(tǒng)的認(rèn)知, 也在同時(shí)提高了編程的能力,加強(qiáng)了實(shí)踐。另外,我覺得此次課程設(shè)計(jì)雖然主要 冋題是在編程上,但是經(jīng)過不

17、斷的去調(diào)試,還是成功的調(diào)試了出來。但是這幾個(gè) 程序用了多天的時(shí)間進(jìn)行分析和修改,雖然出現(xiàn)了不少問題,但收獲頗多!源代碼:#inelude <iostream>#inelude <cstring>#i nclude<estddef>#in elude<>#in elude<>#in elude<stri ng>#in elude<>#inelude <>#inelude <> using namespaeestd;int fcfsoutput(); /* 調(diào)度結(jié)果輸岀 */int fefs

18、input(); un_begin_time = time_temp;tasksi.ru n_en d_time = tasksi.ru n_beg in _time + tasksi.ru n_time;tasksi.ru n_flag = 1;time temp = tasksi.ru n en d time;n umber_sehedul = i;tasks n umber_schedul.order = i + 1;fefsoutput();return 0;int fefsinput()task_struet tt;int i, j;un _time = 28;tasks1.ru n

19、_ time = 9;tasks2.ru n_ time = 3;ame = 'A' =B ; =C ;eout <<“*先來先服務(wù)算法*'、<< endl <<endl;for (i = 0; i<eounter; i+)tasksi.ru n_beg in _time = 0; tasksi.ru n_en d_time = 0; tasksi.order = 0;tasksi.ru n_flag = 0;return 0;int fcfsoutput() /* 調(diào)度結(jié)果輸岀 */

20、 int i;float tur n_rou nd_time = 0, f1, w = 0;cout << "*先來先服*"<< endrcout << "作業(yè)名 到達(dá)時(shí)間 運(yùn)行時(shí)間 開始時(shí)間 停止時(shí)間運(yùn)行次序 周轉(zhuǎn)時(shí)間"vv endl;for (i = 0; i<counter; i+)fl = tasksi.ru n_en d_time - tasksie_time;tur n_rou nd_time += f1;w += (f1 / tasksi.ru n_time);I!cout << &qu

21、ot; "<< <<'t'<< " "<< tasksie_time <<'t' vv "<< tasksi.ru n time<< 't'<< ""<< tasksi.ru n beg in timevv 't'vvI!I!<< tasksi.ru n_en d_time <<'t'<<

22、tasksi.order <<'t'<< fl <<'t'<<en dl;cout << "平均周轉(zhuǎn)時(shí)間:"<< tur n roun d time / cou nter << en dl;cout << "平均帶權(quán)周轉(zhuǎn)時(shí)間:"<< w / cou nter << endl;cout << ""return 0;void zuoyediaodu() 來先服務(wù)算法t 2.返回

23、開始菜單"<< endl; cin >> n;switch (n)case 1: fcfs(); kaishi();break ;case 2: kaishi(); kaishi();break;/* */void FIFO()int length;int fifo100 = 0 ;int pageLength;int fifoPage100 = 0 ;int i, j;cout << "*先進(jìn)先出算法*' I<< en dl;pageLe ngth = 3;len gth = 9;cout << &quo

24、t;時(shí)刻 t" << 't'for (i = 0; i<length; i+)cout << i <<'t'cout << endl <<"引用串"<< 't'for (i = 1; i <= length; i+)fifoi = ran d() % 5 + 1;cout << fifoi <<'t'for (i = 1; i <= length; i+)int flag = 0;for

25、(j = 1; j <= pageLength; 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)elsecout << "t淘汰"<< fifoPage1 << endl;for (j = 1; j <= pageLength; j+)fifoPagej = fifoPagej + 1; fifoPag

26、epageLe ngth = fifoi;cout << endl <<"t=" << i - 1 <<"時(shí)"<< 't'for (int jk = 1; jk <= pageLength; jk+)cout << "P" << jk <<'t'cout << endl <<'t'for ( int s = 1; s <= pageLength; s+)co

27、ut << en dl;void LRU() int length;int lru100 = 0 ;int pageLength;int lruPage100 = 0 ;int i, j;cout << I *最近最少使用LRU算法*'、<<en dl;pageLe ngth = 3;len gth = 9;cout << "時(shí)刻 t" << 't'for (i = 0; i<length; i+)cout << i <<'t'cout <

28、< endl <<"引用串"<< 't'for (i = 1; i <= length; i+)lrui = ran d() % 5 + 1;cout << lrui <<'t'for (i = 1; i <= length; i+)int flag = 0;for (j = 1; j <= pageLength; j+)if (lrui = lruPagej)for (int cc = j; cc>0; cc-) lruPagecc = lruPagecc - 1

29、;lruPage1 = lrui;flag = 1;j = pageLe ngth + 1;else if (lruPagej = 0)for ( int vv = j; vv>0; vv-) lruPagevv = lruPagevv - 1;lruPage1 = lrui;j = pageLe ngth + 1; flag = 1;if (flag = 1) |cout << "t淘汰"<< lruPagepageLength << endl;for (j = pageLength; j>0; j-)lruPagej =

30、lruPagej - 1;lruPage1 = lrui;cout << endl <<"t=" << i - 1 <<"時(shí)"<< 't'for ( int jk = 1; jk <= pageLength; jk+)| |cout << "P" << jk <<'t'cout << endl <<'t'for ( int s = 1; s <= pageL

31、ength; s+)cout << lruPages <<'t'cout << en dl; void queye()進(jìn)先岀算法 算法t3.返回開始菜單"<< endl;cin >> n;switch (n)case 1: FIFO(); kaishi();break ;case 2: LRU(); kaishi(); break;case 3: kaishi(); kaishi();break;*/*判斷輸入數(shù)據(jù)是否有效*F:cin >> str; 始t2.返回開始菜單"<<

32、; endl;cin >> n;switch (n)case 1: dead_lock(); kaishi();break;case 2: kaishi(); kaishi();break;/* */void ZD()double p;int a, m, r, n, e, o, u;struct tm *local;char *st, s27;time_t t;t = time( NULL;local = localtime(&t);st = asctime(local);始t2.返回開始菜單"<< endl;cin >> n;switch

33、 (n)case 1: ZD(); kaishi();break ;case 2: kaishi(); kaishi();break;/* */struct processstri ng n ame;float arrivetime;ame >> i.ru ntime;cout << en dl;float search( strings, program p, int n)for ( int i = n - 1; i >= 0; i-)if i.flag&& =s)retur n i.fi ni shtime;return 0;vv

34、"tt"void Print( program p, int n)ame << "t"<< k.starttime << "tt"<< k.finishtime<< k.arrivetime <<"tt"<< k.runtime << endl;void P n1, n2;program a, b;cout vv "*cout vv "輸入程序A的運(yùn)行步驟: cin >>

35、; n1;cout << en dl;in put(a, n 1);cout << "輸入程序B的運(yùn)行步驟: cin >> n2;cout << en dl;in put(b, n2);0.arrivetime = 0;0.arrivetime = 0;0.fi ni shtime = 0;多道程序設(shè)計(jì)*' I<< en dl;0.fi ni shtime = 0;int i = 0, j = 0;float f;doif i.arrivetime <= j.arrivetime)f = searchi. na

36、me, b, n 2);if (f <= i.arrivetime)i.starttime = i.arrivetime;else i.starttime = f;i.fi ni shtime = i.starttime + i.ru ntime;i.flag = true ;if (i < n1 - 1)i + 1.arrivetime = i.fi ni shtime;i+;if i.arrivetime >= j.arrivetime)f = search。, name, a, n 1);if (f <= j.arrivetime)j.starttime = j.

37、arrivetime;elsej.starttime = f;j.fi ni shtime = j.starttime + j.ru ntime;j.flag = true ;if (j < n2 - 1)j + 1.arrivetime = j.fi ni shtime; j+; while (!n1 - 1.flag && !n2 - 1.flag);while n 1 - 1.flag&& !n2 - 1.flag)|j.starttime = j.arrivetime;j.fi ni shtime = j.starttime + j.ru ntim

38、e;j.flag = true ;if (j < n2 - 1)j + 1.arrivetime = j.fi ni shtime;j+;while n2 - 1.flag&&!n 1 - 1.flag)|i.starttime = i.arrivetime;i.fi ni shtime = i.starttime + i.ru ntime;i.flag = true ;if (i < n1 - 1)i + 1.arrivetime = i.fi ni shtime;i+;Prin t(a, n1);Prin t(b, n2);system( "pause

39、");void duodaochengxu()int n;cout << en dl;cout << "t1.開始t2.返回開始菜單"<< endl;cin >> n;switch (n)case 1: Program。; kaishi();break ;case 2: kaishi(); kaishi();break;/* */int avaResour3 = 3, 3, 2 ;int allocation53 = 0,1, 0 , 2, 0, 0 , 3, 0, 2 , 2,1,1 , 0, 0, 2 ;int

40、maxRequest53 = 7, 5, 3 , 3, 2, 2 , 9, 0, 2 , 2, 2, 2 , 4, 3, 3 ;int nneed53 = 7, 4, 3 , 1, 2, 2 , 6, 0, 0 , 0, 1, 1 , 4, 3, 1 ;void rrequest();bool safeTest(); _|void rrequest()int sqjc = 0, i = 0, l = 0, a = 0, b = 0, c = 0;<< en dl;char contn = 0;cout << endl << "進(jìn)程個(gè)數(shù):5 資源個(gè)數(shù)

41、:3" << endl << "可用資源向量 Available:" for (i = 0; i<3; i+)cout << avaResouri <<"" |cout << endl <<"最大需求矩陣 Max:" << endl;for (i = 0; i<5; i+)for (l = 0; l<3; l+)cout << maxRequestil <<""cout <&

42、lt; en dl;cout << "已分配矩陣 Allocation:"<< endl;for (i = 0; i<5; i+)for (l = 0; l<3; l+)cout << allocatio n il <<"" |cout << en dl;cout << "需求矩陣 Need:" << endl;for (i = 0; i<5; i+)|for (l = 0; l<3; l+)cout << nn e

43、edil <<""cout << en dl;cout << "輸入發(fā)起請(qǐng)求的進(jìn)程(0-4):"cin >> sqjc;while (sqjc>4 | sqjc<0)cout << endl <<"不要亂輸! A_A"<< endl;cout << endl <<"輸入發(fā)起請(qǐng)求的進(jìn)程(0-4):"cin >> sqjc; |cout << "輸入請(qǐng)求資源的數(shù)目,按

44、照這樣的格式輸入x x x:"cin >> a >> b >> c;if (a <= nneedsqjc0 && b <= nneedsqjc1 && c <= nneedsqjc2)cout << endl <<"開始執(zhí)行銀行家算法."<< endl;if (a <= avaResour0 && b <= avaResour1 && c <= avaResour2)avaResour0 = a

45、vaResour0 - a; avaResour1 = avaResour1 - b;avaResour2 = avaResour2 - c;allocati on sqjc0 = allocati on sqjc0 + a;allocatio nsqjc1 = allocatio nsqjc1 + b;allocati on sqjc2 = allocati on sqjc2 + c;nn eedsqjc0 = nn eedsqjc0 - a;nn eedsqjc1 = nn eedsqjc1 - b;nn eedsqjc2 = nn eedsqjc2 - c;cout << e

46、ndl <<"試分配完成."<< endl;if (safeTest()<< endlcout << endl <<"開始給第"<< sqjc <<"個(gè)進(jìn)程分配資源<< "分配完成,已更新"<< endl;for (i = 0; i<5; i+)if (nneedi0 = 0 && nneedi1 = 0 && nneedi2 = 0) for (I = 0; l<3; l+

47、)avaResourI = avaResourI + allocati on il; allocatio n il = 0;elsecout << endl <<"系統(tǒng)已恢復(fù)試分配前狀態(tài)。"<< endl;avaResour0 = avaResour0 + a; avaResour1 = avaResour1 + b; avaResour2 = avaResour2 + c;allocati on sqjcO = allocati on sqjcO - a;allocati on sqjc1 = allocati on sqjc1 - b

48、;allocati on sqjc2 = allocati on sqjc2 - c;nn eedsqjc0 = nn eedsqjc0 + a;nn eedsqjc1 = nn eedsqjc1 + b;nn eedsqjc2 = nn eedsqjc2 + c;elsecout << endl <<"試分配失敗,系統(tǒng)無足夠資源"<< endl;elsecout << endl << "Error!申請(qǐng)的資源大于需求值"<< endl;xz:cout << "nn"<< "要繼續(xù)嗎? ( y-繼續(xù);n-終止):"cin >> contn;switch (contn)case 'y' :rrequest(); |case 'n' : break ;default :

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論