版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、調(diào)度算法程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:進(jìn)程調(diào)度模擬算法院系:公共管理學(xué)院班級(jí):信息管理與信息系統(tǒng)一班姓名:周晨妍學(xué)號(hào):2014190314指導(dǎo)老師:匡林愛日期:2015年11月19日一、課程設(shè)計(jì)目的 進(jìn)行操作系統(tǒng)課程設(shè)計(jì)主要是在學(xué)習(xí)操作系統(tǒng)課程的基礎(chǔ)上,在完成操作系統(tǒng)各部分實(shí)驗(yàn)的基礎(chǔ)上,對(duì)操作系統(tǒng)的整體進(jìn)行一個(gè)模擬,通過實(shí)踐加深對(duì)各個(gè)部分的管理功能的認(rèn)識(shí),還能進(jìn)一步分析各個(gè)部分之間的聯(lián)系,最后達(dá)到對(duì)完整系統(tǒng)的理解。同時(shí),可以提高運(yùn)用操作系統(tǒng)知識(shí)解決實(shí)際問題的能力;鍛煉實(shí)際的編程能力、開發(fā)軟件的能力;還能提高調(diào)查研究、查閱技術(shù)文獻(xiàn)、資料以及編寫軟件設(shè)計(jì)文檔的能力。先來先服務(wù)調(diào)度
2、算法1、算法原理設(shè)計(jì)程序模擬進(jìn)程的先來先服務(wù)FCFS過程。假設(shè)有n個(gè)進(jìn)程分別在T1, ,Tn時(shí)刻到達(dá)系統(tǒng),它們需要的服務(wù)時(shí)間分別為S1, ,Sn。分別采用先來先服務(wù)FCFS調(diào)度算法進(jìn)行調(diào)度,計(jì)算每個(gè)進(jìn)程的完成時(shí)間,周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間,并且統(tǒng)計(jì)n個(gè)進(jìn)程的平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。程序要求如下:1)進(jìn)程個(gè)數(shù)n;每個(gè)進(jìn)程的到達(dá)時(shí)間T1, ,Tn和服務(wù)時(shí)間S1, ,Sn。2)要求采用先來先服務(wù)FCFS調(diào)度進(jìn)程運(yùn)行,計(jì)算每個(gè)進(jìn)程的周轉(zhuǎn)時(shí)間,帶權(quán)周轉(zhuǎn)時(shí)間,并且計(jì)算所有進(jìn)程的平均周轉(zhuǎn)時(shí)間,帶權(quán)平均周轉(zhuǎn)時(shí)間;3)輸出:要求模擬整個(gè)調(diào)度過程,輸出每個(gè)時(shí)刻的進(jìn)程運(yùn)行狀態(tài),如“時(shí)刻3:進(jìn)程B開始運(yùn)行”等等
3、;4)輸出:要求輸出計(jì)算出來的每個(gè)進(jìn)程的周轉(zhuǎn)時(shí)間,帶權(quán)周轉(zhuǎn)時(shí)間,所有進(jìn)程的平均周轉(zhuǎn)時(shí)間,帶權(quán)平均周轉(zhuǎn)時(shí)間。2、實(shí)驗(yàn)提示用C語言實(shí)現(xiàn)提示:1)程序中進(jìn)程調(diào)度時(shí)間變量描述如下:static int MaxNum=100;int ArrivalTimeMaxNum;int ServiceTimeMaxNum;int FinishTimeMaxNum;int WholeTimeMaxNum;double WeightWholeTimeMaxNum;double AverageWT_FCFS; double AverageWWT_FCFS;2)進(jìn)程調(diào)度的實(shí)現(xiàn)過程如下:變量初始化;接收用戶輸入n,T1,
4、,Tn,S1, ,Sn;按照選擇算法進(jìn)行進(jìn)程調(diào)度,計(jì)算進(jìn)程的完成時(shí)間、周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間;計(jì)算所有進(jìn)程的平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間;按格式輸出調(diào)度結(jié)果。3、程序流程圖P=HEAD ; i=0P=Q;P=P-NEXT;P=P-NEXT;Q-STARTTIME=TIMEQ-STATE=T 開始i+;輸出執(zhí)行進(jìn)程信息結(jié)束P-STATE=F?Q-ARRIVETIME TIME?i STARTTIME=ARRIVETIMEQ-STATE=T YNYNNY4、作業(yè)時(shí)間表作業(yè)到達(dá)時(shí)間服務(wù)時(shí)間開始時(shí)間完成時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間A020020201B4132033292.23C8133342626D1
5、8200342342161.08平均周轉(zhuǎn)時(shí)間 T=(20+29+26+216)/4ms=72.75ms平均帶權(quán)周轉(zhuǎn)時(shí)間 W=(1+2.23+26+1.08)/4ms=7.5775ms5、程序源代碼#includestdio.h#includestdlib.htypedef struct PCB /定義進(jìn)程控制塊 char name10; /進(jìn)程名char state; /運(yùn)行狀態(tài)int ArriveTime; /到達(dá)時(shí)間int StartTime; /進(jìn)程開始時(shí)間int FinishTime; /進(jìn)程結(jié)束時(shí)間int ServiceTime; /服務(wù)時(shí)間float WholeTime;/周轉(zhuǎn)時(shí)間
6、float WeightWholeTime;/帶權(quán)周轉(zhuǎn)時(shí)間struct PCB *next; /指向下個(gè)進(jìn)程pcb;double x=0,y=0;int i;int time; /計(jì)時(shí)器int n; /進(jìn)程個(gè)數(shù)pcb *head=NULL,*p,*q; /進(jìn)程鏈表指針void run_FCFS(pcb *p1) /運(yùn)行未完成的進(jìn)程time = p1-ArriveTime time? p1-ArriveTime:time;p1-StartTime=time;printf(n時(shí)刻:%d, 當(dāng)前開始運(yùn)行作業(yè)%snn,time,p1-name);time+=p1-ServiceTime;p1-stat
7、e=T;p1-FinishTime=time;p1-WholeTime=p1-FinishTime-p1-ArriveTime;p1-WeightWholeTime=p1-WholeTime/p1-ServiceTime;x+=p1-WholeTime;y+=p1-WeightWholeTime;printf( 到達(dá)時(shí)間 開始時(shí)間 服務(wù)時(shí)間 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間 n);printf(%6d %10d %10d %8d %10.1f %10.2f n ,p1-ArriveTime,p1-StartTime,p1-ServiceTime,p1-FinishTime,p1-WholeTi
8、me,p1-WeightWholeTime);void FCFS() /找到當(dāng)前未完成的進(jìn)程 int i; p=head; for(i=0;istate=F) q=p; /標(biāo)記當(dāng)前未完成的進(jìn)程 run_FCFS(q); p=p-next; void getInfo() /獲得進(jìn)程信息并創(chuàng)建進(jìn)程int num;printf(n進(jìn)程個(gè)數(shù):);scanf(%d,&n);for(num=0;numname,&p-ArriveTime,&p-ServiceTime);if(head=NULL) head=p;q=p;time=p-ArriveTime;if(p-ArriveTime ArriveTime
9、;q-next=p;p-StartTime=0;p-FinishTime=0;p-WholeTime=0;p-WeightWholeTime=0;p-next=NULL;p-state=F;q=p; void main()printf(先來先服務(wù)FCFS算法模擬n);getInfo();p=head;FCFS();6、運(yùn)行結(jié)果短作業(yè)優(yōu)先調(diào)度算法實(shí)驗(yàn)提示用C語言實(shí)現(xiàn)提示:程序中進(jìn)程調(diào)度時(shí)間變量描述如下:char name10; /進(jìn)程名float arrivetime; /到達(dá)時(shí)間float servicetime; /服務(wù)時(shí)間float starttime; /開始時(shí)間float finish
10、time; /完成時(shí)間float zztime; /周轉(zhuǎn)時(shí)間float dqzztime; /帶權(quán)周轉(zhuǎn)時(shí)間程序流程圖總體流程圖詳細(xì)流程圖NY判斷Alltime是否為0結(jié)束NY=比較兩個(gè)進(jìn)程所需占用的CPU時(shí)間前者優(yōu)先級(jí)是小于還是等于后者改變進(jìn)程相關(guān)數(shù)值的大小依次執(zhí)行位于前面的進(jìn)程交換位置前者大于后者?依次比較相鄰兩個(gè)進(jìn)程的優(yōu)先級(jí)開始 3、作業(yè)時(shí)間表作業(yè)到達(dá)時(shí)間服務(wù)時(shí)間開始時(shí)間完成時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間10200202013812021131324132134302.31418200342342161.08平均周轉(zhuǎn)時(shí)間 T=(20+21+34+216)/4ms=72.75ms平均帶權(quán)周轉(zhuǎn)時(shí)間
11、W=(1+13+2.31+1.08)/4ms=4.3475ms4、程序源代碼#include struct sjf /定義進(jìn)程的結(jié)構(gòu)體char name10; /進(jìn)程名float arrivetime; /到達(dá)時(shí)間float servicetime; /服務(wù)時(shí)間float starttime; /開始時(shí)間float finishtime; /完成時(shí)間float zztime; /周轉(zhuǎn)時(shí)間float dqzztime; /帶權(quán)周轉(zhuǎn)時(shí)間;sjf b100; /定義短作業(yè)優(yōu)先算法進(jìn)程的最大數(shù)量void Sinput(sjf *p,int N) /輸入函數(shù)int i;printf(輸入進(jìn)程的名稱、到達(dá)
12、時(shí)間、服務(wù)時(shí)間:(例如: x 0 100)n);for(i=0;i=N-1;i+)printf(輸入第%d進(jìn)程的名稱、到達(dá)時(shí)間、服務(wù)時(shí)間:,i+1);scanf(%s%f%f,&,&pi.arrivetime,&pi.servicetime);void SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)/輸出函數(shù)int k;printf(n執(zhí)行順序:n);printf(%s,);for(
13、k=1;kN;k+)printf(-%s,); printf(n進(jìn)程名tarrivetservicetstarttfinishtzztdqzzn); for(k=0;k=N-1;k+)printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftnn,,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime);void Ssort(sjf *p,int N) /按短作業(yè)優(yōu)先算法排序for(int i=1;i=N-1;i+)for(int
14、j=1;j=i;j+) if(pi.servicetimepj.servicetime) sjf temp;temp=pi;pi=pj;pj=temp; void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N)/運(yùn)行結(jié)果int k;for(k=0;k=N-1;k+)if(k=0)pk.starttime=pk.arrivetime;pk.finishtime=pk.arrivetime+pk.service
15、time;elsepk.starttime=pk-1.finishtime; /開始時(shí)間=前一個(gè)進(jìn)程的完成時(shí)間pk.finishtime=pk-1.finishtime+pk.servicetime; /結(jié)束時(shí)間=前一個(gè)進(jìn)程的完成時(shí)間+現(xiàn)在進(jìn)程的服務(wù)時(shí)間for(k=0;k=N-1;k+)pk.zztime=pk.finishtime-pk.arrivetime; /周轉(zhuǎn)時(shí)間=完成時(shí)間-到達(dá)時(shí)間pk.dqzztime=pk.zztime/pk.servicetime; /帶權(quán)周轉(zhuǎn)時(shí)間=周轉(zhuǎn)時(shí)間/服務(wù)時(shí)間void SJF(sjf *p,int N)float arrivetime=0,servic
16、etime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;Ssort(p,N); Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); void main() /主函數(shù)int M;printf(-短作業(yè)優(yōu)先調(diào)度算法-n);printf(輸入進(jìn)程數(shù):);scanf(%d,&M);Sinput(b,M);SJF(b,M)
17、;運(yùn)行結(jié)果優(yōu)先級(jí)調(diào)度算法實(shí)驗(yàn)提示進(jìn)程控制塊結(jié)構(gòu)char name20; /進(jìn)程名稱 int priority; /優(yōu)先級(jí)數(shù) int gettime; /到達(dá)時(shí)間 float dotime; /服務(wù)時(shí)間 int starttime; /開始時(shí)間 int finishtime; /完成時(shí)間 float turntime; /周轉(zhuǎn)時(shí)間 float ptime; /帶權(quán)周轉(zhuǎn)時(shí)間作業(yè)時(shí)間表進(jìn)程到達(dá)時(shí)間服務(wù)時(shí)間優(yōu)先級(jí)開始時(shí)間完成時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間A0330331B265318162.67C4314731D65271261.2E824121463程序源代碼#include#include struct
18、 process /進(jìn)程結(jié)構(gòu)體 char name20; /進(jìn)程名稱 int priority; /優(yōu)先級(jí)數(shù) int gettime; /到達(dá)時(shí)間 float dotime; /服務(wù)時(shí)間 int starttime; /開始時(shí)間 int finishtime; /完成時(shí)間 float turntime; /周轉(zhuǎn)時(shí)間 float ptime; /帶權(quán)周轉(zhuǎn)時(shí)間;int n; /進(jìn)程的個(gè)數(shù)float averageturntime,averageptime; /平均周轉(zhuǎn)時(shí)間和平均加權(quán)周轉(zhuǎn)時(shí)間 void GetInProcess(process *pp) /對(duì)進(jìn)程數(shù)組進(jìn)行初始化 cout進(jìn)程名稱(字母
19、) 優(yōu)先級(jí)數(shù) 到達(dá)時(shí)間 服務(wù)時(shí)間endl; for(int i=0;in;i+) cout進(jìn)程i+1; cinppi.priority; cinppi.gettime; cinppi.dotime; cout已經(jīng)輸入完畢.您剛才輸入的內(nèi)容如下:endl; cout-endl; cout進(jìn)程名稱 優(yōu)先級(jí)數(shù) 到達(dá)時(shí)間 服務(wù)時(shí)間endl; cout-endl; for(int j=0;jn;j+) coutsetw(4); coutsetw(9)ppj.priority; coutsetw(9)ppj.gettime; coutsetw(9)ppj.dotime; c
20、outendl; cout-endl; coutendl; void ProcessPriority(process *pp) /對(duì)此進(jìn)程數(shù)組按優(yōu)先級(jí)從小到大排序,級(jí)數(shù)越小優(yōu)先級(jí)越高。 for(int i=0;in-1;i+) int k=i; for(int j=k+1;jppj.priority) k=j; process t; t=ppk; ppk=ppi; ppi=t; void PrintProcess(process *pp) /輸出排序后的諸進(jìn)程 float s1,s2,sum1=0,sum2=0; /sum1表示所有進(jìn)程周轉(zhuǎn)時(shí)間之和,sum2表示所有進(jìn)程加權(quán)周轉(zhuǎn)時(shí)間之和。 cout-endl; cout進(jìn)程名稱 優(yōu)先級(jí)數(shù) 到達(dá)時(shí)間 服務(wù)時(shí)間 開始時(shí)間 完成時(shí)間 周轉(zhuǎn)時(shí)間 加權(quán)周轉(zhuǎn)時(shí)間endl; cout-endl; pp0.starttime=pp0.gettime; pp0.finishtime=pp0.starttime+pp0.dotime; pp0.turntime=pp0.finishtime-pp0.gettime; pp0.ptime=pp0.turntime/pp0.dotime; for(int i=1;in;i+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 展會(huì)宣傳推廣合同(2篇)
- 小賣鋪?zhàn)赓U合同(2篇)
- 2025年度建筑密封硅酮膠招標(biāo)采購(gòu)合同3篇
- 二零二五年度智慧城市物聯(lián)網(wǎng)設(shè)備采購(gòu)合同2篇
- 二零二五版果園果樹種植技術(shù)指導(dǎo)與承包合同3篇
- 2024版短期貸款合同范例3篇
- 二零二五年度消防工程監(jiān)理合同2篇
- 二零二五年度建筑工程項(xiàng)目招投標(biāo)與合同履約擔(dān)保服務(wù)合同3篇
- 二零二五版股權(quán)代持糾紛調(diào)解與風(fēng)險(xiǎn)防范合同5篇
- 二零二五年度不動(dòng)產(chǎn)權(quán)屬轉(zhuǎn)移擔(dān)保合同3篇
- 薪酬與福利管理實(shí)務(wù)-習(xí)題答案 第五版
- 廢舊物資處置申請(qǐng)表
- GB/T 37234-2018文件鑒定通用規(guī)范
- GB/T 31888-2015中小學(xué)生校服
- 質(zhì)量檢查考核辦法
- 云南省普通初中學(xué)生成長(zhǎng)記錄-基本素質(zhì)發(fā)展初一-初三
- 2023年系統(tǒng)性硬化病診斷及診療指南
- 外科醫(yī)師手術(shù)技能評(píng)分標(biāo)準(zhǔn)
- 《英語教師職業(yè)技能訓(xùn)練簡(jiǎn)明教程》全冊(cè)配套優(yōu)質(zhì)教學(xué)課件
- 采購(gòu)控制程序
- 六年級(jí)上冊(cè)數(shù)學(xué)簡(jiǎn)便計(jì)算題200題專項(xiàng)練習(xí)
評(píng)論
0/150
提交評(píng)論