![操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度 存儲管理 磁盤調(diào)度銀行家算法 文件系統(tǒng)設(shè)計)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/7/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c53/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c531.gif)
![操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度 存儲管理 磁盤調(diào)度銀行家算法 文件系統(tǒng)設(shè)計)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/7/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c53/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c532.gif)
![操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度 存儲管理 磁盤調(diào)度銀行家算法 文件系統(tǒng)設(shè)計)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/7/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c53/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c533.gif)
![操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度 存儲管理 磁盤調(diào)度銀行家算法 文件系統(tǒng)設(shè)計)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/7/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c53/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c534.gif)
![操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度 存儲管理 磁盤調(diào)度銀行家算法 文件系統(tǒng)設(shè)計)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/7/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c53/b690d8eb-7c2b-4fa3-aadc-d9f4c1248c535.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)一 進(jìn)程調(diào)度一、 實(shí)驗(yàn)?zāi)康亩嗟莱绦蛟O(shè)計中,經(jīng)常是若干個進(jìn)程同時處于就緒狀態(tài),必須依照某種策略來決定那個進(jìn)程優(yōu)先占有處理機(jī)。因而引起進(jìn)程調(diào)度。本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問題,加深對進(jìn)程調(diào)度的理解。二、 實(shí)驗(yàn)要求1 設(shè)計進(jìn)程調(diào)度算法,進(jìn)程數(shù)不定2 包含幾種調(diào)度算法,并加以實(shí)現(xiàn)3 輸出進(jìn)程的調(diào)度過程進(jìn)程的狀態(tài)、鏈表等。三、 參考例1 題目優(yōu)先權(quán)法、輪轉(zhuǎn)法簡化假設(shè)1) 進(jìn)程為計算型的(無i/o)2) 進(jìn)程狀態(tài):ready、running、finish3) 進(jìn)程需要的cpu時間以時間片為單位確定2 算法描述1) 優(yōu)先權(quán)法動態(tài)優(yōu)先權(quán)當(dāng)前運(yùn)行進(jìn)程用完時間片后,其優(yōu)先權(quán)減去一個常數(shù)
2、。2) 輪轉(zhuǎn)法開始鍵盤輸入進(jìn)程數(shù)n,和調(diào)度方法的選擇優(yōu)先權(quán)法?輪轉(zhuǎn)法產(chǎn)生n個進(jìn)程,對每個進(jìn)程產(chǎn)生一個pcb,并用隨機(jī)數(shù)產(chǎn)生進(jìn)程的優(yōu)先權(quán)及進(jìn)程所需的cpu時間按優(yōu)先權(quán)大小,把n個進(jìn)程拉成一個就緒隊(duì)列初始化其他數(shù)據(jù)結(jié)構(gòu)區(qū)鏈?zhǔn)走M(jìn)程投入運(yùn)行時間片到,進(jìn)程所需的cpu時間減1,優(yōu)先權(quán)減3,輸出個進(jìn)程的運(yùn)行情況所需的cpu時間=0?撤銷進(jìn)程就緒隊(duì)列為空?結(jié)束將進(jìn)程插入就緒隊(duì)列nynyybn四、 實(shí)驗(yàn)流程圖產(chǎn)生n個進(jìn)程,對每個進(jìn)程用隨機(jī)數(shù)產(chǎn)生進(jìn)程的輪轉(zhuǎn)時間片數(shù)及進(jìn)程所需的時間片數(shù),已占用cpu的時間片數(shù)置為0按進(jìn)程產(chǎn)生的先后次序拉成就緒隊(duì)列鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行時間片到,進(jìn)程所需時間片數(shù)減1,已占用cpu時間片
3、數(shù)加1輸出各進(jìn)程的運(yùn)行情況進(jìn)程所需時間片數(shù)=0?撤銷該進(jìn)程就緒隊(duì)列為空嗎?占用cpu的時間片數(shù)=輪轉(zhuǎn)時間片數(shù)?占用cpu的時間片數(shù)置為0把該進(jìn)程插入就緒隊(duì)列尾bnynyy結(jié)束n注意:1 產(chǎn)生的各種隨機(jī)數(shù)的取值范圍加以限制,如所需的cpu時間限制在120之間。2 進(jìn)程數(shù)n不要太大通常取48個3 使用動態(tài)數(shù)據(jù)結(jié)構(gòu)4 獨(dú)立編程5 至少三種調(diào)度算法6 若有可能請在圖形方式下,將pcb的調(diào)度用圖形成動畫顯示。五實(shí)驗(yàn)過程:(1)輸入:進(jìn)程流文件(1.txt),其中存儲的是一系列要執(zhí)行的進(jìn)程, 每個作業(yè)包括四個數(shù)據(jù)項(xiàng):進(jìn)程名 進(jìn)程狀態(tài)(1就緒 2等待 3運(yùn)行) 所需時間 優(yōu)先數(shù)(0級最高)進(jìn)程0 1 50
4、2進(jìn)程1 2 10 4進(jìn)程2 1 15 0進(jìn)程3 3 28 5 進(jìn)程4 2 19 1進(jìn)程5 3 8 7輸出: 進(jìn)程執(zhí)行流等待時間,平均等待時間本程序包括:fifo算法,優(yōu)先數(shù)調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法(2)程序代碼#include #include #includeconst int block_time=10; /定義時間片的長度為10秒 const int maxpcb=100; /定義最大進(jìn)程數(shù)/定義進(jìn)程結(jié)構(gòu)體 typedef struct nodechar name20; int status;int time; int privilege;int finished; int wai
5、t_time; pcb;pcb pcbsmaxpcb; int quantity;/初始化函數(shù) void initial() int i;for(i=0;imaxpcb;i+) strcpy(,); pcbsi.status=0; pcbsi.time=0;pcbsi.privilege=0;pcbsi.finished=0; pcbsi.wait_time=0; quantity=0;/讀數(shù)據(jù)函數(shù) int readdata() file *fp; char fname20; int i;coutfname; if(fp=fopen(fname,r)=null) cout錯
6、誤,文件打不開,請檢查文件名endl; else while(!feof(fp) fscanf(fp,%s %d %d %d,,&pcbsquantity.status,&pcbsquantity.time,&pcbsquantity.privilege); quantity+; /輸出所讀入的數(shù)據(jù) cout輸出所讀入的數(shù)據(jù)endl; cout進(jìn)程名 進(jìn)程狀態(tài) 所需時間 優(yōu)先數(shù)endl; for(i=0;iquantity;i+) cout pcbsi.status pcbsi.time pcbsi.privilegeendl; retu
7、rn(1); return(0);/重置數(shù)據(jù),以供另一個算法使用 void init() int i;for(i=0;imaxpcb;i+)pcbsi.finished=0; pcbsi.wait_time=0; /先進(jìn)先出算法 void fifo() int i,j; int total;/輸出fifo算法執(zhí)行流 coutendl*endl; coutfifo算法執(zhí)行流:endl; cout進(jìn)程名 等待時間endl; for(i=0;iquantity;i+) cout pcbsi.wait_timeendl; for(j=i+1;jquantity;j+) pcbsj
8、.wait_time+=pcbsi.time; total=0; for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout總等待時間:total 平均等待時間:total/quantityendl;/優(yōu)先數(shù)調(diào)度算法 void privilege() int i,j,p; int passed_time=0; int total;int queuemaxpcb; int current_privilege=1000;for(i=0;iquantity;i+) current_privilege=1000; for(j=0;jquantity;j+) i
9、f(pcbsj.finished=0)&(pcbsj.privilegecurrent_privilege) p=j; current_privilege=pcbsj.privilege; queuei=p;pcbsp.finished=1; pcbsp.wait_time+=passed_time; passed_time+=pcbsp.time; /輸出優(yōu)先數(shù)調(diào)度執(zhí)行流 coutendl*endl; cout優(yōu)先數(shù)調(diào)度執(zhí)行流:endl; cout進(jìn)程名 等待時間endl; for(i=0;iquantity;i+) cout pcbsqueuei.wait_
10、timeendl; total=0; for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout總等待時間:total 平均等待時間:total/quantityendl;/時間片輪轉(zhuǎn)調(diào)度算法 void timer() int i,j,number,flag=1; int passed_time=0; int max_time=0; int round=0; int queue1000; int total=0;while(flag=1) flag=0; number=0;for(i=0;i1)for(i=0;iquantity;i+) if(pcbs
11、i.finished=0) flag=1; queuetotal=i; total+; if(pcbsi.time=block_time*(round+1) pcbsi.finished=1; round+; if(queuetotal-1=queuetotal-2) total-; coutendl*endl; cout時間片輪轉(zhuǎn)調(diào)度執(zhí)行流:endl; for(i=0;itotal;i+) ;coutendl;/顯示void version() cout /* 進(jìn)程調(diào)度 */; coutendlendl; /主函數(shù) void main() int fl
12、ag;version();initial();flag=readdata();if(flag=1) fifo(); init();privilege(); init();timer(); (3)運(yùn)行結(jié)果:輸入進(jìn)程流文件名1.txt即可得出以下輸出結(jié)果: 實(shí)驗(yàn)二 銀行家算法一、 實(shí)驗(yàn)?zāi)康乃梨i會引起計算機(jī)工作僵死,因此操作系統(tǒng)中必須防止。本實(shí)驗(yàn)的目的在于讓學(xué)生獨(dú)立的使用高級語言編寫和調(diào)試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,了解死鎖產(chǎn)生的條件和原因,并采用銀行家算法有效地防止死鎖的發(fā)生,以加深對課堂上所講授的知識的理解。二、 實(shí)驗(yàn)要求設(shè)計有n個進(jìn)程共享m個系統(tǒng)資源的系統(tǒng),進(jìn)程可動態(tài)的申請和釋放資源,
13、系統(tǒng)按各進(jìn)程的申請動態(tài)的分配資源。系統(tǒng)能顯示各個進(jìn)程申請和釋放資源,以及系統(tǒng)動態(tài)分配資源的過程,便于用戶觀察和分析;三、 數(shù)據(jù)結(jié)構(gòu)1 可利用資源向量available ,它是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。如果available(j)=k,標(biāo)是系統(tǒng)中現(xiàn)有rj類資源k個。2 最大需求矩陣max,這是一個nm的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果max(i,j)=k,表示進(jìn)程i需要rj類資源的最大數(shù)目為k。3 分配矩陣allocation,這是
14、一個nm的矩陣,它定義了系統(tǒng)中的每類資源當(dāng)前一分配到每一個進(jìn)程的資源數(shù)。如果allocation(i,j)=k,表示進(jìn)程i當(dāng)前已經(jīng)分到rj類資源的數(shù)目為k。allocation i表示進(jìn)程i的分配向量,有矩陣allocation的第i行構(gòu)成。4 需求矩陣need,這是一個nm的矩陣,用以表示每個進(jìn)程還需要的各類資源的數(shù)目。如果need(i,j)=k,表示進(jìn)程i還需要rj類資源k個,才能完成其任務(wù)。need i表示進(jìn)程i的需求向量,由矩陣need的第i行構(gòu)成。上述三個矩陣間存在關(guān)系:need(i,j)=max(i,j)-allocation(i,j);四、 銀行家算法request i 是進(jìn)程p
15、i 的請求向量。request i (j)=k表示進(jìn)程pi請求分配rj類資源k個。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:1 如果request i need,則轉(zhuǎn)向步驟2;否則,認(rèn)為出錯,因?yàn)樗埱蟮馁Y源數(shù)已超過它當(dāng)前的最大需求量。2 如果request i available,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無足夠的資源滿足pi的申請,pi必須等待。3 系統(tǒng)試探性地把資源分配給進(jìn)程pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:available = available - request iallocation i= allocation i+ request ineed i= need i
16、- request i4 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式將資源分配給進(jìn)程pi,以完成本次分配;否則,將試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程pi等待。假定系統(tǒng)有5個進(jìn)程(p0,p1,p2,p3,p4)和三類資源(a,b,c),各種資源的數(shù)量分別為10,5,7,在t0時刻的資源分配情況如下圖: max allocation need available a b c a b c a b c a b cp0 7 5 3 0 1 0 7 4 3 3 3 2 ( 2 3 0 )p1 3 2 2 2 0 0 1 2 2 (3 0 2 ) (0 2 0 )
17、p2 9 0 2 3 0 2 6 0 0p3 2 2 2 2 1 1 0 1 1p4 4 3 3 0 0 2 4 3 1五、 安全性算法1 設(shè)置兩個向量。work:它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)目,它包含m個元素,開始執(zhí)行安全性算法時,work = available。finish:它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始finish(i)=false;當(dāng)有足夠資源分配給進(jìn)程pi時,令finish(i)=true;2 從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程。finish(i)= = false;need i work;如找到則執(zhí)行步驟3;否則,執(zhí)行步驟4;3 當(dāng)進(jìn)
18、程pi獲得資源后,可順利執(zhí)行直到完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行work = work + allocation i finish(i)=true;轉(zhuǎn)向步驟2;4 若所有進(jìn)程的finish(i)都為true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。六、 系統(tǒng)流程圖開 始輸入資源數(shù)m, 及各類資源總數(shù),初始化available向量輸入進(jìn)程數(shù)n,i=1輸入進(jìn)程i的最大需求向量max。inmax資源總數(shù)提示錯誤重新輸入i加1任選一個進(jìn)程作為當(dāng)前進(jìn)程輸入該進(jìn)程的資源請求量request 調(diào)用銀行家算法,及安全性算法,完成分配,或并給出提示該進(jìn)程的need向量為0該進(jìn)程已運(yùn)行結(jié)束need
19、矩陣為0所有進(jìn)程運(yùn)行都結(jié)束結(jié) 束nyynny初始化need 矩陣ny 七銀行家算法程序代碼#include#include#includeusing namespace std;typedef struct max1 / 資源的最大需求量int m_a;int m_b;int m_c;max; typedef struct allocation1 /已分配的資源數(shù)int a_a;int a_b;int a_c;allocation; typedef struct need1 /還需要的資源數(shù)int n_a;int n_b;int n_c;need; struct available1 /可利用
20、的資源量int av_a;int av_b;int av_c; q;struct pr /定義一個結(jié)構(gòu)char name;max max;allocation allocation;need need;int finishflag;p5;char na5;/*void init() /讀入文件1.txtcout各進(jìn)程還需要的資源數(shù)need:endl;file *fp;fp=fopen(1.txt,r+); / 打開文件1.txtfor(int i=0;i5;i+)fscanf(fp,%c,%d,%d,%d,%d,%d,%dn,&,&pi.max.m_a,&pi.max.m_b,&
21、pi.max.m_c,&pi.allocation.a_a,&pi.allocation.a_b,&pi.allocation.a_c);pi.need.n_a=pi.max.m_a-pi.allocation.a_a;pi.need.n_b=pi.max.m_b-pi.allocation.a_b;pi.need.n_c=pi.max.m_c-pi.allocation.a_c;: pi.need.n_a pi.need.n_b pi.need.n_cendl;fclose(fp); /關(guān)閉文件/*int fenpei()/分配資源coutavailable:;cout
22、q.av_a q.av_b q.av_cendl;int finishcnt=0,k=0,count=0;for(int j=0;j5;j+)pj.finishflag=0;while(finishcnt5)for(int i=0;i=pi.need.n_a&q.av_b=pi.need.n_b&q.av_c=pi.need.n_c)q.av_a+=pi.allocation.a_a;q.av_b+=pi.allocation.a_b;q.av_c+=pi.allocation.a_c;pi.finishflag=1;finishcnt+;nak+=;break;count+;/
23、禁止循環(huán)過多if(count5)return 0;return 1;/*int shq() /申請資源int m=0,i=0,j=0,k=0; /m為進(jìn)程號; i,j,k為申請的三類資源數(shù) cout請輸入進(jìn)程號和請求資源的數(shù)目!endl;cout如:進(jìn)程號 資源a b cendl;cout 0 2 0 2mijk;if(i=pm.need.n_a&j=pm.need.n_b &k=pm.need.n_c)if(i=q.av_a&j=q.av_b&k=q.av_c)pm.allocation.a_a+=i;pm.allocation.a_b+=j;pm.allocation.a_c+=k;pm.
24、need.n_a=pm.max.m_a-pm.allocation.a_a;pm.need.n_b=pm.max.m_b-pm.allocation.a_b;pm.need.n_c=pm.max.m_c-pm.allocation.a_c;cout各進(jìn)程還需要的資源數(shù)need:n;for(int w=0;w5;w+) : pw.need.n_a pw.need.n_b pw.need.n_cendl;return 1;elsecoutavailable讓進(jìn)程m等待.endl;else coutneed,讓進(jìn)程m等待.endl;return 0;/*void main()i
25、nt flag;char c;cout /* 銀 行 家 算 法*/ endl;cout確認(rèn)已經(jīng)在1.txt文檔中正確輸入各進(jìn)程的有關(guān)信息后按回車鍵endl;getch();init();q.av_a=10; /各種資源的數(shù)量q.av_b=5;q.av_c=7;while(flag)for(int i=0;i5;i+)q.av_a-= pi.allocation.a_a;q.av_b-= pi.allocation.a_b;q.av_c-= pi.allocation.a_c;if(fenpei()cout這樣配置資源是安全的!endl;cout其安全序列是: ;for(int k=0;k5;
26、k+)coutnak;coutendl;cout有進(jìn)程發(fā)出request請求向量嗎?(enter y or y)endl;coutendl;c=getch();if(c=y|c=y)if(shq()continue;else break;else flag=0;else flag=0;cout不安全!endl;八運(yùn)行結(jié)果實(shí)驗(yàn)三 存儲管理一 實(shí)驗(yàn)?zāi)康拇鎯芾淼闹饕δ苤皇呛侠淼胤峙淇臻g。請求頁式管理是一種常用的虛擬存儲管理技術(shù)。本實(shí)驗(yàn)的目的是通過請求頁式管理中頁面置換算法模擬設(shè)計,了解虛擬存儲技術(shù)的特點(diǎn),掌握請求頁式存儲管理的頁面置換算法。二 實(shí)驗(yàn)內(nèi)容(1) 通過計算不同算法的命中率比較算法的
27、優(yōu)劣。同時也考慮了用戶內(nèi)存容量對命中率的影響。頁面失效次數(shù)為每次訪問相應(yīng)指令時,該指令所對應(yīng)的頁不在內(nèi)存中的次數(shù)。在本實(shí)驗(yàn)中,假定頁面大小為1k,用戶虛存容量為32k,用戶內(nèi)存容量為4頁到32頁。(2) produce_addstream通過隨機(jī)數(shù)產(chǎn)生一個指令序列,共320條指令。a、 指令的地址按下述原則生成:1) 50%的指令是順序執(zhí)行的2) 25%的指令是均勻分布在前地址部分3) 25%的指令是均勻分布在后地址部分b、 具體的實(shí)施方法是:1) 在0,319的指令地址之間隨機(jī)選取一起點(diǎn)m;2) 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;3) 在前地址0,m+1中隨機(jī)選取一條指令并執(zhí)行,該
28、指令的地址為m;4) 順序執(zhí)行一條指令,地址為m+1的指令5) 在后地址m+2,319中隨機(jī)選取一條指令并執(zhí)行;6) 重復(fù)上述步驟1)5),直到執(zhí)行320次指令c、 將指令序列變換稱為頁地址流在用戶虛存中,按每k存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:第0條第9條指令為第0頁(對應(yīng)虛存地址為0,9);第10條第19條指令為第1頁(對應(yīng)虛存地址為10,19);。第310條第319條指令為第31頁(對應(yīng)虛存地址為310,319);按以上方式,用戶指令可組成32頁。(3) 計算并輸出下屬算法在不同內(nèi)存容量下的命中率。1) 先進(jìn)先出的算法(fifo);2) 最近最少使用算法(l
29、ru);3) 最佳淘汰算法(opt);4) 最少訪問頁面算法(lfr);其中3)和4)為選擇內(nèi)容開 始生成地址流輸入算法號s1s4形成地址頁號用戶內(nèi)存空間msize=2msize32 opt()fifo()lru()lfu()msize加1s=? 是否用其他算法繼續(xù)結(jié) 束ny1234yn提示出錯,重新輸入三 系統(tǒng)框圖四頁面置換算法程序代碼:#include #include #includeconst int maxsize=1000;/定義最大頁面數(shù) const int maxqueue=3;/定義頁框數(shù)typedef struct node int loaded; int hit; pag
30、e;page pagesmaxqueue; /定義頁框表 int queuemaxsize; int quantity; /初始化結(jié)構(gòu)函數(shù) void initial() int i; for(i=0;imaxqueue;i+) pagesi.loaded=-1; pagesi.hit=0; for(i=0;imaxsize;i+) queuei=-1; quantity=0; /初始化頁框函數(shù) void init() int i; for(i=0;imaxqueue;i+) pagesi.loaded=-1; pagesi.hit=0; /讀入頁面流void readdata() file *
31、fp; char fname20;int i;coutfname;if(fp=fopen(fname,r)=null) cout錯誤,文件打不開,請檢查文件名; else while(!feof(fp) fscanf(fp,%d ,&queuequantity);quantity+; cout讀入的頁面流:; for(i=0;iquantity;i+)coutqueuei ; /fifo調(diào)度算法void fifo() int i,j,p,flag;int absence=0;p=0;coutendl-endl; cout先進(jìn)先出調(diào)度算法(fifo)頁面調(diào)出流:; for(i=0;iquanti
32、ty;i+) flag=0; for(j=0;j=maxqueue) coutpagesp.loaded ; pagesp.loaded=queuei; p=(p+1)%maxqueue; absence+; absence-=maxqueue; coutendl總?cè)表摂?shù):absenceendl; /最近最少使用調(diào)度算法(lru)void lru() int absence=0; int i,j; int flag;for(i=0;imaxqueue;i+) pagesi.loaded=queuei; coutendl-endl; cout最近最少使用調(diào)度算法(lru)頁面流:;for(i=m
33、axqueue;iquantity;i+) flag=-1; for(j=0;jmaxqueue;j+) if(queuei=pagesj.loaded) flag=j; /caution pages0是隊(duì)列頭if(flag=-1) /缺頁處理coutpages0.loaded ; for(j=0;jmaxqueue-1;j+) pagesj=pagesj+1; pagesmaxqueue-1.loaded=queuei;absence+; else /頁面已載入 pagesquantity=pagesflag;for(j=flag;jmaxqueue-1;j+) pagesj=pagesj+
34、1; pagesmaxqueue-1=pagesquantity;coutendl總?cè)表摂?shù):absenceendl; /顯示 void version() cout /*虛擬存儲管理器的頁面調(diào)度*/endl;coutendl; void main() version(); initial();readdata();fifo(); init();lru(); init(); init();四 運(yùn)行結(jié)果運(yùn)行程序前先新建一個頁面流文件文件(格式為*.txt),在文件中存儲的是一系列頁面號(頁面號用整數(shù)表示,用空格作為分隔符),用來模擬待換入的頁面。例如: 14 5 18 56 20 25 6 3 8
35、 17實(shí)驗(yàn)四 磁盤調(diào)度一、 實(shí)驗(yàn)?zāi)康模捍疟P是高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲設(shè)備。它作為計算機(jī)系統(tǒng)的輔助存儲器,擔(dān)負(fù)著繁重的輸入輸出工作,在現(xiàn)代計算機(jī)系統(tǒng)中往往同時會有若干個要求訪問磁盤的輸入輸出要求。系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行訪問磁盤的請求。由于磁盤訪問時間主要受尋道時間t的影響,為此需要采用合適的尋道算法,以降低尋道時間。本實(shí)驗(yàn)要求學(xué)生模擬設(shè)計一個磁盤調(diào)度程序,觀察調(diào)度程序的動態(tài)運(yùn)行過程。通過實(shí)驗(yàn)讓學(xué)生理解和掌握磁盤調(diào)度的職能。二、 實(shí)驗(yàn)題目:模擬電梯調(diào)度算法,對磁盤進(jìn)行移臂操作三、 提示及要求:1、 假設(shè)磁盤只有一個盤面,并且磁盤是可移動頭磁盤。2、 磁盤是可供多個進(jìn)
36、程共享的存儲設(shè)備,但一個磁盤每個時刻只能為一個進(jìn)程服務(wù)。當(dāng)有進(jìn)程在訪問某個磁盤時,其它想訪問該磁盤的進(jìn)程必須等待,直到磁盤一次工作結(jié)束。當(dāng)有多個進(jìn)程提出輸入輸出請求而處于等待狀態(tài)時,可用電梯調(diào)度算法從若干個等待訪問者中選擇一個進(jìn)程,讓它訪問磁盤。為此設(shè)置“驅(qū)動調(diào)度”進(jìn)程。3、 由于磁盤與處理器是并行工作的,所以當(dāng)磁盤在為一個進(jìn)程服務(wù)時,占有處理器的其它進(jìn)程可以提出使用磁盤(這里我們只要求訪問磁道),即動態(tài)申請訪問磁道,為此設(shè)置“接受請求”進(jìn)程。4、 為了模擬以上兩個進(jìn)程的執(zhí)行,可以考慮使用隨機(jī)數(shù)來確定二者的允許順序,程序結(jié)構(gòu)圖參考附圖:5、 “接受請求”進(jìn)程建立一張“進(jìn)程請求i/o”表,指出等
37、待訪問磁盤的進(jìn)程要求訪問的磁道,表的格式如下:進(jìn)程名要求訪問的磁道號6、 “磁盤調(diào)度”的功能是查“請求i/o”表,當(dāng)有等待訪問的進(jìn)程時,按電梯調(diào)度算法(scan算法)從中選擇一個等待訪問的進(jìn)程,按其指定的要求訪問磁道。scan算法參考課本第九章。算法模擬框圖略。7、 圖1中的“初始化”工作包括:初始化“請求i/o”表,設(shè)置置當(dāng)前移臂方向;當(dāng)前磁道號。并且假設(shè)程序運(yùn)行前“請求i/o”表中已有若干進(jìn)程(48個)申請訪問相應(yīng)磁道。四、 實(shí)驗(yàn)報告:1、 實(shí)驗(yàn)題目。2、 程序中用到的數(shù)據(jù)結(jié)構(gòu)及其說明。3、 打印源程序并附注釋。4、 實(shí)驗(yàn)結(jié)果內(nèi)容如下:打印“請求i/o”表,當(dāng)前磁道號,移臂方向,被選中的進(jìn)
38、程名和其要求訪問的磁道,看是否體現(xiàn)了電梯調(diào)度(scan)算法。5、 體會與問題。五、 附圖:開始初始化磁盤調(diào)度隨機(jī)數(shù)1/2繼續(xù)?接受請求輸入在0,1區(qū)間內(nèi)的隨機(jī)數(shù)結(jié)束六磁盤調(diào)度的程序代碼:#include#includeusing namespace std;typedef struct nodeint data;struct node *next;node;void main()void fcfs(node *,int,int);/聲明先來先服務(wù)函數(shù)fcfsvoid sstf(node *,int,int);/聲明最短尋道時間優(yōu)先函數(shù)sstfvoid scan(node *,int,int)
39、;/聲明掃描函數(shù)scanvoid print(node *); /輸出鏈表函數(shù)node *head,*p,*q; /建立一個鏈表int it,c=0,f,s; /c為鏈表長度,f是開始的磁道號,s是選擇哪個算法head=(node *)malloc(sizeof(node);head-next=null;q=head;cout /*磁盤調(diào)度算法*/endl;coutendl;coutit;while(it!=0)p=(node *)malloc(sizeof(node);p-next=null;p-data=it;q-next=p;q=p;cinit;c+;coutf; /f為磁道號print(head);cout鏈表長度為:cendl;cout1、先來先服務(wù)算法fcfsendl;cout2、
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)二年級數(shù)學(xué)口算題上冊
- 2022年新課標(biāo)八年級上冊道德與法治《第九課 樹立總體國家安全觀 》聽課評課記錄(2課時)
- 9-1生活需要法律 2法律保障生活 聽課評課記錄 新部編人教版七年級下冊道德與法治
- 人教版地理七年級上冊第四節(jié)《世界的氣候》聽課評課記錄5
- 華師大版歷史九年級上冊第16課《啟蒙運(yùn)動》聽課評課記錄
- 戶外廣告制作合同范本
- 三方委托出口合同范本
- 二零二五年度知乎共享空間租賃合作協(xié)議
- SBS防水卷材購貨合同范本
- 公司租賃合同范本
- 2024新滬教版英語(五四學(xué)制)七年級上單詞默寫單
- 電力兩票培訓(xùn)
- TCCEAS001-2022建設(shè)項(xiàng)目工程總承包計價規(guī)范
- 2024.8.1十七個崗位安全操作規(guī)程手冊(值得借鑒)
- 二次供水衛(wèi)生管理制度及辦法(4篇)
- 中學(xué)生手機(jī)使用管理協(xié)議書
- 給排水科學(xué)與工程基礎(chǔ)知識單選題100道及答案解析
- 2024年土地變更調(diào)查培訓(xùn)
- 2024年全國外貿(mào)單證員鑒定理論試題庫(含答案)
- 新版中國食物成分表
- DB11∕T 446-2015 建筑施工測量技術(shù)規(guī)程
評論
0/150
提交評論