實驗一處理機調(diào)度實驗報告_第1頁
實驗一處理機調(diào)度實驗報告_第2頁
實驗一處理機調(diào)度實驗報告_第3頁
實驗一處理機調(diào)度實驗報告_第4頁
實驗一處理機調(diào)度實驗報告_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、實驗一處理機調(diào)度一、實驗內(nèi)容選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度。二、實驗目的多道系統(tǒng)中,當就緒進程數(shù)大于處理機數(shù)時,須按照某種策略決定哪些進程優(yōu)先占用處理機。本實驗模擬實現(xiàn)處理機調(diào)度,以加深了解處理機調(diào)度的工作。三、實驗題目1 、設計一個按優(yōu)先權(quán)調(diào)度算法實現(xiàn)處理機調(diào)度的程序;2 、設計按時間片輪轉(zhuǎn)實現(xiàn)處理機調(diào)度的程序。PCB內(nèi)容要求:進程名/PID;要求運行時間(單位時間);優(yōu)先權(quán);狀態(tài):PCB指針;1、可隨機輸入若干進程,并按優(yōu)先權(quán)排序;2、從就緒隊首選進程運行:優(yōu)先權(quán)-1要求運行時間-1要求運行時間=0時,撤銷該進程3、重新排序,進行下輪調(diào)度;源代碼:#include<stdio.h&

2、gt;#include<stdlib.h>#include<string.h>#include<windows.h>typedefstructpcb(charPID50;intneedTime;/需要運行時間intpriority;/優(yōu)先權(quán)charstate20;/進程狀態(tài)structpcb*next;PCB;typedefstruct(PCB*front;PCB*rear;ProcessQueue;voidSelectAlgorithm();voidCreateQProcess(ProcessQueue&Q,char*,inttime,intpri

3、,char*);voidProcessSchedule();voidInitQueue(ProcessQueue&Q);voidvisitQueue(ProcessQueue&Q);boolRunProcess(PCE*rp,ProcessQueue&Q);boolNonPreemptivePriority(ProcessQueue&Q);/琲搶占式優(yōu)先權(quán)調(diào)度voiddelProcess(PCE*delp);boolRunProcessPreem(PCBrp,ProcessQueue&Q);/搶占式優(yōu)先執(zhí)行進程boolPreemptivePriority

