操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì))_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì))_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì))_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì))_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì))_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)三 進(jìn)程調(diào)度一、 實(shí)驗(yàn)?zāi)康亩嗟莱绦蛟O(shè)計(jì)中,經(jīng)常是若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),必須依照某種策略來(lái)決定那個(gè)進(jìn)程優(yōu)先占有處理機(jī)。因而引起進(jìn)程調(diào)度。本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問(wèn)題,加深對(duì)進(jìn)程調(diào)度的理解。二、 實(shí)驗(yàn)要求1 設(shè)計(jì)進(jìn)程調(diào)度算法,進(jìn)程數(shù)不定2 包含幾種調(diào)度算法,并加以實(shí)現(xiàn)3 輸出進(jìn)程的調(diào)度過(guò)程進(jìn)程的狀態(tài)、鏈表等。三、 參考例1 題目?jī)?yōu)先權(quán)法、輪轉(zhuǎn)法簡(jiǎn)化假設(shè)1) 進(jìn)程為計(jì)算型的(無(wú)I/O)2) 進(jìn)程狀態(tài):ready、running、finish3) 進(jìn)程需要的CPU時(shí)間以時(shí)間片為單位確定2 算法描述1) 優(yōu)先權(quán)法動(dòng)態(tài)優(yōu)先權(quán)當(dāng)前運(yùn)行進(jìn)程用完時(shí)間片后,其優(yōu)先權(quán)減去一個(gè)常數(shù)。2) 輪轉(zhuǎn)

2、法開(kāi)始鍵盤輸入進(jìn)程數(shù)n,和調(diào)度方法的選擇優(yōu)先權(quán)法?輪轉(zhuǎn)法產(chǎn)生n個(gè)進(jìn)程,對(duì)每個(gè)進(jìn)程產(chǎn)生一個(gè)PCB,并用隨機(jī)數(shù)產(chǎn)生進(jìn)程的優(yōu)先權(quán)及進(jìn)程所需的CPU時(shí)間按優(yōu)先權(quán)大小,把n個(gè)進(jìn)程拉成一個(gè)就緒隊(duì)列初始化其他數(shù)據(jù)結(jié)構(gòu)區(qū)鏈?zhǔn)走M(jìn)程投入運(yùn)行時(shí)間片到,進(jìn)程所需的CPU時(shí)間減1,優(yōu)先權(quán)減3,輸出個(gè)進(jìn)程的運(yùn)行情況所需的CPU時(shí)間=0?撤銷進(jìn)程就緒隊(duì)列為空?結(jié)束將進(jìn)程插入就緒隊(duì)列NYNYYBN四、 實(shí)驗(yàn)流程圖產(chǎn)生n個(gè)進(jìn)程,對(duì)每個(gè)進(jìn)程用隨機(jī)數(shù)產(chǎn)生進(jìn)程的輪轉(zhuǎn)時(shí)間片數(shù)及進(jìn)程所需的時(shí)間片數(shù),已占用CPU的時(shí)間片數(shù)置為0按進(jìn)程產(chǎn)生的先后次序拉成就緒隊(duì)列鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行時(shí)間片到,進(jìn)程所需時(shí)間片數(shù)減1,已占用CPU時(shí)間片數(shù)加1輸出各

3、進(jìn)程的運(yùn)行情況進(jìn)程所需時(shí)間片數(shù)=0?撤銷該進(jìn)程就緒隊(duì)列為空嗎?占用CPU的時(shí)間片數(shù)=輪轉(zhuǎn)時(shí)間片數(shù)?占用CPU的時(shí)間片數(shù)置為0把該進(jìn)程插入就緒隊(duì)列尾BNYNYY結(jié)束N注意:1 產(chǎn)生的各種隨機(jī)數(shù)的取值范圍加以限制,如所需的CPU時(shí)間限制在120之間。2 進(jìn)程數(shù)n不要太大通常取48個(gè)3 使用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)4 獨(dú)立編程5 至少三種調(diào)度算法6 若有可能請(qǐng)?jiān)趫D形方式下,將PCB的調(diào)度用圖形成動(dòng)畫顯示。五實(shí)驗(yàn)過(guò)程:(1)輸入:進(jìn)程流文件(1.txt),其中存儲(chǔ)的是一系列要執(zhí)行的進(jìn)程, 每個(gè)作業(yè)包括四個(gè)數(shù)據(jù)項(xiàng):進(jìn)程名 進(jìn)程狀態(tài)(1就緒 2等待 3運(yùn)行) 所需時(shí)間 優(yōu)先數(shù)(0級(jí)最高)進(jìn)程0 1 50 2進(jìn)程1 2

