進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)_第1頁
進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)_第2頁
進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)_第3頁
進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)_第4頁
進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、進(jìn)程調(diào)度先來先服務(wù)時(shí)間片輪轉(zhuǎn)法優(yōu)先服務(wù)調(diào)度處理器調(diào)度免費(fèi)下載C或C+/*標(biāo)題:設(shè)計(jì)一:進(jìn)程調(diào)度設(shè)計(jì)目的:進(jìn)程管理是操作系統(tǒng)中的重要功能,用來創(chuàng)建進(jìn)程、撤消進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換,它提供了在可運(yùn)行的進(jìn)程之間復(fù)用CPU的方法。在進(jìn)程管理中,進(jìn)程調(diào)度是核心,因?yàn)樵诓捎枚嗟莱绦蛟O(shè)計(jì)的系統(tǒng)中,往往有若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),當(dāng)就緒進(jìn)程個(gè)數(shù)大于處理器數(shù)目時(shí),就必須依照某種策略決定哪些進(jìn)程優(yōu)先占用處理器。本實(shí)驗(yàn)?zāi)M在單處理器情況下的進(jìn)程調(diào)度,目的是加深對(duì)進(jìn)程調(diào)度工作的理解,掌握不同調(diào)度算法的優(yōu)缺點(diǎn)。設(shè)計(jì)題目:設(shè)計(jì)一個(gè)按先來先服務(wù),算法時(shí)間片輪轉(zhuǎn)法,優(yōu)先數(shù)調(diào)度算法實(shí)現(xiàn)處理器調(diào)度的程序。*/*親愛的同學(xué)們,大

2、家好。歡迎訪問我的百度空間,在此我向大家提供免費(fèi)的資料,這是我們實(shí)習(xí)要做的。主要是因?yàn)槲铱吹胶芏嘞螺d都要金幣,而我自己沒有金幣,不爽?,F(xiàn)在我提供免費(fèi)下載,做個(gè)好人。復(fù)制到VC+寸可能有些格式問題,稍微修改一下就OK了,程序本身不存在問題的。大三第一個(gè)學(xué)期實(shí)習(xí)的哦*/*先來先服務(wù):是一種最簡單的調(diào)度算法,每次調(diào)度都從后備作業(yè)或者進(jìn)程當(dāng)中選擇一個(gè)或者多個(gè)最先進(jìn)入該隊(duì)列的作業(yè)或進(jìn)程,將它們調(diào)入內(nèi)存,為它們分配資源、創(chuàng)建進(jìn)程,然后放入就緒隊(duì)列。當(dāng)調(diào)用FCFSB法時(shí),系統(tǒng)為它們分配處理機(jī),讓它們運(yùn)行。該算法的優(yōu)點(diǎn)是比較利于長作業(yè)(進(jìn)程),而缺點(diǎn)是不利于短作業(yè)(進(jìn)程)。算法時(shí)間片輪轉(zhuǎn)法:系統(tǒng)將所有的就緒進(jìn)

3、程按照先來先服務(wù)的原則排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。當(dāng)執(zhí)行完時(shí)間片時(shí),計(jì)時(shí)器就會(huì)發(fā)出中斷請(qǐng)求,調(diào)度程序就會(huì)停止該進(jìn)程的執(zhí)行,并把它送往就緒隊(duì)列的末尾;然后再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也分配時(shí)間片給它。這樣保證就緒隊(duì)列中的所有進(jìn)程在一個(gè)給定的時(shí)間片當(dāng)中都能夠獲得一個(gè)時(shí)間片的處理機(jī)執(zhí)行時(shí)間。而時(shí)間片的大小最好取適中的,即略大于一次典型的交互所需時(shí)間。優(yōu)先數(shù)調(diào)度算法:該方法又分成兩種算法分支,分別是非搶占式優(yōu)先權(quán)算法和搶占式優(yōu)先權(quán)調(diào)度算法。該算法被調(diào)度時(shí),系統(tǒng)將后備隊(duì)列中選擇若干個(gè)優(yōu)先權(quán)最高的作業(yè)裝入內(nèi)存,開始調(diào)度時(shí),處理機(jī)就會(huì)分配給就緒隊(duì)列

4、中優(yōu)先權(quán)最高的進(jìn)程。非搶占式優(yōu)先權(quán)算法中,處理機(jī)一旦把處理機(jī)分配給就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程后,該進(jìn)程就會(huì)一直執(zhí)行下去,直至完成;除非某事件發(fā)生而使該進(jìn)程放棄處理機(jī),系統(tǒng)才將處理機(jī)分配給另一個(gè)優(yōu)先權(quán)最高的進(jìn)程。而搶占式優(yōu)先權(quán)算法,當(dāng)系統(tǒng)把處理機(jī)分配給優(yōu)先權(quán)最高的進(jìn)程時(shí),讓它執(zhí)行,而在執(zhí)行期間,只要又出現(xiàn)另一個(gè)優(yōu)先權(quán)更高的進(jìn)程,那么進(jìn)程調(diào)度就會(huì)立即停止當(dāng)前進(jìn)程的執(zhí)行,重新將處理機(jī)分配給優(yōu)先權(quán)最高的進(jìn)程。先來先服務(wù)是使用數(shù)組,算法時(shí)間片使用指針,優(yōu)先數(shù)調(diào)度使用數(shù)組。*/*進(jìn)程調(diào)度的C/C+項(xiàng)法實(shí)現(xiàn)*/#include<stdio.h>#include<st

