




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗三進程調度一實驗目的加深理解并模擬實現(xiàn)進程(作業(yè))調度算法。1)熟悉常用的進程調度算法,如FCFS、SPF、FPF、高響應比優(yōu)先、時間片輪轉;2)結合所學的數(shù)據(jù)結構及編程知識,選擇三種進程調度算法予以實現(xiàn)。二實驗屬性該實驗為設計性實驗。三實驗儀器設備及器材普通PC386以上微機四實驗要求1) 編程實現(xiàn)單處理機系統(tǒng)中的進程調度,要求從FCFS、SPF、FPF、高響應比優(yōu)先、時間片輪轉算法中至少選擇三個;2) 最后編寫主函數(shù)對所做工作進行測試。實驗前應復習實驗中所涉及的理論知識和算法,針對實驗要求完成基本代碼編寫并完成預習報告、實驗中認真調試所編代碼并進行必要的測試、記錄并分析實驗結果。實驗后
2、認真書寫符合規(guī)范格式的實驗報告(參見附錄A),并要求用正規(guī)的實驗報告紙和封面裝訂整齊,按時上交。五、需求分析1、1) 輸入的形式和輸入值的范圍輸入值:進程個數(shù)Num 范圍:0<Num<=100 依次輸入Num個進程的到達時間 范圍: 依次輸入Num個進程的服務時間 范圍: 輸入要使用的算法(A-FCFS,B-SJF) 2) 程序所能達到的功能輸入進程個數(shù)Num,每個進程到達時間ArrivalTimei,服務時間ServiceTimei。采用先來先服務FCFS或者短作業(yè)優(yōu)先SJF進程調度算法進行調度,計算每個進程的完成時間、周轉時間和帶權周轉時間,并且統(tǒng)計Num個進程的平均周轉時間和
3、平均帶權周轉時間。2、高優(yōu)先權優(yōu)先調度算法1)輸入進程數(shù)和進程的優(yōu)先權要求服務時間后初始化隊列。2)W為等待狀態(tài);R為運行狀態(tài)。按照高優(yōu)先權優(yōu)先原則進行進程的調度和執(zhí)行。一步步完成進程的調度和執(zhí)行。六、經驗和體會最高優(yōu)先權優(yōu)先(FPF)調度算法 此算法常被用在批處理系統(tǒng)中,作為作業(yè)調度算法,也作為多種操作系統(tǒng)中的進程調度,還可以用于實時系統(tǒng)中。當其用于作業(yè)調度, 將后備隊列中若干個優(yōu)先權最高的作業(yè)裝入內存。當其用于進程調度時,把處理機分配給就緒隊列中優(yōu)先權最高的進程,可以進一步把該算法分成以下兩種:非搶占式優(yōu)先權算法、搶占式優(yōu)先權調度算法。非搶占式優(yōu)先權算法是指一旦把處理機分配給就緒隊列中優(yōu)先
4、權最高的進城后,該進程變一直執(zhí)行下去直到完成。這種調度算法主要用于批處理系統(tǒng)中,也可以用于某些對實時性要求不高的實時系統(tǒng)中;而搶占式優(yōu)先權算法系統(tǒng)將處理機分配給優(yōu)先權最高點的進程,并執(zhí)行但當在執(zhí)行期間遇到另外一個優(yōu)先權更高的程序的時候就會將處理機的使用權給這個優(yōu)先權比較高的進程,這種調度算法能夠更好的滿足緊迫作業(yè)的要求,常用在要求比較嚴格的實時系統(tǒng)中,以及對性能要求較高的批處理和分時系統(tǒng)找中。通過本次實驗我們深入理解了先來先服務和短進程優(yōu)先進程調度算法的思想,學會高優(yōu)先權調度算法的原理和調度過程、還要能夠熟練運用。七、源程序 1、FCFS、SPF#include<iostream>
5、#include<iomanip>using namespace std;static const int Max=100;int ArrivalTimeMax;/到達時間int ServiceTimeMax;/服務時間int FinishTimeMax;/完成時間int WholeTimeMax;/周轉時間double WeightWholeTimeMax;/帯權周莊時間double AverageWT_FCFS,AverageWT_SJF; /平均周轉時間double AverageWWT_FCFS,AverageWWT_SJF;/平均帯權周轉時間int ServiceTime
6、_SJFMax;/在SJF算法中使用到int Num=0;int NowTime=0;/記錄當前時間double SumWT=0,SumWWT=0;/SumWT用來計算總的周轉時間,SumWWT用來計算總的帯權周轉時間int i;int choice;/記錄選擇 / 先到先服務算法void FCFS()/找最早到達的。cout<<"-FCFS-"<<endl;for(i=0;i<Num;i+)if(ArrivalTimei>NowTime)/假如進程到達的時間比現(xiàn)在已經運行的時間NowTime大,說明在NowTime時刻進程未到達 Now
7、Time=ArrivalTimei;/把進程的到達時間賦給NowTimeNowTime+=ServiceTimei;/把進程的服務時間加到NowTime上FinishTimei=NowTime;/計算完成時間WholeTimei=FinishTimei-ArrivalTimei;/計算周轉時間=完成時間-到達時間WeightWholeTimei=(double)WholeTimei/ServiceTimei;/計算帶權周轉時間=周轉時間/服務時間SumWT+=WholeTimei;/計算總的周轉時間SumWWT+=WeightWholeTimei;/計算總的帯權周轉時間AverageWT_FC
8、FS=SumWT/Num;/平均周轉時間AverageWWT_FCFS=SumWWT/Num;/平均帯權周轉時間for(i=0;i<Num;i+)/依次輸出結果cout<<"時刻"<<FinishTimei-ServiceTimei<<": 進程"<<i+1<<"開始運行。"<<" 其完成時間:"<<FinishTimei<<" 周轉時間:"<<WholeTimei<<s
9、etprecision(3)<<" 帯權周轉時間:"<<WeightWholeTimei<<setprecision(3)<<endl;cout<<"平均周轉時間:"<<AverageWT_FCFS<<endl;cout<<"平均帯權周轉時間:"<<AverageWWT_FCFS<<endl; / 短進程優(yōu)先算法void SJF()/找已經到達的且服務時間最短的進程(假定輸入的進程是按照到達時間先后輸入的)cout&
10、lt;<"-SJF-"<<endl;int min=0;NowTime=ArrivalTime0+ServiceTime0;/計算第一次的NowTImeFinishTime0=NowTime;/計算第一個進程的完成時間ServiceTime_SJF0=1000;/賦初值。cout<<"時刻"<<FinishTime0-ServiceTime0<<": 進程"<<1<<"開始運行。"int allin=0,j,k;for(i=1;i<
11、Num;i+)/進入循環(huán),從第二個到達的進程開始k=1;min=0;if(allin=0)/找到已經到達的進程個數(shù)j=0;while(ArrivalTimej<=NowTime && j<Num)/已經到達的進程j+;if(j>=Num)allin=1;else j=Num;j=j-1;/j是已經到達的進程數(shù)while(k<=j)/從已經到達的進程里找到服務時間最短的進程if(ServiceTime_SJFk=0)/進程的服務時間如果等于0,則跳過該進程k+;else if(ServiceTime_SJFmin>ServiceTime_SJFk)/
12、比較,找到服務時間最短的進程min=k;k+;ServiceTime_SJFmin=0;/找完后置零,便于下一次循環(huán)時使用NowTime+=ServiceTimemin;/累加當前時間FinishTimemin=NowTime;/完成時間for(i=0;i<Num;i+)/計算周轉時間,帶權周轉時間,總的周轉時間和總的帶權周轉時間WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=(double)WholeTimei/ServiceTimei;SumWT+=WholeTimei;SumWWT+=WeightWholeTimei;Ave
13、rageWT_SJF=SumWT/Num;/平均周轉時間AverageWWT_SJF=SumWWT/Num;/平均帶權周轉時間cout<<" 其完成時間:"<<FinishTime0<<" 周轉時間:"<<WholeTime0<<setprecision(3)<<" 帯權周轉時間:"<<WeightWholeTime0<<setprecision(3)<<endl;for(i=1;i<Num;i+)/輸出結果cout<
14、;<"時刻"<<FinishTimei-ServiceTimei<<": 進程"<<i+1<<"開始運行。"<<" 其完成時間:"<<FinishTimei<<" 周轉時間:"<<WholeTimei<<setprecision(3)<<" 帯權周轉時間:"<<WeightWholeTimei<<setprecision(3)&
15、lt;<endl;cout<<"平均周轉時間:"<<AverageWT_SJF<<endl;cout<<"平均帯權周轉時間:"<<AverageWWT_SJF<<endl;void input() / 輸入函數(shù)cout<<"請輸入進程個數(shù):"cin>>Num;while(Num>100|Num<=0)cout<<"進程個數(shù)必須大于0且小于等于100!請重新輸入進程個數(shù):"cin>>
16、;Num;for(i=0;i<Num;i+)cout<<"第"<<i+1<<"個進程的到達時間:"cin>>ArrivalTimei;for(i=0;i<Num;i+)int data=0;cout<<"第"<<i+1<<"個進程的服務時間:"cin>>data;ServiceTimei=data;ServiceTime_SJFi=data;cout<<"-"<<e
17、ndl;cout<<"請選擇要使用的算法(1-FCFS,2-SJF): "cin>>choice;void main()char flag='y'Loop:NowTime=0;SumWT=0;SumWWT=0;/參數(shù)初始化 input();/輸入if(choice=1)FCFS();/調用FCFS算法else if(choice=2)SJF();/調用SJF算法else/輸入有誤,則重新選擇while(1) cout<<"您的選擇有誤!請重新選擇!"<<endl;cout<<&q
18、uot;請選擇要使用的算法(1-FCFS,2-SJF): "cin>>choice;if(choice=1)FCFS();break;else if(choice=2)SJF();break;cout<<endl<<"是否繼續(xù)使用該程序,按'y'或'Y'鍵繼續(xù),按其他任意鍵退出:"cin>>flag;if(flag='y' | flag='Y')goto Loop;2、高優(yōu)先權優(yōu)先調度算法#include "stdio.h" #inc
19、lude "stdlib.h" #define getpch(type) new typestruct pcb /* 定義進程控制塊PCB */ char name10; /進程名 char state; /狀態(tài) int super; /優(yōu)先級 int ntime; /要求服務時間 int rtime; /已運行時間 struct pcb* next; *ready=NULL,*p;typedef struct pcb PCB;void sort(PCB *a) /* 建立對進程進行優(yōu)先級排列函數(shù)*/ PCB *first, *second; int insert=0; i
20、f(ready=NULL)|(a->super)>(ready->super) /*優(yōu)先級最大者,插入隊首*/ a->next=ready; ready=a; else /* 進程比較優(yōu)先級,插入適當?shù)奈恢弥?/ first=ready; second=first->next; while(second!=NULL) if(a->super)>(second->super) /*若插入進程比當前進程優(yōu)先數(shù)大,插入到當前進程前面*/a->next=second; first->next=a; second=NULL; insert=1;
21、 else /*指針后移,尋找插入點*/ first=first->next; second=second->next; if(insert=0) first->next=a;/* 插入進程優(yōu)先數(shù)最低,則插入到隊尾*/ void createpcb() /* 建立進程控制塊函數(shù)*/ int i,num; printf("ttt最高優(yōu)先權優(yōu)先調度算法模擬tn"); printf("n 請輸入進程數(shù)目:"); scanf("%d",&num); for(i=0;i<num;i+) p=getpch(PCB)
22、; printf("n 第%d個進程的名字、優(yōu)先數(shù)及該進程要求服務的時間:",i+1); scanf("%s%d%d",p->name,&p->super,&p->ntime); p->rtime=0; p->state='w' p->next=NULL; sort(p); void display1() /*建立進程顯示函數(shù),用于顯示當前進程*/ printf("n進程名 狀態(tài) 優(yōu)先數(shù) 要求服務的時間 已運行時間 n"); void display2(PCB * p
23、r) printf("%3.5s %7c %6d %12d %10d",pr->name,pr->state,pr->super,pr->ntime,pr->rtime); printf("n"); void check() /* 建立進程查看函數(shù) */ PCB *pr; printf("n"); printf("n");printf("n * 當前正在運行的進程是%s的狀態(tài)如下:n",p->name); display1(); display2(p); pr=read
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車間漏雨點管理制度
- 車間鞋柜室管理制度
- 輪胎工現(xiàn)場管理制度
- 運轉班替崗管理制度
- 進出廠人員管理制度
- 郵政小食堂管理制度
- 部門及安全管理制度
- 配電運行班管理制度
- 酒店弱電房管理制度
- 酒店遲付賬管理制度
- 2025屆上海市浦東新區(qū)高三一模生物試題(解析版)
- 交通設計(Traffic Design)知到智慧樹章節(jié)測試課后答案2024年秋同濟大學
- 現(xiàn)代城市配送中無人配送車的發(fā)展趨勢分析
- 2024年IMO中國國家集訓隊第一階段選拔試題及答案解析
- 《個人防護與職業(yè)健康》課件
- 大學生創(chuàng)業(yè)項目案例路演
- 蘇教版四年級數(shù)學下冊《多邊形的內角和》市級公開課教案
- 安徽省蚌埠市2023-2024學年高一下學期7月期末考試 化學 含解析
- 《陜西省分布的國家重點保護野生植物名錄》
- 口腔拔牙手術知情同意書
- 【蘇教版】2023-2024學年六年級科學上冊期末模擬試卷2
評論
0/150
提交評論