4、 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í)行流等待時(shí)間,平均等待時(shí)間本程序包括:FIFO算法,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法(2)程序代碼#include<stdio.h> #include<string.h> #include<iostream.h>const int block_time=10; /定義時(shí)間片的長(zhǎng)度為10秒 const int MAXPCB=100; /定義最大進(jìn)程數(shù)/定義進(jìn)程結(jié)構(gòu)體 typedef struct nodechar name20; int status;in

5、t time; int privilege;int finished; int wait_time; pcb;pcb pcbsMAXPCB; int quantity;/初始化函數(shù) void initial() int i;for(i=0;i<MAXPCB;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

6、 fname20; int i;cout<<"請(qǐng)輸入進(jìn)程流文件名:" cin>>fname; if(fp=fopen(fname,"r")=NULL) cout<<"錯(cuò)誤,文件打不開(kāi),請(qǐng)檢查文件名"<<endl; else while(!feof(fp) fscanf(fp,"%s %d %d %d",,&pcbsquantity.status,&pcbsquantity.time,&pcbsquantity.

7、privilege); quantity+; /輸出所讀入的數(shù)據(jù) cout<<"輸出所讀入的數(shù)據(jù)"<<endl; cout<<"進(jìn)程名 進(jìn)程狀態(tài) 所需時(shí)間 優(yōu)先數(shù)"<<endl; for(i=0;i<quantity;i+) cout<<" "<<<<" "<<pcbsi.status<<" "<<pcbsi.time<<" &q

8、uot;<<pcbsi.privilege<<endl; return(1); return(0);/重置數(shù)據(jù),以供另一個(gè)算法使用 void init() int i;for(i=0;i<MAXPCB;i+)pcbsi.finished=0; pcbsi.wait_time=0; /先進(jìn)先出算法 void FIFO() int i,j; int total;/輸出FIFO算法執(zhí)行流 cout<<endl<<"*"<<endl; cout<<"FIFO算法執(zhí)行流:"<<

9、;endl; cout<<"進(jìn)程名 等待時(shí)間"<<endl; for(i=0;i<quantity;i+) cout<<" "<<<<" "<<pcbsi.wait_time<<endl; for(j=i+1;j<quantity;j+) pcbsj.wait_time+=pcbsi.time; total=0; for(i=0;i<quantity;i+) total+=pcbsi.wait_time; cout

10、<<"總等待時(shí)間:"<<total<<" 平均等待時(shí)間:"<<total/quantity<<endl;/優(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;i<quantity;i+) current_privilege=1000; for(j=0;j<quantity;j+) if(pcbsj.fin

11、ished=0)&&(pcbsj.privilege<current_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í)行流 cout<<endl<<"*"<<endl; cout<<"優(yōu)先數(shù)調(diào)度執(zhí)行流:"<<endl; cout<<

12、;"進(jìn)程名 等待時(shí)間"<<endl; for(i=0;i<quantity;i+) cout<<" "<<<<" "<<pcbsqueuei.wait_time<<endl; total=0; for(i=0;i<quantity;i+) total+=pcbsi.wait_time; cout<<"總等待時(shí)間:"<<total<<" 平均等待時(shí)間:&quo

13、t;<<total/quantity<<endl;/時(shí)間片輪轉(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;i<quantity;i+) if(pcbsi.finished=0) number+; j=i; if(number=1) queuetotal=j; total+; pcbsj.finished

14、=1; if(number>1)for(i=0;i<quantity;i+) if(pcbsi.finished=0) flag=1; queuetotal=i; total+; if(pcbsi.time<=block_time*(round+1) pcbsi.finished=1; round+; if(queuetotal-1=queuetotal-2) total-; cout<<endl<<"*"<<endl; cout<<"時(shí)間片輪轉(zhuǎn)調(diào)度執(zhí)行流:"<<endl; f

15、or(i=0;i<total;i+) cout<<<<" "cout<<endl;/顯示void version() cout<<" /* 進(jìn)程調(diào)度 */" cout<<endl<<endl; /主函數(shù) void main() int flag;version();initial();flag=readData();if(flag=1) FIFO(); init();privilege(); init();timer(); (3)運(yùn)行結(jié)果:輸入進(jìn)程

16、流文件名1.txt即可得出以下輸出結(jié)果: 實(shí)驗(yàn)二 銀行家算法一、 實(shí)驗(yàn)?zāi)康乃梨i會(huì)引起計(jì)算機(jī)工作僵死,因此操作系統(tǒng)中必須防止。本實(shí)驗(yàn)的目的在于讓學(xué)生獨(dú)立的使用高級(jí)語(yǔ)言編寫和調(diào)試一個(gè)系統(tǒng)動(dòng)態(tài)分配資源的簡(jiǎn)單模擬程序,了解死鎖產(chǎn)生的條件和原因,并采用銀行家算法有效地防止死鎖的發(fā)生,以加深對(duì)課堂上所講授的知識(shí)的理解。二、 實(shí)驗(yàn)要求設(shè)計(jì)有n個(gè)進(jìn)程共享m個(gè)系統(tǒng)資源的系統(tǒng),進(jìn)程可動(dòng)態(tài)的申請(qǐng)和釋放資源,系統(tǒng)按各進(jìn)程的申請(qǐng)動(dòng)態(tài)的分配資源。系統(tǒng)能顯示各個(gè)進(jìn)程申請(qǐng)和釋放資源,以及系統(tǒng)動(dòng)態(tài)分配資源的過(guò)程,便于用戶觀察和分析;三、 數(shù)據(jù)結(jié)構(gòu)1 可利用資源向量Available ,它是一個(gè)含有m個(gè)元素的數(shù)組,其中的每一個(gè)元

17、素代表一類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)地改變。如果Available(j)=k,標(biāo)是系統(tǒng)中現(xiàn)有Rj類資源k個(gè)。2 最大需求矩陣Max,這是一個(gè)n×m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果Max(i,j)=k,表示進(jìn)程i需要Rj類資源的最大數(shù)目為k。3 分配矩陣Allocation,這是一個(gè)n×m的矩陣,它定義了系統(tǒng)中的每類資源當(dāng)前一分配到每一個(gè)進(jìn)程的資源數(shù)。如果Allocation(i,j)=k,表示進(jìn)程i當(dāng)前已經(jīng)分到Rj類資源的數(shù)目為k。Allocation i表示進(jìn)程

18、i的分配向量,有矩陣Allocation的第i行構(gòu)成。4 需求矩陣Need,這是一個(gè)n×m的矩陣,用以表示每個(gè)進(jìn)程還需要的各類資源的數(shù)目。如果Need(i,j)=k,表示進(jìn)程i還需要Rj類資源k個(gè),才能完成其任務(wù)。Need i表示進(jìn)程i的需求向量,由矩陣Need的第i行構(gòu)成。上述三個(gè)矩陣間存在關(guān)系:Need(i,j)=Max(i,j)-Allocation(i,j);四、 銀行家算法Request i 是進(jìn)程Pi 的請(qǐng)求向量。Request i (j)=k表示進(jìn)程Pi請(qǐng)求分配Rj類資源k個(gè)。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查:1 如果Request i Need,則轉(zhuǎn)向步驟

19、2;否則,認(rèn)為出錯(cuò),因?yàn)樗?qǐng)求的資源數(shù)已超過(guò)它當(dāng)前的最大需求量。2 如果Request i Available,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無(wú)足夠的資源滿足Pi的申請(qǐng),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 - Request i4 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則,將試探分配作廢,恢復(fù)原來(lái)的資源

