




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)n 實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問題,加深對(duì)進(jìn)程調(diào)度的理解。2利用程序設(shè)計(jì)語言編寫算法,模擬實(shí)現(xiàn)先到先服務(wù)算法FCFS、輪轉(zhuǎn)調(diào)度算法RR、最短作業(yè)優(yōu)先算法SJF、優(yōu)先級(jí)調(diào)度算法PRIOR、最短剩余時(shí)間優(yōu)先算法SRTF。3進(jìn)行算法評(píng)價(jià),計(jì)算平均等待時(shí)間和平均周轉(zhuǎn)時(shí)間。n 實(shí)驗(yàn)內(nèi)容及結(jié)果1先來先服務(wù)算法2輪轉(zhuǎn)調(diào)度算法3. 優(yōu)先級(jí)調(diào)度算法4. 最短時(shí)間優(yōu)先算法5. 最短剩余時(shí)間優(yōu)先算法n 實(shí)驗(yàn)總結(jié)在此次模擬過程中,將SRTF單獨(dú)拿了出來用指針表示,而其余均用數(shù)組表示。n 完整代碼【Srtf.cpp代碼如下:】/最短剩余時(shí)間優(yōu)先算法的
2、實(shí)現(xiàn)#include #include #include typedef structint remain_time;/進(jìn)程剩余執(zhí)行時(shí)間int arrive_time;/進(jìn)程到達(dá)時(shí)間int Tp;/進(jìn)入就緒隊(duì)列的時(shí)間int Tc;/進(jìn)入執(zhí)行隊(duì)列的時(shí)間int To;/進(jìn)程執(zhí)行結(jié)束的時(shí)間int number;/進(jìn)程編號(hào)Process_Block;/定義進(jìn)程模塊typedef struct _QueueProcess_Block PB;struct _Queue *next;_Block,*Process;/定義一個(gè)進(jìn)程模塊隊(duì)列中結(jié)點(diǎn)typedef struct Process head;/隊(duì)列頭指
3、針Process end;/隊(duì)列尾指針Process_Queue;/進(jìn)程隊(duì)列Process_QueuePQ;/定義一個(gè)全局隊(duì)列變量intt;/全局時(shí)間ProcessRun_Now;/當(dāng)前正在運(yùn)行的進(jìn)程,作為全局變量void InitQueue(Process_Queue PQ)PQ.head -next = NULL;PQ.end-next = PQ.head;/*初始化隊(duì)列*/int IsEmpty(Process_Queue PQ)if(PQ.end-next = PQ.head)return 1;/隊(duì)列空的條件為頭指針指向尾指針并且尾指針指向頭指針elsereturn 0;/*判定隊(duì)列是
4、否為空隊(duì)列*/void EnQueue(Process_Queue PQ,Process P)Process temp =(Process)malloc(sizeof(_Block);temp = PQ.end;temp-next-next = P;PQ.end-next = P;/*插入隊(duì)列操作*/Process DeQueue(Process_Queue PQ)if(IsEmpty(PQ)return NULL;Process temp = PQ.head-next;PQ.head-next= temp -next;if(PQ.end-next = temp)PQ.end-next = P
5、Q.head;return temp;/*出列操作*/Process ShortestProcess(Process_Queue PQ)if(IsEmpty(PQ)/如果隊(duì)列為空,返回if(!Run_Now)return NULL;elsereturn Run_Now;Process temp,shortest,prev;int min_time;if(Run_Now)/如果當(dāng)前有進(jìn)程正在執(zhí)行,shortest = Run_Now; /那么最短進(jìn)程初始化為當(dāng)前正在執(zhí)行的進(jìn)程,min_time = Run_Now-PB.remain_time;else/如果當(dāng)前沒有進(jìn)程執(zhí)行,shortest =
6、 PQ.head-next;/則最短進(jìn)程初始化為隊(duì)列中第一個(gè)進(jìn)程min_time = PQ.head-next-PB.remain_time;temp = PQ.head;prev = temp;while(temp-next)if(temp-next-PB.remain_time next;/則保存當(dāng)前進(jìn)程,min_time = shortest-PB.remain_time;prev=temp;/及其前驅(qū)temp=temp-next;if(shortest = PQ.end-next)/如果最短剩余時(shí)間進(jìn)程是隊(duì)列中最后一個(gè)進(jìn)程,PQ.end-next = prev;/則需要修改尾指針指向其
7、前驅(qū)prev-next = shortest-next;/修改指針將最短剩余時(shí)間進(jìn)程插入到隊(duì)頭return shortest;/*調(diào)度最短剩余時(shí)間的進(jìn)程至隊(duì)頭*/void Run()Run_Now-PB.remain_time-;/某一時(shí)間運(yùn)行它的剩余時(shí)間減return;/*運(yùn)行函數(shù)*/void Wait()return ;int sum(int array,int n)int i,sum=0;for(i=0;in;i+)sum+=arrayi;return sum;int main()PQ.head= (Process)malloc(sizeof(_Block);PQ.end= (Proce
8、ss)malloc(sizeof(_Block);Run_Now= (Process)malloc(sizeof(_Block);Run_Now=NULL;InitQueue(PQ);int i,N,Total_Time=0;/Total_Time為所有進(jìn)程的執(zhí)行時(shí)間之和printf(請(qǐng)輸入計(jì)算機(jī)中的進(jìn)程數(shù)目:n);scanf(%d,&N);Process *P,temp;P = (Process*)malloc(N*sizeof(Process);int *wt,*circle_t;wt=(int*)malloc(N*sizeof(int);circle_t=(int*)malloc(N*s
9、izeof(int);for(i=0;iPB.number=i+1;Pi-next=NULL;wti=0;circle_ti=0;printf(輸入第%d個(gè)進(jìn)程的到達(dá)時(shí)間及剩余執(zhí)行時(shí)間:n,i+1);scanf(%d %d,&Pi-PB.arrive_time,&Pi-PB.remain_time);for(i=0;iPB.remain_time;printf(n進(jìn)程按順序運(yùn)行依次為:n);i=0;int k=0;for(t=0;t+)if(Run_Now)/如果當(dāng)前有進(jìn)程正在執(zhí)行Run();if(t = Pi-PB.arrive_time)/如果當(dāng)前時(shí)間正好有進(jìn)程進(jìn)入if(Pi-PB.rem
10、ain_time PB.remain_time)temp= Pi;Pi= Run_Now;Run_Now = temp;/則調(diào)度它至運(yùn)行隊(duì)列中,Run_Now-PB.Tp=t;Run_Now-PB.Tc=t;wtRun_Now-PB.number-1+=Run_Now-PB.Tc-Run_Now-PB.Tp;printf(%d ,Run_Now-PB.number);EnQueue(PQ,Pi);/并將當(dāng)前運(yùn)行進(jìn)程重新插入隊(duì)列中Pi-PB.Tp=t;k+;i=(i+1)(N-1)?(N-1):(i+1);if(Run_Now-PB.remain_time = 0)/如果當(dāng)前進(jìn)程運(yùn)行結(jié)束,Run
11、_Now-PB.To=t;/進(jìn)程運(yùn)行結(jié)束的時(shí)間circle_tRun_Now-PB.number-1 +=t-Run_Now-PB.arrive_time;free(Run_Now);/則將它所占資源釋放掉,Run_Now =NULL;/并修改Run_Now為NULLRun_Now = ShortestProcess(PQ);/從就緒隊(duì)列中調(diào)出最短剩余時(shí)間進(jìn)程至隊(duì)頭,if(!Run_Now)/如果隊(duì)列為空,轉(zhuǎn)為等待狀態(tài)if(IsEmpty(PQ) & k = N) break;Wait();continue;elseRun_Now-PB.Tc=t;wtRun_Now-PB.number-1+=
12、Run_Now-PB.Tc-Run_Now-PB.Tp;printf(%d ,Run_Now-PB.number);else/如果當(dāng)前運(yùn)行進(jìn)程為空,那么if(t = Pi-PB.arrive_time)/如果正好這時(shí)有進(jìn)程入隊(duì)k+;EnQueue(PQ,Pi);Run_Now = DeQueue(PQ);/則直接被調(diào)入運(yùn)行隊(duì)列中Run_Now-PB.Tp=t;Run_Now-PB.Tc=t;printf(%d ,Run_Now-PB.number);i=(i+1)(N-1)?(N-1):(i+1);elseWait();continue;printf(n);printf(平均等待時(shí)間是:n%f
13、n,(float)sum(wt,N)/N);printf(平均周轉(zhuǎn)時(shí)間是:n%fn,(float)sum(circle_t,N)/N);return 0;/【Process.cpp代碼如下:】#include#includeusing namespace std;class Processpublic:string ProcessName; / 進(jìn)程名字 int Time; / 進(jìn)程需要時(shí)間 int leval; / 進(jìn)程優(yōu)先級(jí) int LeftTime; / 進(jìn)程運(yùn)行一段時(shí)間后還需要的時(shí)間; void Copy ( Process proc1, Process proc2); / 把proc
14、2賦值給proc1void Sort( Process pr, int size) ; / 此排序后按優(yōu)先級(jí)從大到小排列void sort1(Process pr, int size) ; / 此排序后按需要的cpu時(shí)間從小到大排列void Fcfs( Process pr, int num, int Timepice); / 先來先服務(wù)算法void TimeTurn( Process process, int num, int Timepice); / 時(shí)間片輪轉(zhuǎn)算法void Priority( Process process, int num, int Timepice); / 優(yōu)先級(jí)算法
15、void main() int a; coutendl; cout 選擇調(diào)度算法:endl; cout 1: FCFS 2: 時(shí)間片輪換 3: 優(yōu)先級(jí)調(diào)度 4: 最短作業(yè)優(yōu)先 5: 最短剩余時(shí)間優(yōu)先a; const int Size =30; Process processSize ; int num; int TimePice; cout 輸入進(jìn)程個(gè)數(shù):num; cout 輸入此進(jìn)程時(shí)間片大小: TimePice;for( int i=0; i num; i+) string name; int CpuTime; int Leval; cout 輸入第 i+1 個(gè)進(jìn)程的名字、cpu時(shí)間和優(yōu)先
16、級(jí):name; cin CpuTimeLeval; processi.ProcessName =name; processi.Time =CpuTime; processi.leval =Leval; coutendl;for ( int k=0;knum;k+) processk.LeftTime=processk.Time ;/對(duì)進(jìn)程剩余時(shí)間初始化 cout ( 說明: 在本程序所列進(jìn)程信息中,優(yōu)先級(jí)一項(xiàng)是指進(jìn)程運(yùn)行后的優(yōu)先級(jí)! ); coutendl; coutendl; cout進(jìn)程名字共需占用CPU時(shí)間 還需要占用時(shí)間 優(yōu)先級(jí) 狀態(tài)endl;if(a=1) Fcfs(process,
17、num,TimePice);else if(a=2) TimeTurn( process, num, TimePice);else if(a=3) Sort( process, num); Priority( process , num, TimePice); else / 最短作業(yè)算法,先按時(shí)間從小到大排序,再調(diào)用Fcfs算法即可 sort1(process,num); Fcfs(process,num,TimePice); void Copy ( Process proc1, Process proc2) proc1.leval =proc2.leval ; proc1.ProcessNa
18、me =proc2.ProcessName ; proc1.Time =proc2.Time ;void Sort( Process pr, int size) /以進(jìn)程優(yōu)先級(jí)高低排序/ 直接插入排序 for( int i=1;i0 & temp.levalsize/2;d-) Process temp; temp=pr d; pr d = pr size-d-1; pr size-d-1=temp; / 此排序后按優(yōu)先級(jí)從大到小排列/* 最短作業(yè)優(yōu)先算法的實(shí)現(xiàn)*/void sort1 ( Process pr, int size) / 以進(jìn)程時(shí)間從低到高排序/ 直接插入排序 for( int
19、 i=1;i0 & temp.Time prj-1.Time ) prj = prj-1; j-; prj = temp; /* 先來先服務(wù)算法的實(shí)現(xiàn)*/void Fcfs( Process process, int num, int Timepice) / process 是輸入的進(jìn)程,num是進(jìn)程的數(shù)目,Timepice是時(shí)間片大小while(true) if(num=0) cout 所有進(jìn)程都已經(jīng)執(zhí)行完畢!endl; exit(1); if(process0.LeftTime=0) cout 進(jìn)程process0.ProcessName 已經(jīng)執(zhí)行完畢!endl; for (int i=0
20、;inum;i+) processi=processi+1; num-; else if(processnum-1.LeftTime=0) cout 進(jìn)程processnum-1.ProcessName 已經(jīng)執(zhí)行完畢!endl; num-; else coutendl; /輸出正在運(yùn)行的進(jìn)程 process0.LeftTime=process0.LeftTime- Timepice; process0.leval =process0.leval-1; cout process0.ProcessName process0.Time ; coutprocess0.LeftTime process0
21、.leval 運(yùn)行; coutendl; for(int s=1;snum;s+) cout processs.ProcessName processs.Time ; coutprocesss.LeftTime processs.leval 等待endl; ; / else coutendl; system( pause); coutendl; / while /* 時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)現(xiàn)*/void TimeTurn( Process process, int num, int Timepice)while(true) if(num=0) cout 所有進(jìn)程都已經(jīng)執(zhí)行完畢!endl; exi
22、t(1); if(process0.LeftTime=0) cout 進(jìn)程process0.ProcessName 已經(jīng)執(zhí)行完畢!endl; for (int i=0;inum;i+) processi=processi+1; num-; if( processnum-1.LeftTime =0 ) cout 進(jìn)程 processnum-1.ProcessName 已經(jīng)執(zhí)行完畢! 0) coutendl; /輸出正在運(yùn)行的進(jìn)程 process0.LeftTime=process0.LeftTime- Timepice; process0.leval =process0.leval-1; cou
23、t process0.ProcessName process0.Time ; coutprocess0.LeftTime process0.leval 運(yùn)行; coutendl; for(int s=1;snum;s+) cout processs.ProcessName processs.Time ; coutprocesss.LeftTime processs.leval; if(s=1) cout 就緒endl; else cout 等待endl; Process temp; temp = process0; for( int j=0;jnum;j+) processj = processj+1; processnum-1 = temp; / else coutendl; system( pause); coutendl; / while /* 優(yōu)先級(jí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)勞動(dòng)合同范本:全員適用版
- 追討合同違約金起訴書范本
- 快遞企業(yè)委托代理合同
- 汽車保險(xiǎn)合同模板
- 土地租賃經(jīng)營權(quán)合同書樣本
- 技術(shù)研發(fā)勞動(dòng)合同規(guī)定
- 機(jī)織服裝的綠色包裝設(shè)計(jì)考核試卷
- 無線傳輸技術(shù)在野生動(dòng)物保護(hù)中的應(yīng)用考核試卷
- 方便食品市場(chǎng)趨勢(shì)與消費(fèi)者需求分析考核試卷
- 批發(fā)商客戶關(guān)系持續(xù)優(yōu)化策略研究考核試卷
- 頸動(dòng)脈斑塊預(yù)防課件
- 成品糧儲(chǔ)藏技術(shù)規(guī)范
- 【上市公司財(cái)務(wù)造假驅(qū)動(dòng)因素探究文獻(xiàn)綜述3100字】
- 20cr球化退火工藝
- 2024年遼寧省沈陽市中考數(shù)學(xué)模擬練習(xí)卷(含答案)
- 第一單元《華夏古韻》-原始狩獵圖 課件 2023-2024學(xué)年人教版初中音樂八年級(jí)下冊(cè)
- 主題班會(huì)調(diào)整心態(tài)緩解壓力課件
- 解讀民法典之物權(quán)編實(shí)用教育課件
- 通用電子嘉賓禮薄
- 倉庫保管工國家職業(yè)標(biāo)準(zhǔn)
- 酒水知識(shí)與酒吧管理課件
評(píng)論
0/150
提交評(píng)論