




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗三 進程調度一、 實驗目的多道程序設計中,經常是若干個進程同時處于就緒狀態(tài),必須依照某種策略來決定那個進程優(yōu)先占有處理機。因而引起進程調度。本實驗模擬在單處理機情況下的處理機調度問題,加深對進程調度的理解。二、 實驗要求1 設計進程調度算法,進程數(shù)不定2 包含幾種調度算法,并加以實現(xiàn)3 輸出進程的調度過程進程的狀態(tài)、鏈表等。三、 參考例1 題目優(yōu)先權法、輪轉法簡化假設1) 進程為計算型的(無I/O)2) 進程狀態(tài):ready、running、finish3) 進程需要的CPU時間以時間片為單位確定2 算法描述1) 優(yōu)先權法動態(tài)優(yōu)先權當前運行進程用完時間片后,其優(yōu)先權減去一個常數(shù)。2) 輪轉
2、法開始鍵盤輸入進程數(shù)n,和調度方法的選擇優(yōu)先權法?輪轉法產生n個進程,對每個進程產生一個PCB,并用隨機數(shù)產生進程的優(yōu)先權及進程所需的CPU時間按優(yōu)先權大小,把n個進程拉成一個就緒隊列初始化其他數(shù)據(jù)結構區(qū)鏈首進程投入運行時間片到,進程所需的CPU時間減1,優(yōu)先權減3,輸出個進程的運行情況所需的CPU時間=0?撤銷進程就緒隊列為空?結束將進程插入就緒隊列NYNYYBN四、 實驗流程圖產生n個進程,對每個進程用隨機數(shù)產生進程的輪轉時間片數(shù)及進程所需的時間片數(shù),已占用CPU的時間片數(shù)置為0按進程產生的先后次序拉成就緒隊列鏈鏈首進程投入運行時間片到,進程所需時間片數(shù)減1,已占用CPU時間片數(shù)加1輸出各
3、進程的運行情況進程所需時間片數(shù)=0?撤銷該進程就緒隊列為空嗎?占用CPU的時間片數(shù)=輪轉時間片數(shù)?占用CPU的時間片數(shù)置為0把該進程插入就緒隊列尾BNYNYY結束N注意:1 產生的各種隨機數(shù)的取值范圍加以限制,如所需的CPU時間限制在120之間。2 進程數(shù)n不要太大通常取48個3 使用動態(tài)數(shù)據(jù)結構4 獨立編程5 至少三種調度算法6 若有可能請在圖形方式下,將PCB的調度用圖形成動畫顯示。五實驗過程:(1)輸入:進程流文件(1.txt),其中存儲的是一系列要執(zhí)行的進程, 每個作業(yè)包括四個數(shù)據(jù)項:進程名 進程狀態(tài)(1就緒 2等待 3運行) 所需時間 優(yōu)先數(shù)(0級最高)進程0 1 50 2進程1 2
4、 10 4進程2 1 15 0進程3 3 28 5 進程4 2 19 1進程5 3 8 7輸出: 進程執(zhí)行流等待時間,平均等待時間本程序包括:FIFO算法,優(yōu)先數(shù)調度算法,時間片輪轉調度算法(2)程序代碼#include<stdio.h> #include<string.h> #include<iostream.h>const int block_time=10; /定義時間片的長度為10秒 const int MAXPCB=100; /定義最大進程數(shù)/定義進程結構體 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<<"請輸入進程流文件名:" cin>>fname; if(fp=fopen(fname,"r")=NULL) cout<<"錯誤,文件打不開,請檢查文件名"<<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<<"進程名 進程狀態(tài) 所需時間 優(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ù),以供另一個算法使用 void init() int i;for(i=0;i<MAXPCB;i+)pcbsi.finished=0; pcbsi.wait_time=0; /先進先出算法 void FIFO() int i,j; int total;/輸出FIFO算法執(zhí)行流 cout<<endl<<"*"<<endl; cout<<"FIFO算法執(zhí)行流:"<<
9、;endl; cout<<"進程名 等待時間"<<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、<<"總等待時間:"<<total<<" 平均等待時間:"<<total/quantity<<endl;/優(yōu)先數(shù)調度算法 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ù)調度執(zhí)行流 cout<<endl<<"*"<<endl; cout<<"優(yōu)先數(shù)調度執(zhí)行流:"<<endl; cout<<
12、;"進程名 等待時間"<<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<<"總等待時間:"<<total<<" 平均等待時間:&quo
13、t;<<total/quantity<<endl;/時間片輪轉調度算法 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<<"時間片輪轉調度執(zhí)行流:"<<endl; f
15、or(i=0;i<total;i+) cout<<<<" "cout<<endl;/顯示void version() cout<<" /* 進程調度 */" cout<<endl<<endl; /主函數(shù) void main() int flag;version();initial();flag=readData();if(flag=1) FIFO(); init();privilege(); init();timer(); (3)運行結果:輸入進程
16、流文件名1.txt即可得出以下輸出結果: 實驗二 銀行家算法一、 實驗目的死鎖會引起計算機工作僵死,因此操作系統(tǒng)中必須防止。本實驗的目的在于讓學生獨立的使用高級語言編寫和調試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,了解死鎖產生的條件和原因,并采用銀行家算法有效地防止死鎖的發(fā)生,以加深對課堂上所講授的知識的理解。二、 實驗要求設計有n個進程共享m個系統(tǒng)資源的系統(tǒng),進程可動態(tài)的申請和釋放資源,系統(tǒng)按各進程的申請動態(tài)的分配資源。系統(tǒng)能顯示各個進程申請和釋放資源,以及系統(tǒng)動態(tài)分配資源的過程,便于用戶觀察和分析;三、 數(shù)據(jù)結構1 可利用資源向量Available ,它是一個含有m個元素的數(shù)組,其中的每一個元
17、素代表一類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。如果Available(j)=k,標是系統(tǒng)中現(xiàn)有Rj類資源k個。2 最大需求矩陣Max,這是一個n×m的矩陣,它定義了系統(tǒng)中n個進程中的每一個進程對m類資源的最大需求。如果Max(i,j)=k,表示進程i需要Rj類資源的最大數(shù)目為k。3 分配矩陣Allocation,這是一個n×m的矩陣,它定義了系統(tǒng)中的每類資源當前一分配到每一個進程的資源數(shù)。如果Allocation(i,j)=k,表示進程i當前已經分到Rj類資源的數(shù)目為k。Allocation i表示進程
18、i的分配向量,有矩陣Allocation的第i行構成。4 需求矩陣Need,這是一個n×m的矩陣,用以表示每個進程還需要的各類資源的數(shù)目。如果Need(i,j)=k,表示進程i還需要Rj類資源k個,才能完成其任務。Need i表示進程i的需求向量,由矩陣Need的第i行構成。上述三個矩陣間存在關系:Need(i,j)=Max(i,j)-Allocation(i,j);四、 銀行家算法Request i 是進程Pi 的請求向量。Request i (j)=k表示進程Pi請求分配Rj類資源k個。當Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查:1 如果Request i Need,則轉向步驟
19、2;否則,認為出錯,因為它所請求的資源數(shù)已超過它當前的最大需求量。2 如果Request i Available,則轉向步驟3;否則,表示系統(tǒng)中尚無足夠的資源滿足Pi的申請,Pi必須等待。3 系統(tǒng)試探性地把資源分配給進程Pi,并修改下面數(shù)據(jù)結構中的數(shù)值:Available = Available - Request iAllocation i= Allocation i+ Request iNeed i= Need i - Request i4 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式將資源分配給進程Pi,以完成本次分配;否則,將試探分配作廢,恢復原來的資源
20、分配狀態(tài),讓進程Pi等待。假定系統(tǒng)有5個進程(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 )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 設置兩個向量。Work:它表示系統(tǒng)可
21、提供給進程繼續(xù)運行的各類資源數(shù)目,它包含m個元素,開始執(zhí)行安全性算法時,Work = Available。Finish:它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成,開始Finish(I)=false;當有足夠資源分配給進程Pi時,令Finish(i)=true;2 從進程集合中找到一個能滿足下述條件的進程。Finish(i)= = false;Need i work;如找到則執(zhí)行步驟3;否則,執(zhí)行步驟4;3 當進程Pi獲得資源后,可順利執(zhí)行直到完成,并釋放出分配給它的資源,故應執(zhí)行Work = work + Allocation i Finish(i)=true;轉向步驟2;4 若所有
22、進程的Finish(i)都為true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。六、 系統(tǒng)流程圖開 始輸入資源數(shù)m, 及各類資源總數(shù),初始化Available向量輸入進程數(shù)n,i=1輸入進程i的最大需求向量max。inmax資源總數(shù)提示錯誤重新輸入i加1任選一個進程作為當前進程輸入該進程的資源請求量Request 調用銀行家算法,及安全性算法,完成分配,或并給出提示該進程的Need向量為0該進程已運行結束Need矩陣為0所有進程運行都結束結 束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 /定義一個結構char name;Max max;Allocation allocation;Need need;int finishflag;p5;char na5;/*void init() /讀入文件"1.txt"cout<<"各進程還需要的資源數(shù)NEED:"<<endl;FILE *fp;fp=fopen("1.txt","r+"); / 打開文件"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); /關閉文件/*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)過多if(count>5)return 0;return 1;/*int shq() /申請資源int m=0,i=0,j=0,k=0; /m為進程號; i,j,k為申請的三類資源數(shù) cout<<"請輸入進程號和請求資源的數(shù)目!"<<endl;cout<<"如:進程號 資源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<<"各進程還需要的資源數(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讓進程"<<m<<"等待."<<endl;else cout<<"Request>Need,讓進程"<<m<<"等待."<<endl;return 0;/*void main()int flag;char c;cout<<" /* 銀 行 家 算 法*/ "<<endl;cout<<"確
32、認已經在"1.txt"文檔中正確輸入各進程的有關信息后按回車鍵"<<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<<"有進程發(fā)出Request請求向量嗎?(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;八運行結果實驗三 存儲管理一 實驗目的存儲管理的主要功能之一是合理地分配空間。請求頁式管理是一種常用的虛擬存儲管理技術。本實驗的目的是通過請求頁式管理中頁面置換算法模擬設計,了解虛擬存儲技術的特點,掌握請求頁式存儲管理的頁面置換算法。二 實驗內容(1) 通過計算不同算法的命中率比較算法的優(yōu)劣。同時也考慮了用戶內存容量對命中率的影響。頁面失效次數(shù)為每次訪問相應指令時,該指令所對應的頁不在內存中的次數(shù)。在本實驗中,假定頁面大小為1k,用戶虛存容量為32k,用戶內存容量為4頁到32頁。(2) produce_addstream通過隨機數(shù)產生一個指令序列,共320條指
35、令。A、 指令的地址按下述原則生成:1) 50%的指令是順序執(zhí)行的2) 25%的指令是均勻分布在前地址部分3) 25%的指令是均勻分布在后地址部分B、 具體的實施方法是:1) 在0,319的指令地址之間隨機選取一起點m;2) 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;3) 在前地址0,m+1中隨機選取一條指令并執(zhí)行,該指令的地址為m;4) 順序執(zhí)行一條指令,地址為m+1的指令5) 在后地址m+2,319中隨機選取一條指令并執(zhí)行;6) 重復上述步驟1)5),直到執(zhí)行320次指令C、 將指令序列變換稱為頁地址流在用戶虛存中,按每k存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:第
36、0條第9條指令為第0頁(對應虛存地址為0,9);第10條第19條指令為第1頁(對應虛存地址為10,19);。第310條第319條指令為第31頁(對應虛存地址為310,319);按以上方式,用戶指令可組成32頁。(3) 計算并輸出下屬算法在不同內存容量下的命中率。1) 先進先出的算法(FIFO);2) 最近最少使用算法(LRU);3) 最佳淘汰算法(OPT);4) 最少訪問頁面算法(LFR);其中3)和4)為選擇內容開 始生成地址流輸入算法號S1S4形成地址頁號用戶內存空間msize=2Msize32 OPT()FIFO()LRU()LFU()Msize加1S=? 是否用其他算法繼續(xù)結 束NY1
37、234YN提示出錯,重新輸入三 系統(tǒng)框圖四頁面置換算法程序代碼:#include<stdio.h> #include<string.h> #include<iostream.h>const int MAXSIZE=1000;/定義最大頁面數(shù) const int MAXQUEUE=3;/定義頁框數(shù)typedef struct node int loaded; int hit; page;page pagesMAXQUEUE; /定義頁框表 int queueMAXSIZE; int quantity; /初始化結構函數(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; /初始化頁框函數(shù) void init() int i; for(i=0;i<MAXQUEUE;i+) pagesi.loaded=-1; pagesi.hit=0; /讀入頁面流void readData() FILE *fp; char fname20;int i;cout<<"請輸入頁面流文件名:" cin>>fname;if(
39、fp=fopen(fname,"r")=NULL) cout<<"錯誤,文件打不開,請檢查文件名" else while(!feof(fp) fscanf(fp,"%d ",&queuequantity);quantity+; cout<<"讀入的頁面流:" for(i=0;i<quantity;i+)cout<<queuei<<" " /FIFO調度算法void FIFO() int i,j,p,flag;int absence=0
40、;p=0;cout<<endl<<"-"<<endl; cout<<"先進先出調度算法(FIFO)頁面調出流:" 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<<"總缺頁數(shù):"<<absence<<endl; /最近最少使用調度算法(LRU)void LRU() int absence=0; int i,j; int flag;for(i=0;i<MAXQUEUE;i+) pagesi.loaded=queuei; cout<<endl<<"-"<<endl; cout<<"最近最少使用調
42、度算法(LRU)頁面流:"for(i=MAXQUEUE;i<quantity;i+) flag=-1; for(j=0;j<MAXQUEUE;j+) if(queuei=pagesj.loaded) flag=j; /CAUTION pages0是隊列頭if(flag=-1) /缺頁處理cout<<pages0.loaded<<" " for(j=0;j<MAXQUEUE-1;j+) pagesj=pagesj+1; pagesMAXQUEUE-1.loaded=queuei;absence+; else /頁面已載入 p
43、agesquantity=pagesflag;for(j=flag;j<MAXQUEUE-1;j+) pagesj=pagesj+1; pagesMAXQUEUE-1=pagesquantity;cout<<endl<<"總缺頁數(shù):"<<absence<<endl; /顯示 void version() cout<<" /*虛擬存儲管理器的頁面調度*/"<<endl;cout<<endl; void main() version(); initial();readD
44、ata();FIFO(); init();LRU(); init(); init();四 運行結果運行程序前先新建一個頁面流文件文件(格式為*.txt),在文件中存儲的是一系列頁面號(頁面號用整數(shù)表示,用空格作為分隔符),用來模擬待換入的頁面。例如: 14 5 18 56 20 25 6 3 8 17實驗四 磁盤調度一、 實驗目的:磁盤是高速、大容量、旋轉型、可直接存取的存儲設備。它作為計算機系統(tǒng)的輔助存儲器,擔負著繁重的輸入輸出工作,在現(xiàn)代計算機系統(tǒng)中往往同時會有若干個要求訪問磁盤的輸入輸出要求。系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行訪問磁盤的請求。由于磁盤訪問時間主要受尋道時間T的影響,
45、為此需要采用合適的尋道算法,以降低尋道時間。本實驗要求學生模擬設計一個磁盤調度程序,觀察調度程序的動態(tài)運行過程。通過實驗讓學生理解和掌握磁盤調度的職能。二、 實驗題目:模擬電梯調度算法,對磁盤進行移臂操作三、 提示及要求:1、 假設磁盤只有一個盤面,并且磁盤是可移動頭磁盤。2、 磁盤是可供多個進程共享的存儲設備,但一個磁盤每個時刻只能為一個進程服務。當有進程在訪問某個磁盤時,其它想訪問該磁盤的進程必須等待,直到磁盤一次工作結束。當有多個進程提出輸入輸出請求而處于等待狀態(tài)時,可用電梯調度算法從若干個等待訪問者中選擇一個進程,讓它訪問磁盤。為此設置“驅動調度”進程。3、 由于磁盤與處理器是并行工作
46、的,所以當磁盤在為一個進程服務時,占有處理器的其它進程可以提出使用磁盤(這里我們只要求訪問磁道),即動態(tài)申請訪問磁道,為此設置“接受請求”進程。4、 為了模擬以上兩個進程的執(zhí)行,可以考慮使用隨機數(shù)來確定二者的允許順序,程序結構圖參考附圖:5、 “接受請求”進程建立一張“進程請求I/O”表,指出等待訪問磁盤的進程要求訪問的磁道,表的格式如下:進程名要求訪問的磁道號6、 “磁盤調度”的功能是查“請求I/O”表,當有等待訪問的進程時,按電梯調度算法(SCAN算法)從中選擇一個等待訪問的進程,按其指定的要求訪問磁道。SCAN算法參考課本第九章。算法模擬框圖略。7、 圖1中的“初始化”工作包括:初始化“
47、請求I/O”表,設置置當前移臂方向;當前磁道號。并且假設程序運行前“請求I/O”表中已有若干進程(48個)申請訪問相應磁道。四、 實驗報告:1、 實驗題目。2、 程序中用到的數(shù)據(jù)結構及其說明。3、 打印源程序并附注釋。4、 實驗結果內容如下:打印“請求I/O”表,當前磁道號,移臂方向,被選中的進程名和其要求訪問的磁道,看是否體現(xiàn)了電梯調度(SCAN)算法。5、 體會與問題。五、 附圖:開始初始化磁盤調度隨機數(shù)1/2繼續(xù)?接受請求輸入在0,1區(qū)間內的隨機數(shù)結束六磁盤調度的程序代碼:#include<iostream>#include<cmath>using namespa
48、ce std;typedef struct nodeint data;struct node *next;Node;void main()void fcfs(Node *,int,int);/聲明先來先服務函數(shù)FCFSvoid sstf(Node *,int,int);/聲明最短尋道時間優(yōu)先函數(shù)SSTFvoid scan(Node *,int,int);/聲明掃描函數(shù)SCANvoid print(Node *); /輸出鏈表函數(shù)Node *head,*p,*q; /建立一個鏈表int it,c=0,f,s; /c為鏈表長度,f是開始的磁道號,s是選擇哪個算法head=(Node *)mallo
49、c(sizeof(Node);head->next=NULL;q=head;cout<<" /*磁盤調度算法*/"<<endl;cout<<endl;cout<<"新建一個單鏈表,以0作為結束標志:"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<<"從幾號磁道開始:"c
50、in>>f; /f為磁道號print(head);cout<<"鏈表長度為:"<<c<<endl;cout<<"1、先來先服務算法FCFS"<<endl;cout<<"2、最短尋道時間優(yōu)先算法SSTF"<<endl;cout<<"3、電梯調度算法(掃描算法SCAN)"<<endl;cout<<"0、退出"<<endl;cout<<"
51、請選擇:"cin>>s;while(s!=0) switch(s) case 1:cout<<"你選擇了:先來先服務算法FCFS"<<endl;fcfs( head,c,f);break; case 2:cout<<"你選擇了:最短尋道時間優(yōu)先算法SSTF"<<endl;sstf( head,c,f);break; case 3:cout<<"你選擇了:電梯調度算法(掃描算法SCAN)"<<endl;scan( head,c,f);break; cout<<"退出請選0,繼續(xù)請選1,2,3:" cin>>s;/*/void fcfs(Node *head,int c,int f)/先來先服務算法void print(Node *);Node *l;/*m,*n;float num=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新銷售員培訓計劃
- 2024年食品質檢員考試前沿動態(tài)試題及答案
- 建設碳庫面試題及答案
- 汽車表面涂料養(yǎng)護與維護常識試題及答案
- 2024美容師考試完成自我評估的重要性試題及答案
- 2024年汽車檢測儀器使用試題及答案
- 考前沖刺汽車維修工考試試題及答案要點
- 福建省福州市福清市高中聯(lián)合體2022-2023學年高一下學期期中生物試題(含答案)
- 2024年寵物營養(yǎng)測試難點及試題及答案
- 寵物自然飲食的趨勢分析試題及答案
- 青少年心理韌性量表及計分方式 胡月琴版
- 2022中學思政課教案《同心抗疫 我在行動》教學設計2篇
- 正反平衡供電煤耗計算方法介紹
- 330KV代席線29301不停電跨越鐵路施工方案1解析
- 西師版數(shù)學六年級(上冊)知識點匯總
- 常見化驗指標的正常值及臨床意義
- 三字經全文帶拼音完整版可打印
- 畢業(yè)設計 論文 基于plc的全自動洗衣機控制系統(tǒng)設計論文
- 員工通用請假條Excel模板
- 現(xiàn)金支票樣(標準-附圖片)
- 2013-2015北京地鐵部分線路年客流量
評論
0/150
提交評論