20、分配狀態(tài),讓進(jìn)程Pi等待。假定系統(tǒng)有5個(gè)進(jìn)程(p0,p1,p2,p3,p4)和三類資源(A,B,C),各種資源的數(shù)量分別為10,5,7,在T0時(shí)刻的資源分配情況如下圖: 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 )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è)置兩個(gè)向量。Work:它表示系統(tǒng)可

21、提供給進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)目,它包含m個(gè)元素,開(kāi)始執(zhí)行安全性算法時(shí),Work = Available。Finish:它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開(kāi)始Finish(I)=false;當(dāng)有足夠資源分配給進(jìn)程Pi時(shí),令Finish(i)=true;2 從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程。Finish(i)= = false;Need i work;如找到則執(zhí)行步驟3;否則,執(zhí)行步驟4;3 當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行直到完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行Work = work + Allocation i Finish(i)=true;轉(zhuǎn)向步驟2;4 若所有

22、進(jìn)程的Finish(i)都為true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。六、 系統(tǒng)流程圖開(kāi) 始輸入資源數(shù)m, 及各類資源總數(shù),初始化Available向量輸入進(jìn)程數(shù)n,i=1輸入進(jìn)程i的最大需求向量max。inmax資源總數(shù)提示錯(cuò)誤重新輸入i加1任選一個(gè)進(jìn)程作為當(dāng)前進(jìn)程輸入該進(jìn)程的資源請(qǐng)求量Request 調(diào)用銀行家算法,及安全性算法,完成分配,或并給出提示該進(jìn)程的Need向量為0該進(jìn)程已運(yùn)行結(jié)束Need矩陣為0所有進(jìn)程運(yùn)行都結(jié)束結(jié) 束NYYNNY初始化need 矩陣NY 七銀行家算法程序代碼#include<stdio.h>#include<conio.h&