5、ring.h>#include<stdlib.h>/*這是先來先服務(wù)的程序*/structfcfs/定義先來先服務(wù)結(jié)構(gòu)體、參數(shù)charname10;floatdaodatime;/到達(dá)時(shí)間floatfuwutime;/服務(wù)時(shí)間floatkaishitime;/開始時(shí)間floatwanchengtime;/完成時(shí)間floatzhouztime;/周轉(zhuǎn)時(shí)間floatdaiquantime;/帶權(quán)周轉(zhuǎn)時(shí)間;fcfsa100;voidinput(fcfs*p,intN)/構(gòu)造一個(gè)輸入進(jìn)程的信息的函數(shù),定義結(jié)構(gòu)體指針inti;for(i=0;i<=

6、N-1;i+)printf("輸入第個(gè)進(jìn)程的名字、到達(dá)時(shí)間、服務(wù)時(shí)間:n",i+1);scanf("%s%f%f",&,&pi.daodatime,&pi.fuwutime);/把輸入的信息保存到結(jié)構(gòu)體指針?biāo)鶎?duì)應(yīng)的內(nèi)存中/構(gòu)造一個(gè)輸出函數(shù)voidPrint(fcfs*p,floatdaodatime,floatfuwutime,floatkaishitime,floatwanchengtime,floatzhouztime,floatdaiquantime,in

7、tN)intk;printf("執(zhí)行順序:n");printf("%s",);for(k=1;k<N;k+)printf("->%s",);printf("n進(jìn)程的相關(guān)信息如下:n");printf("n名字t到達(dá)t服務(wù)t開始t完成t周轉(zhuǎn)t帶權(quán)周轉(zhuǎn)n");for(k=0;k<=N-1;k+)(printf("%st%-.2ft%-

8、.2ft%-.2ft%-.2ft%-.2ft%-.2ftn",,pk.daodatime,pk.fuwutime,pk.kaishitime,pk.wanchengtime,pk.zhouztime,pk.daiquantime);/題目中加入-.2是保留雙精度的兩位。一般f默認(rèn)保留六位小數(shù)的。voidsort(fcfs*p,intN)/進(jìn)程根據(jù)到達(dá)時(shí)間進(jìn)行排序(for(inti=0;i<=N-1;i+)for(intj=0;j<=i;j+)if(pi.daodatime<pj.daodatime)/如果i的時(shí)間到達(dá)時(shí)間

9、小于j的到達(dá)時(shí)間,就交換(fcfstemp;/在結(jié)構(gòu)體中定義第三個(gè)變量進(jìn)行交換temp=pi;pi=pj;pj=temp;核心的運(yùn)行階段voiddeal(fcfs*p,floatdaodatime,floatfuwutime,floatkaishitime,floatwanchengtime,floatzhouztime,floatdaiquantime,intN)intk;for(k=0;k<=N-1;k+)if(k=0)/K=0,表示第一個(gè)進(jìn)程到達(dá)pk.kaishitime=pk.daodatime;/那么開始時(shí)間=到達(dá)時(shí)間pk.wanchengtime=pk.daodati

10、me+pk.fuwutime;/完成時(shí)間=到達(dá)時(shí)間+服務(wù)時(shí)間elsepk.kaishitime=pk-1.wanchengtime;/下一個(gè)進(jìn)程的開始時(shí)間=上一個(gè)進(jìn)程的完成時(shí)間pk.wanchengtime=pk-1.wanchengtime+pk.fuwutime;/完成時(shí)間=上一個(gè)進(jìn)程的完成時(shí)間+服務(wù)時(shí)間for(k=0;k<=N-1;k+)計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間pk.zhouztime=pk.wanchengtime-pk.daodatime;/周轉(zhuǎn)時(shí)間=完成時(shí)間-至U達(dá)時(shí)間pk.daiquantime=pk.zhouztime/pk.fuwutime;/帶權(quán)周轉(zhuǎn)時(shí)間=周

11、轉(zhuǎn)時(shí)間/服務(wù)時(shí)間voidFCFS(fcfs*p,intN)/定義先來先服務(wù)函數(shù)floatdaodatime=0,fuwutime=0,kaishitime=0,wanchengtime=0,zhouztime=0,daiquantime=0;/初始化變量為0sort(p,N);/聲明排序函數(shù)deal(p,daodatime,fuwutime,kaishitime,wanchengtime,zhouztime,daiquantime,N);/聲明運(yùn)行函數(shù)Print(p,daodatime,fuwutime,kaishitime,wanchengtime,zhouztime,daiquantime

12、,N);/聲明輸出函數(shù)/*這是算法時(shí)間片輪轉(zhuǎn)法的代碼*/*structshijian/定義時(shí)間片的結(jié)構(gòu)體charname;/定義進(jìn)程名intdaodatime;/到達(dá)時(shí)間intfuwutime;/服務(wù)時(shí)間intshengyutime;/乘f余時(shí)間char*state;/所處狀態(tài)structshijian*next;structshijian*time()inta,i;structshijian*head,*rear,*p,*q,*t;/定義隊(duì)首、隊(duì)尾、P是隊(duì)尾指針、Q是隊(duì)首指針和執(zhí)行時(shí)間head=rear=NULL;/初始化隊(duì)首和隊(duì)尾為空printf("請(qǐng)輸入進(jìn)程數(shù)目:&am

13、p;quot;);scanf("%d",&a);for(i=0;i<a;i+)p=(structshijian*)malloc(sizeof(structshijian);/初始化一個(gè)空間給進(jìn)程進(jìn)入printf("輸入第個(gè)進(jìn)程的名字、到達(dá)時(shí)間、服務(wù)時(shí)間:n",i+1);scanf("%s%d%d",&p->name,&p->daodatime,&p->fuwutime)

14、;p->shengyutime=p->fuwutime;p->state="就緒"if(rear=NULL)當(dāng)輸入結(jié)束時(shí),把P的數(shù)據(jù)放到隊(duì)首,以便執(zhí)行下一步head=p;p->next=NULL;rear=p;else否則執(zhí)行時(shí)間就為空,隊(duì)首變成Qt=NULL;q=head;while(q&&q->daodatime<p->daodatime)/當(dāng)Q和Q的到達(dá)時(shí)間小于P的到達(dá)時(shí)間時(shí),把執(zhí)行時(shí)間給Qt=q;q=q->n

15、ext;if(q=head)而當(dāng)Q是隊(duì)首時(shí),則下一個(gè)隊(duì)首變成P,以便每個(gè)進(jìn)程都能夠得到時(shí)間片p->next=head;head=p;elseif(t=rear)/當(dāng)執(zhí)行時(shí)間片到達(dá)隊(duì)尾時(shí)(執(zhí)行完時(shí)),返回給隊(duì)首Prear->next=p;p->next=NULL;rear=p;else否則給隊(duì)首P占用執(zhí)行時(shí)間,P執(zhí)行完后到Qt->next=p;p->next=q;returnhead;/返回隊(duì)首voidoutput(structshijian*head)定義輸出函數(shù)structshijian*p,*t,*r;intnum;pr

16、intf("請(qǐng)輸入時(shí)間片:");scanf("%d",&num);while(head!=NULL)當(dāng)隊(duì)首不為空時(shí),把P給隊(duì)首r=p=head;while(p!=NULL)/把執(zhí)行時(shí)間給隊(duì)首t=head;p->shengyutime=p->shengyutime-num;P的乘U余時(shí)間=乘!|余時(shí)間-時(shí)間片p->state="運(yùn)行"/狀態(tài)變成運(yùn)行態(tài)if(p->shengyutime<0)/當(dāng)P運(yùn)行完,即

17、剩余時(shí)間小于0時(shí),仍然把它當(dāng)做0處理p->shengyutime=0;printf("n*程序開始運(yùn)行*n");printf("進(jìn)程到達(dá)時(shí)間服務(wù)時(shí)間剩余時(shí)間當(dāng)前狀態(tài)n");while(t!=NULL)時(shí)間不為空時(shí),輸出當(dāng)前進(jìn)程的信息,并把時(shí)間片交給下一個(gè)進(jìn)程printf("%2c%8d%8d%14d%10sn",t->name,t->daodatime,t->fuwutime,t->shengyutime,t-&

18、;gt;state);t=t->next;getchar();/按住回車鍵觀看if(p->shengyutime=0)/當(dāng)隊(duì)首的剩余時(shí)間為0時(shí),先把隊(duì)首改成P的下一個(gè),然后釋放內(nèi)存,刪除隊(duì)首節(jié)點(diǎn)if(p=head)head=p->next;free(p);p=head;else否則返回執(zhí)行,把隊(duì)尾的下一個(gè)指針變成P的下一個(gè)指針,隊(duì)尾的位置移動(dòng)到隊(duì)首r->next=p->next;p=r->next;r=p;else否則把隊(duì)首的位置給隊(duì)尾,把隊(duì)首的狀態(tài)顯示為“就緒”狀態(tài)(r=p;p->state=&

19、amp;quot;就緒"p=p->next;)這是優(yōu)先服務(wù)調(diào)度算法的代碼/*/typedefstructPCB2(charname10;/進(jìn)程名intruntime;/要求運(yùn)行時(shí)間intfrist;/定義優(yōu)先數(shù)charzhuangtai;/定義狀態(tài),R為就緒,F(xiàn)為完成);structPCB2PCBcontrol4;/定義進(jìn)程控制塊數(shù)組voidyouxian()/構(gòu)造優(yōu)先函數(shù)(inti,n;printf("請(qǐng)輸入進(jìn)程的個(gè)數(shù):n");scanf("%d",&n);printf(&

20、amp;quot;請(qǐng)輸入進(jìn)程的名字、優(yōu)先權(quán)、運(yùn)行時(shí)間n");printf("n");for(i=0;i<n;i+)(printf("請(qǐng)輸入第個(gè)進(jìn)程的信息:n",i+1);scanf("%s%d%d",&PCB,&PCBcontroli.frist,&PCBcontroli.runtime);PCBcontroli.zhuangtai='R'進(jìn)程初始狀態(tài)

21、均為就緒getchar();/等待回車進(jìn)入下一次運(yùn)行)intmax_frist_process()/確定最大優(yōu)先級(jí)進(jìn)程子程序(intmax=-10;/max為最大優(yōu)先數(shù),初始化為-10inti,key;for(i=0;i<3;i+)(if(PCBcontroli.zhuangtai='r')/r表示正在運(yùn)行return-1;/返回-1elseif(max<PCBcontroli.frist&&PCBcontroli.zhuangtai='R')/從就緒進(jìn)程中選取優(yōu)先數(shù)最大

22、的進(jìn)程(max=PCBcontroli.frist;/max存放每次循環(huán)中的最大優(yōu)先數(shù)key=i;/將進(jìn)程號(hào)賦給keyif(PCBcontrolkey.zhuangtai='F')/具有最大優(yōu)先數(shù)的進(jìn)程若已運(yùn)行完畢return-1;/則返回-1elsereturnkey;/將key作為返回值返回voidshow()/顯示函數(shù)(inti;printf("n進(jìn)程名優(yōu)先級(jí)運(yùn)行時(shí)間當(dāng)前狀態(tài)n");printf("*printf("%st%dt%dt%stn",&PC

23、B,PCBcontroli.frist,PCBcontroli.runtime,&PCBcontroli.zhuangtai);*n");for(i=0;i<3;i+)/依次顯示每個(gè)進(jìn)程的名、優(yōu)先數(shù)、要求運(yùn)行時(shí)間和狀態(tài)printf("n請(qǐng)按回車鍵進(jìn)行查看");voidrun()/進(jìn)程運(yùn)行子程序(inti,j;intt=0;/t為運(yùn)行次數(shù)for(j=0;j<3;j+)(t+=PCBcontrolj.runtime;/運(yùn)行次數(shù)即為各個(gè)進(jìn)程運(yùn)行時(shí)間之和printf(&q

24、uot;n進(jìn)程沒運(yùn)行前,當(dāng)前的狀態(tài)是:n");show();/調(diào)用show()子程序顯示運(yùn)行前PCB的情況getchar();/等待回車進(jìn)入下一次運(yùn)行for(j=0;j<t;j+)(while(max_frist_process()!=-1)/具有最大優(yōu)先數(shù)的進(jìn)程沒有運(yùn)行完,讓其運(yùn)行(表示其正在運(yùn)PCBcontrolmax_frist_process().zhuangtai='r'/將其狀態(tài)置為r,行for(i=0;i<3;i+)(if(PCBcontroli.zhuangtai='r&#39

25、;)(PCBcontroli.frist-=1;/將當(dāng)前運(yùn)行進(jìn)程的優(yōu)先數(shù)減1PCBcontroli.runtime-;/要求運(yùn)行時(shí)間減1(if(PCBcontroli.runtime=0)PCBcontroli.zhuangtai='F'/運(yùn)行完則將該進(jìn)程狀態(tài)置為結(jié)束elsePCBcontroli.zhuangtai='R'/未運(yùn)行完將其狀態(tài)置為就緒show();/顯示每次運(yùn)行后各PCB的情況getchar();/等待回車進(jìn)入下一次運(yùn)行voidmain()(intN;intnumber;charTishikuang;/提示框doprintf("*n");printf("*桂林出版社版權(quán)所有歡迎下載*n");printf("n");printf("*【進(jìn)程調(diào)度*n");printf("*n");printf("*輸入1一先來先服務(wù)*n");printf("*n");printf("*n");printf(&

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論