4、(ProcessQueue&Q);voidRR(ProcessQueue&Q);intmain()(intiSel;inti=0;SelectAlgorithm();ProcessQueuereadyQ;就緒進程隊列PCBnewpcb;InitQueue(readyQ);printf("請選擇調(diào)度算法:");do(scanf("%d”,&iSel);while(!(iSel=1|iSel=2|iSel=3);while(i<3)(printf("請輸入要創(chuàng)建的進程:n");fflush(stdin);gets(ne

5、wpcb.PID);fflush(stdin);scanf("%d”,&newpcb.needTime);fflush(stdin);scanf("%d”,&newpcb.priority);fflush(stdin);gets(newpcb.state);fflush(stdin);CreateQProcess(reayQ,newpcb.PID,newpcb.needTime,newpcb.priority,newpcb.state);printf("創(chuàng)建了一個進程n");+i;visitQueue(reacyQ);/顯示的是各個進程的

6、優(yōu)先權(quán)switch(iSel)case 1:while(NonPreemptivePriority(readyQ);/非搶占優(yōu)先權(quán)調(diào)度break;case 2:PreemptivePriority(readyQ);/搶占式優(yōu)先權(quán)調(diào)度break;case 3:RR(readyQ);break;return0;voidSelectAlgorithm()printf("1.非搶占式優(yōu)先權(quán)調(diào)度n");printf("2.搶占式優(yōu)先權(quán)調(diào)度n");printf("3.時間片輪轉(zhuǎn)調(diào)度n");voidInitQueue(ProcessQueue&am

7、p;Q)/胞始化進程隊列Q.front=Q.rear=(PCB*)malloc(sizeof(PCB);if(!Q.front)exit(-1);Q.front->next=NULL;voidCreateQProcess(ProcessQueue&Q,char*pid,inttime,intpri,char*st)/指定進程入就緒隊列,將優(yōu)先權(quán)高的插在隊列前面PCB*p=(PCB*)malloc(sizeof(PCB);if(!p)exit(-1);strcpy(p->PID,pid);p->needTime=time;p->priority=pri;strcp

8、y(p->state,st);p->next=NULL;PCB*q=Q.front->next,*01d=Q.front;if(!q)/如果原隊列為空Q.rear->next=p;Q.rear=p;/q=NULLelse或口果原隊列不為空for(;q!=NULL;)if(p->priority>q->priority)old->next=p;p->next=q;return;q=q->next;old=old->next;if(q=NULL)Q.rear->next=p;Q.rear=q;/q=NULLvoidProces

9、sSchedule()voidvisitQueue(ProcessQueue&Q)/傷問進程隊列PCB*p=(PCB*)malloc(sizeof(PCB);if(!p)exit(-1);p=Q.front->next;while(p!=NULL)printf("%d,”,p->priority);p=p->next;printf("n");inti=0;boolPreemptivePriority(ProcessQueue&Q)PCB*rprocess;if(!Q.front->next)printf("就緒隊列

10、中沒有進程可以調(diào)度!n");returnfalse;elserprocess=Q.front->next;/微擇優(yōu)先權(quán)最高的進程Q.front->next=Q.front->next->next;/將進程移除就緒隊列while(rprocess!=NULL)/搶占式優(yōu)先調(diào)度RunProcessPreem(rprocess,Q);if(rprocess->needTime=0)delProcess(rprocess);if(rprocess=Q.front->next)=NULL)printf("就緒隊列中沒有進程可以調(diào)度!n")

11、;returnfalse;elseQ.front->next=Q.front->next->next;continue;if(Q.front->next!=NULL)if(rprocess->priority<Q.front->next->priority)/判斷運行了1個時間后還是否具有最高優(yōu)先權(quán)/*rprocess->next=Q.front->next->next;/正在運行中的進程因為優(yōu)先權(quán)降低,重新進入就緒隊列temp=Q.front->next;Q.front->next=rprocess;rproces

12、s=temp;rproces嘛存運彳進程*/CreateQProcess(Q,rprocess->PID,rprocess->neT(me,rprocess->priority,rprocess->state);/正在運行中的進程因為優(yōu)先權(quán)降低,重新進入就緒隊列rprocess=Q.front->next;Q.front->next=Q.front->next->next;returntrue;boolNonPreemptivePriority(ProcessQueue&Q)/HF搶占式優(yōu)先權(quán)調(diào)度PCB*rprocess;/存放要調(diào)度運行

13、的進程if(!Q.front->next)printf("就緒隊列中沒有進程可以調(diào)度!n");returnfalse;elserprocess=Q.front->next;Q.front->next=Q.front->next->next;/已經(jīng)調(diào)度,從就緒隊列中刪除進程if(RunProcess(rprocess,Q)delProcess(rprocess);printf("就緒隊列狀態(tài):n");visitQueue(Q);returntrue;boolRunProcess(PCBfrp,ProcessQueue&

14、Q)儆行進程while(rp->needTime)printf("進程s正在運行.n",rp->PID);printf("PID50tneedTimetprioritytstate20n");printf("%st%dtt%dtt%sn",rp->PID,rp->needTime,rp->priority,rp->state);Sleep(1000);-rp->needTime;returntrue;)boolRunProcessPreem(PCBrp,ProcessQueue&Q)/

15、胎占式優(yōu)先,RR執(zhí)行進程(printf("進程%s正在運行.n",rp->PID);printf("PID50tneedTimetprioritytstate20n");printf("%st%dtt%dtt%sn",rp->PID,rp->needTime,rp->priority,rp->state);Sleep(1000);-rp->needTime;-rp->priority;returntrue;)voiddelProcess(PCBdelp)/撤銷進程(free(delp);)vo

16、idRR(ProcessQueue&Q)(PCB*running=Q.front->next;PCB*old=Q.front;while(Q.front->next!=NULL)(if(running)(RunProcessPreem(rnning,Q);if(running->needTime=0)/撤銷進程(old->next=running->next;delProcess(ruining);running=old->next;continue;)old=old->next;running=running->next;)else(o

17、ld=Q.front;running=old->next;))printf("就緒隊列中沒有進程可以調(diào)度!n");)以下是使用時間片輪轉(zhuǎn)算法的一次執(zhí)行:選擇算法3:ID仁,*K:Jimior匚.'ar掾件率統(tǒng)1=».口式無灰蠲法優(yōu)先轉(zhuǎn)算進程輸入,此處輸入1,1,1,1,2,2,2,2,3,3,3,3測試。下面是時間片輪轉(zhuǎn)法的調(diào)度結(jié)果:arC江sA操件浜繞1力土1.nJ-J口12£7敘建F一個進程進程正在運行,PID(50need!incprioritystatoESBl3333進程2止仕運行.PJDL50needTineppioi'itVstateL202222快程UE在運行P1DL5QJneed!ineprici'itiistateL201111進程3正在運行.PDIDOnif?edT:i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論