23、gt;#include<iostream>using 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 /可利用的資源量int av_a;int av_b;int av_c; q;struct p

24、r /定義一個(gè)結(jié)構(gòu)char name;Max max;Allocation allocation;Need need;int finishflag;p5;char na5;/*void init() /讀入文件"1.txt"cout<<"各進(jìn)程還需要的資源數(shù)NEED:"<<endl;FILE *fp;fp=fopen("1.txt","r+"); / 打開(kāi)文件"1.txt"for(int i=0;i<5;i+)fscanf(fp,"%c,%d,%d,%d,

25、%d,%d,%dn",&,&pi.max.m_a,&pi.max.m_b,&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;cout<<<<&qu

26、ot;: "<<pi.need.n_a<<" "<<pi.need.n_b<<" "<<pi.need.n_c<<endl;fclose(fp); /關(guān)閉文件/*int fenpei()/分配資源cout<<"Available:"cout<<q.av_a<<" "<<q.av_b<<" "<<q.av_c<<endl;int fi

27、nishcnt=0,k=0,count=0;for(int j=0;j<5;j+)pj.finishflag=0;while(finishcnt<5)for(int i=0;i<5;i+)if(pi.finishflag=0&&q.av_a>=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.f

28、inishflag=1;finishcnt+;nak+=;break;count+;/禁止循環(huán)過(guò)多if(count>5)return 0;return 1;/*int shq() /申請(qǐng)資源int m=0,i=0,j=0,k=0; /m為進(jìn)程號(hào); i,j,k為申請(qǐng)的三類資源數(shù) cout<<"請(qǐng)輸入進(jìn)程號(hào)和請(qǐng)求資源的數(shù)目!"<<endl;cout<<"如:進(jìn)程號(hào) 資源A B C"<<endl;cout<<" 0 2 0 2"<<endl;cin&

29、gt;>m>>i>>j>>k;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.need.n_a=pm.max.m_a-pm.allocation.a_a;pm.need.n_b=pm.max.m_b-p

30、m.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;w<5;w+) cout<<<<": "<<pw.need.n_a<<" "<<pw.need.n_b<<" "<<pw.need.n_c<<endl;return 1

31、;elsecout<<"Request>Available讓進(jìn)程"<<m<<"等待."<<endl;else cout<<"Request>Need,讓進(jìn)程"<<m<<"等待."<<endl;return 0;/*void main()int flag;char c;cout<<" /* 銀 行 家 算 法*/ "<<endl;cout<<"確

32、認(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;i<5;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<<&qu

33、ot;其安全序列是: "for(int k=0;k<5;k+)cout<<"->"<<nak;cout<<endl;cout<<"有進(jìn)程發(fā)出Request請(qǐng)求向量嗎?(Enter y or Y)"<<endl;cout<<endl;c=getch();if(c='y'|c='Y')if(shq()continue;else break;else flag=0;else flag=0;cout<<"不安全!&q

34、uot;<<endl;八運(yùn)行結(jié)果實(shí)驗(yàn)三 存儲(chǔ)管理一 實(shí)驗(yàn)?zāi)康拇鎯?chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本實(shí)驗(yàn)的目的是通過(guò)請(qǐng)求頁(yè)式管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。二 實(shí)驗(yàn)內(nèi)容(1) 通過(guò)計(jì)算不同算法的命中率比較算法的優(yōu)劣。同時(shí)也考慮了用戶內(nèi)存容量對(duì)命中率的影響。頁(yè)面失效次數(shù)為每次訪問(wèn)相應(yīng)指令時(shí),該指令所對(duì)應(yīng)的頁(yè)不在內(nèi)存中的次數(shù)。在本實(shí)驗(yàn)中,假定頁(yè)面大小為1k,用戶虛存容量為32k,用戶內(nèi)存容量為4頁(yè)到32頁(yè)。(2) produce_addstream通過(guò)隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共320條指

35、令。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í)行,該指令的地址為m;4) 順序執(zhí)行一條指令,地址為m+1的指令5) 在后地址m+2,319中隨機(jī)選取一條指令并執(zhí)行;6) 重復(fù)上述步驟1)5),直到執(zhí)行320次指令C、 將指令序列變換稱為頁(yè)地址流在用戶虛存中,按每k存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:第

36、0條第9條指令為第0頁(yè)(對(duì)應(yīng)虛存地址為0,9);第10條第19條指令為第1頁(yè)(對(duì)應(yīng)虛存地址為10,19);。第310條第319條指令為第31頁(yè)(對(duì)應(yīng)虛存地址為310,319);按以上方式,用戶指令可組成32頁(yè)。(3) 計(jì)算并輸出下屬算法在不同內(nèi)存容量下的命中率。1) 先進(jìn)先出的算法(FIFO);2) 最近最少使用算法(LRU);3) 最佳淘汰算法(OPT);4) 最少訪問(wèn)頁(yè)面算法(LFR);其中3)和4)為選擇內(nèi)容開(kāi) 始生成地址流輸入算法號(hào)S1S4形成地址頁(yè)號(hào)用戶內(nèi)存空間msize=2Msize32 OPT()FIFO()LRU()LFU()Msize加1S=? 是否用其他算法繼續(xù)結(jié) 束NY1

37、234YN提示出錯(cuò),重新輸入三 系統(tǒng)框圖四頁(yè)面置換算法程序代碼:#include<stdio.h> #include<string.h> #include<iostream.h>const int MAXSIZE=1000;/定義最大頁(yè)面數(shù) const int MAXQUEUE=3;/定義頁(yè)框數(shù)typedef struct node int loaded; int hit; page;page pagesMAXQUEUE; /定義頁(yè)框表 int queueMAXSIZE; int quantity; /初始化結(jié)構(gòu)函數(shù) void initial() int i

38、; for(i=0;i<MAXQUEUE;i+) pagesi.loaded=-1; pagesi.hit=0; for(i=0;i<MAXSIZE;i+) queuei=-1; quantity=0; /初始化頁(yè)框函數(shù) void init() int i; for(i=0;i<MAXQUEUE;i+) pagesi.loaded=-1; pagesi.hit=0; /讀入頁(yè)面流void readData() FILE *fp; char fname20;int i;cout<<"請(qǐng)輸入頁(yè)面流文件名:" cin>>fname;if(

39、fp=fopen(fname,"r")=NULL) cout<<"錯(cuò)誤,文件打不開(kāi),請(qǐng)檢查文件名" else while(!feof(fp) fscanf(fp,"%d ",&queuequantity);quantity+; cout<<"讀入的頁(yè)面流:" for(i=0;i<quantity;i+)cout<<queuei<<" " /FIFO調(diào)度算法void FIFO() int i,j,p,flag;int absence=0

40、;p=0;cout<<endl<<"-"<<endl; cout<<"先進(jìn)先出調(diào)度算法(FIFO)頁(yè)面調(diào)出流:" for(i=0;i<quantity;i+) flag=0; for(j=0;j<MAXQUEUE;j+) if(pagesj.loaded=queuei) flag=1; if(flag=0) if(absence>=MAXQUEUE) cout<<pagesp.loaded<<" " pagesp.loaded=queuei; p

41、=(p+1)%MAXQUEUE; absence+; absence-=MAXQUEUE; cout<<endl<<"總?cè)表?yè)數(shù):"<<absence<<endl; /最近最少使用調(diào)度算法(LRU)void LRU() int absence=0; int i,j; int flag;for(i=0;i<MAXQUEUE;i+) pagesi.loaded=queuei; cout<<endl<<"-"<<endl; cout<<"最近最少使用調(diào)

42、度算法(LRU)頁(yè)面流:"for(i=MAXQUEUE;i<quantity;i+) flag=-1; for(j=0;j<MAXQUEUE;j+) if(queuei=pagesj.loaded) flag=j; /CAUTION pages0是隊(duì)列頭if(flag=-1) /缺頁(yè)處理cout<<pages0.loaded<<" " for(j=0;j<MAXQUEUE-1;j+) pagesj=pagesj+1; pagesMAXQUEUE-1.loaded=queuei;absence+; else /頁(yè)面已載入 p

43、agesquantity=pagesflag;for(j=flag;j<MAXQUEUE-1;j+) pagesj=pagesj+1; pagesMAXQUEUE-1=pagesquantity;cout<<endl<<"總?cè)表?yè)數(shù):"<<absence<<endl; /顯示 void version() cout<<" /*虛擬存儲(chǔ)管理器的頁(yè)面調(diào)度*/"<<endl;cout<<endl; void main() version(); initial();readD

44、ata();FIFO(); init();LRU(); init(); init();四 運(yùn)行結(jié)果運(yùn)行程序前先新建一個(gè)頁(yè)面流文件文件(格式為*.txt),在文件中存儲(chǔ)的是一系列頁(yè)面號(hào)(頁(yè)面號(hào)用整數(shù)表示,用空格作為分隔符),用來(lái)模擬待換入的頁(yè)面。例如: 14 5 18 56 20 25 6 3 8 17實(shí)驗(yàn)四 磁盤調(diào)度一、 實(shí)驗(yàn)?zāi)康模捍疟P是高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲(chǔ)設(shè)備。它作為計(jì)算機(jī)系統(tǒng)的輔助存儲(chǔ)器,擔(dān)負(fù)著繁重的輸入輸出工作,在現(xiàn)代計(jì)算機(jī)系統(tǒng)中往往同時(shí)會(huì)有若干個(gè)要求訪問(wèn)磁盤的輸入輸出要求。系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行訪問(wèn)磁盤的請(qǐng)求。由于磁盤訪問(wèn)時(shí)間主要受尋道時(shí)間T的影響,

45、為此需要采用合適的尋道算法,以降低尋道時(shí)間。本實(shí)驗(yàn)要求學(xué)生模擬設(shè)計(jì)一個(gè)磁盤調(diào)度程序,觀察調(diào)度程序的動(dòng)態(tài)運(yùn)行過(guò)程。通過(guò)實(shí)驗(yàn)讓學(xué)生理解和掌握磁盤調(diào)度的職能。二、 實(shí)驗(yàn)題目:模擬電梯調(diào)度算法,對(duì)磁盤進(jìn)行移臂操作三、 提示及要求:1、 假設(shè)磁盤只有一個(gè)盤面,并且磁盤是可移動(dòng)頭磁盤。2、 磁盤是可供多個(gè)進(jìn)程共享的存儲(chǔ)設(shè)備,但一個(gè)磁盤每個(gè)時(shí)刻只能為一個(gè)進(jìn)程服務(wù)。當(dāng)有進(jìn)程在訪問(wèn)某個(gè)磁盤時(shí),其它想訪問(wèn)該磁盤的進(jìn)程必須等待,直到磁盤一次工作結(jié)束。當(dāng)有多個(gè)進(jìn)程提出輸入輸出請(qǐng)求而處于等待狀態(tài)時(shí),可用電梯調(diào)度算法從若干個(gè)等待訪問(wèn)者中選擇一個(gè)進(jìn)程,讓它訪問(wèn)磁盤。為此設(shè)置“驅(qū)動(dòng)調(diào)度”進(jìn)程。3、 由于磁盤與處理器是并行工作

46、的,所以當(dāng)磁盤在為一個(gè)進(jìn)程服務(wù)時(shí),占有處理器的其它進(jìn)程可以提出使用磁盤(這里我們只要求訪問(wèn)磁道),即動(dòng)態(tài)申請(qǐng)?jiān)L問(wèn)磁道,為此設(shè)置“接受請(qǐng)求”進(jìn)程。4、 為了模擬以上兩個(gè)進(jìn)程的執(zhí)行,可以考慮使用隨機(jī)數(shù)來(lái)確定二者的允許順序,程序結(jié)構(gòu)圖參考附圖:5、 “接受請(qǐng)求”進(jìn)程建立一張“進(jìn)程請(qǐng)求I/O”表,指出等待訪問(wèn)磁盤的進(jìn)程要求訪問(wèn)的磁道,表的格式如下:進(jìn)程名要求訪問(wèn)的磁道號(hào)6、 “磁盤調(diào)度”的功能是查“請(qǐng)求I/O”表,當(dāng)有等待訪問(wèn)的進(jìn)程時(shí),按電梯調(diào)度算法(SCAN算法)從中選擇一個(gè)等待訪問(wèn)的進(jìn)程,按其指定的要求訪問(wèn)磁道。SCAN算法參考課本第九章。算法模擬框圖略。7、 圖1中的“初始化”工作包括:初始化“

47、請(qǐng)求I/O”表,設(shè)置置當(dāng)前移臂方向;當(dāng)前磁道號(hào)。并且假設(shè)程序運(yùn)行前“請(qǐng)求I/O”表中已有若干進(jìn)程(48個(gè))申請(qǐng)?jiān)L問(wèn)相應(yīng)磁道。四、 實(shí)驗(yàn)報(bào)告:1、 實(shí)驗(yàn)題目。2、 程序中用到的數(shù)據(jù)結(jié)構(gòu)及其說(shuō)明。3、 打印源程序并附注釋。4、 實(shí)驗(yàn)結(jié)果內(nèi)容如下:打印“請(qǐng)求I/O”表,當(dāng)前磁道號(hào),移臂方向,被選中的進(jìn)程名和其要求訪問(wèn)的磁道,看是否體現(xiàn)了電梯調(diào)度(SCAN)算法。5、 體會(huì)與問(wèn)題。五、 附圖:開(kāi)始初始化磁盤調(diào)度隨機(jī)數(shù)1/2繼續(xù)?接受請(qǐng)求輸入在0,1區(qū)間內(nèi)的隨機(jī)數(shù)結(jié)束六磁盤調(diào)度的程序代碼:#include<iostream>#include<cmath>using namespa

48、ce std;typedef struct nodeint data;struct node *next;Node;void main()void fcfs(Node *,int,int);/聲明先來(lái)先服務(wù)函數(shù)FCFSvoid sstf(Node *,int,int);/聲明最短尋道時(shí)間優(yōu)先函數(shù)SSTFvoid scan(Node *,int,int);/聲明掃描函數(shù)SCANvoid print(Node *); /輸出鏈表函數(shù)Node *head,*p,*q; /建立一個(gè)鏈表int it,c=0,f,s; /c為鏈表長(zhǎng)度,f是開(kāi)始的磁道號(hào),s是選擇哪個(gè)算法head=(Node *)mallo

49、c(sizeof(Node);head->next=NULL;q=head;cout<<" /*磁盤調(diào)度算法*/"<<endl;cout<<endl;cout<<"新建一個(gè)單鏈表,以0作為結(jié)束標(biāo)志:"cin>>it;while(it!=0)p=(Node *)malloc(sizeof(Node);p->next=NULL;p->data=it;q->next=p;q=p;cin>>it;c+;cout<<"從幾號(hào)磁道開(kāi)始:"c

50、in>>f; /f為磁道號(hào)print(head);cout<<"鏈表長(zhǎng)度為:"<<c<<endl;cout<<"1、先來(lái)先服務(wù)算法FCFS"<<endl;cout<<"2、最短尋道時(shí)間優(yōu)先算法SSTF"<<endl;cout<<"3、電梯調(diào)度算法(掃描算法SCAN)"<<endl;cout<<"0、退出"<<endl;cout<<"

51、請(qǐng)選擇:"cin>>s;while(s!=0) switch(s) case 1:cout<<"你選擇了:先來(lái)先服務(wù)算法FCFS"<<endl;fcfs( head,c,f);break; case 2:cout<<"你選擇了:最短尋道時(shí)間優(yōu)先算法SSTF"<<endl;sstf( head,c,f);break; case 3:cout<<"你選擇了:電梯調(diào)度算法(掃描算法SCAN)"<<endl;scan( head,c,f);break; cout<<"退出請(qǐng)選0,繼續(xù)請(qǐng)選1,2,3:" cin>>s;/*/void fcfs(Node *head,int c,int f)/先來(lái)先服務(wù)算法void print(Node *);Node *l;/*m,*n;float num=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論