


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告(二)實(shí)驗(yàn)題目:進(jìn)程調(diào)度算法實(shí)驗(yàn)環(huán)境:C+實(shí)驗(yàn)?zāi)康模壕幊棠M實(shí)現(xiàn)幾種常見(jiàn)的進(jìn)程調(diào)度算法,通過(guò)對(duì)幾組進(jìn)程分別使用不 同的調(diào)度算法,計(jì)算進(jìn)程的平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間,比較各種算法的性能優(yōu)劣。實(shí)驗(yàn)內(nèi)容:編程實(shí)現(xiàn)如下算法:1. 先來(lái)先服務(wù)算法;2. 短進(jìn)程優(yōu)先算法;3. 時(shí)間片輪轉(zhuǎn)調(diào)度算法。設(shè)計(jì)分析:程序流程圖:1. 先來(lái)先服務(wù)算法2短進(jìn)程優(yōu)先算法持初始化特?cái)溄M中的ia包抜到達(dá)時(shí)屈的煩序排序?qū)Λ@取旳 按垣作業(yè)乃所看爾 匸先邃行序得到誨程的執(zhí)行序列依次執(zhí)行各個(gè)iS*呈.2所有進(jìn)程執(zhí)行浣 威3時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)驗(yàn)代碼:1.先來(lái)先服務(wù)算法#include <iostream.
2、h>#define n 20typedef structint id;/進(jìn)程名int atime;/進(jìn)程到達(dá)時(shí)間int runtime;/進(jìn)程運(yùn)行時(shí)間fcs;void main()int amount,i,j,diao,huan;fcs fn;cout«"請(qǐng)輸入進(jìn)程個(gè)數(shù):"endl;cin>>amount;for(i=0;i<amount;i+)cout<<"請(qǐng)輸入進(jìn)程名,進(jìn)程到達(dá)時(shí)間,進(jìn)程運(yùn)行時(shí)間 :"<<endl;cin>>fi.id;cin>>fi.atime;cin
3、>>fi.runtime;for(i=0;i<amou nt;i+)/按進(jìn)程到達(dá)時(shí)間的先后排序/如果兩個(gè)進(jìn)程同時(shí)到達(dá),按在屏幕先輸入的先運(yùn)行for(j=0;j<amo un t-i-1;j+) if(fj.atime>fj+1.atime)diao=fj.atime;fj.atime=fj+1.atime;fj+1.atime=diao;hua n=fj.id;fj.id=fj+1.id;fj+1.id=hua n;for(i=0;i<amo un t;i+)cout<<"進(jìn)程:"<<fi.id<<&q
4、uot;從"<<fi.atime<<"開(kāi)始在"<<fi.atime+fi.ru ntime<<"之前結(jié)束。"<<e ndl;fi+1.atime=fi.atime+fi.ru ntime;2. 短進(jìn)程優(yōu)先算法#include<stdio.h>#define n 5#define num 5#define max 65535typedef struct pro int PRO_ID;int arrive_time;int sum_time;int flag;Pro;/整數(shù)排序
5、int bubble(int temp)int i,j,tem=0;for(i=1;i<num;i+) int lastX=1;for( j=0;j<num-i;j+) if(temp j>temp j+1) tem=temp j;tempj=temp j+1;tempj+1=tem;lastX=0;if(lastX=1) break;return temp0;/進(jìn)程排序Pro bubble(Pro p)int i,j;Pro temp=0;Pro snum;for(i=0;i<num;i+)si=pi;for(i=1;i <nu m;i+)int lastX=1
6、;for( j=0;j<num-i;j+)if(sj.sum_time>s j+1.sum_time)temp=s j;sj=s j+1;sj+1=temp;lastX=0;if(lastX=1) break;return s0;void SPF(i nt p)if(n >0)int i,j,k,l,tc=0;Pro seq n;Pro temp_seq n;printf("短進(jìn)程優(yōu)先調(diào)度算法SPFn");n");printf("請(qǐng)依次輸入5個(gè)進(jìn)程的進(jìn)程號(hào)、至I達(dá)時(shí)間和執(zhí)行時(shí)間 printf(”成員變量用逗號(hào)隔開(kāi);進(jìn)程間用回車(chē)隔開(kāi) n&
7、quot;);for(i=0;i< n;i+)sea nf("%d,%d,%d", &seqi.PRO_ID,& seqi.arrive_time,& seqi.sum_time);printf("調(diào)度順序是:n");/初始化tcint temp nu m;for(i=0;i <nu m;i+)tempi=seqi.arrive_time;tc=bubble(temp);/tc 是斷點(diǎn)啊/flag 表示對(duì)應(yīng)i的pro的隊(duì)列情況/-1表示未進(jìn)入過(guò)隊(duì)列,0表示在隊(duì)列中,1表示被清除了for(i=0;i< n;i+)s
8、eqi.flag=-1;for(i=0;i< n;i+)for( j=0;j<n;j+)if(seq j.flag!=1 &&seq j.arrive_time<=tc)seq j.flag=0;for( j=0;j<n;j+)temp_seqj=seqj;if(seq j.flag!=0)temp_seqj.sum_time=max;l=bubble(temp_seq).PRO_ID;for( j=0;j<n;j+)if(l=seq j.PRO_ID)k=j;tc=tc+bubble(temp_seq).sum_time;seqk.flag=1;
9、prin tf("%d",l);prin tf("n");void mai n()SPF(n);3時(shí)間片輪轉(zhuǎn)調(diào)度算法頭文件RR.h#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#define MaxNum 100typedef struct pcb /定義進(jìn)程控制塊char NameMaxNum; / 進(jìn)程名int arrivetime; /到達(dá)時(shí)間int runti
10、me;/運(yùn)行時(shí)間int wholetime;/固定運(yùn)行時(shí)間int FinishTime; /完成時(shí)間double WeightTime; / 周轉(zhuǎn)時(shí)間double WeightWholeTime; / 帶權(quán)周轉(zhuǎn)時(shí)間char state;/運(yùn)行后的狀態(tài)struct pcb *next;PCB;/全局變量int N;/實(shí)際進(jìn)程數(shù)double SumWT;/周轉(zhuǎn)時(shí)間之和double SumWWT;/帶權(quán)周轉(zhuǎn)時(shí)間之和double AverageWT;/平均周轉(zhuǎn)時(shí)間double AverageWWT;/平均帶權(quán)周轉(zhuǎn)時(shí)間typedef struct /定義隊(duì)列,封裝頭結(jié)點(diǎn),指針?lè)謩e指向隊(duì)頭和隊(duì)尾PCB *
11、front,*rear;queue;queue *init()/進(jìn)程隊(duì)列置空queue *head;head=(queue*)malloc(sizeof(queue);head->front=NULL;head->rear=NULL;return head;int empty(queue *head) /檢驗(yàn)隊(duì)列是否為空return (head->front?0:1);/進(jìn)程隊(duì)列入隊(duì),往后插入queue *appe nd(queue *head,char cMaxNum,i nt a,i nt r,char s)PCB *p;p=(PCB *)malloc(sizeof(PC
12、B);strcpy(p->Name,c);p->arrivetime=a;p->runtime=r;p->wholetime=r;p->state=s;p->FinishTime=O;p->WeightTime=O;p->WeightWholeTime=0;p->next=NULL;if(empty(head)head->front=head->rear=p;elsehead->rear->next=p;head->rear=p;return head;queue *creat(queue *head)/ 創(chuàng)建
13、進(jìn)程隊(duì)列char cMaxNum;char s='R'int a,r,i;printf("請(qǐng)輸入共有幾個(gè)進(jìn)程:n");sca nf("%d",&N);for(i=1;i<=N;i+)printf("請(qǐng)輸入第%d個(gè)進(jìn)程的進(jìn)程名:n",i);getchar();gets(c);printf("請(qǐng)輸入第%d個(gè)進(jìn)程的到達(dá)時(shí)間:n",i);sca nf("%d", &a);printf("請(qǐng)輸入第%d個(gè)進(jìn)程的服務(wù)時(shí)間:n",i);sca nf(&q
14、uot;%d", &r);head=appe nd(head,c,a,r,s);retur n head;void print(queue *head) /輸入創(chuàng)建的進(jìn)程隊(duì)列PCB *p;p=head->front;if(!p)printf("時(shí)間片輪轉(zhuǎn)調(diào)度隊(duì)列為空!n");while(p)arrivetime=%druntime=%dprintf("Name=%sstate=%c",p->Name,p->arrivetime,p->runtime,p->state);printf("n"
15、;);p=p->next; void RR(queue *head,int q) *時(shí)間片輪轉(zhuǎn)法調(diào)度算法的實(shí)現(xiàn)*int t=head->front->arrivetime, lt=head->rear->arrivetime;if(head->front->runtime<q)t=t+head->front->runtime;elset=t+q;/*進(jìn)程隊(duì)列為不空才可調(diào)度*/while(!empty(head)PCB *p1,*p2;printf("n 時(shí)刻 進(jìn)程 運(yùn)行后的狀態(tài)n");/*第一種情況:當(dāng)前運(yùn)行的時(shí)間
16、小于最后一個(gè)進(jìn)程到達(dá)時(shí)間做一下操作*/ while(t<lt)p1=head->front;printf("%2d%s",t,p1->Name);p1->runtime=p1->runtime-q;1.運(yùn)行時(shí)間小于0,刪除隊(duì)首if(p1->runtime<=0)p1->state='C:printf("%cn",p1->state);p1->FinishTime=t;p1->WeightTime=p1->FinishTime-p1->arrivetime; p1->
17、;WeightWholeTime=p1->WeightTime/p1->wholetime;SumWT+=p1->WeightTime;SumWWT+=p1->WeightWholeTime;printf(”時(shí)刻2d 進(jìn)程%s 運(yùn)行結(jié)束,進(jìn)程%s周轉(zhuǎn)時(shí) 間=%5.2f,帶權(quán)周轉(zhuǎn)時(shí)間=%5.2fn",t,p1->Name,p1->Name,p1->WeightTime,p1->WeightWholeTime);head->front=p1->next;free(pl);2.運(yùn)行時(shí)間大于0,向后找位置插入elseprintf(&
18、quot;%cn",p1->state);p2=p1->next;while(p2->next && p2->arrivetime != t)p2=p2->next;/此時(shí)無(wú)新進(jìn)入隊(duì)列的進(jìn)程,有兩種情況:1.不用找位置往后插入,隊(duì)首不變,不做操作2.找位置往后插入if(p2->arrivetime != t)PCB *p3=p1,*p4;while(p3->next && p3->arrivetime<t)p4=p3;p3=p3->next;if(p3->arrivetime>t)
19、if(p4!=p1)p1 插在 p4 后,頭為 p1->nexthead->front=p1->next;p1->next=p4->next; p4->next=p1;else /不做操作p4=p3=p2=NULL;elsep4=p3=p2=NULL;/此時(shí)有新進(jìn)入隊(duì)列的進(jìn)程時(shí):p1插在新進(jìn)入隊(duì)列的進(jìn)程 p2后,隊(duì)首為p1->nextelsehead->front=p1->next;p1->next=p2->next;p2->next=p1;/時(shí)刻變化if(head->fro nt->r un time<
20、q)t=t+head->fron t->ru ntime;elset=t+q;*第一種情況結(jié)束*/*第二種情況:當(dāng)期運(yùn)行的時(shí)間大于最后一個(gè)進(jìn)程到達(dá)的時(shí)間做以下操作*/while(t>=lt)p1=head->front;printf("%2d%s",t,p1->Name);p1->runtime=p1->runtime-q;/1.運(yùn)行時(shí)間小于0,刪除隊(duì)首if(p1->runtime<=0)p1->state='C:printf("%cn",p1->state);p1->Fin
21、ishTime=t;p1->WeightTime=p1->FinishTime-p1->arrivetime;p1->WeightWholeTime=p1->WeightTime/p1->wholetime;SumWT+=p1->WeightTime;SumWWT+=p1->WeightWholeTime;printf("時(shí)刻%2d 進(jìn)程%s 運(yùn)行結(jié)束,進(jìn)程%s周轉(zhuǎn)時(shí) 間=%5.2f,帶權(quán)周轉(zhuǎn)時(shí)間=%5.2fn",t,p1->Name,p1->Name,p1->WeightTime,p1->Weight
22、WholeTime);/printf(" 時(shí)刻 %2d 進(jìn)程%s 運(yùn)行結(jié)束",t,p1->pname);head->front=p1->next;free(p1);/2.運(yùn)行時(shí)間大于0,直接插在隊(duì)尾elseprintf("%cn",p1->state);/若原隊(duì)列只有一個(gè)進(jìn)程,不必往隊(duì)尾插if(!p1-> next)head->fro nt=p1;/若原隊(duì)列有多個(gè)進(jìn)程elsehead->front=p1->next;head->rear->next=p1;head->rear=p1; p1
23、->next=NULL;/時(shí)刻變化,隊(duì)列為空時(shí)不做時(shí)刻變化if(empty(head)return;else if(head->fro nt->run time<q)t=t+head->fro nt->ru ntime; elset=t+q;/*第二種情況結(jié)束*/主程序Main.cpp#include<iostream>#include<stdio.h> #include<string.h>#include<stdlib.h>#include<ctype.h>#include "RR.h&
24、quot;void main()queue *head;int q;head=init();head=creat(head);printf("n您輸入的時(shí)間片輪轉(zhuǎn)進(jìn)程隊(duì)列為:n");print(head);printf("n請(qǐng)輸入時(shí)間片輪轉(zhuǎn)調(diào)度的時(shí)間片為:");scanf("%d", &q);/時(shí)間片輪轉(zhuǎn)調(diào)度RR(head,q);AverageWT=SumWT/N;AverageWWT=SumWWT/N;printf("平均周轉(zhuǎn)時(shí)間=%5.2f,平均帶權(quán)周轉(zhuǎn)時(shí)間=%5.2f",AverageWT,Avera
25、geWWT);運(yùn)行結(jié)果:先來(lái)先服務(wù):SIbub昭眼冬-exm”MtefefefrH 社-JxH-丄卜情輸入進(jìn)程喀.進(jìn)程到達(dá)時(shí)伺,建程運(yùn)行時(shí)i辛 L2”或程到達(dá)時(shí)間"進(jìn)程運(yùn)行時(shí)閭;I之步軋 ,丿I址上陽(yáng)之制樂(lè)束 空歸呀址在W前結(jié)習(xí) 整從開(kāi)姑”在聃之俞桔扌匚&圳94開(kāi)姍在抽之型結(jié)宜 4加開(kāi)始”在M玄輕就 皿斛旳.在歷選舞* 卩燈開(kāi)朕在1蛇之筮逋.璋在ig%N費(fèi)結(jié)卷 JT坦若丄聲之冋結(jié)東、=丿為!苗丄士 H7 _6 K.142b 3 Fin 在胡z立或:豈王 11圧LIMN 或純1幼sTitb在卻晾:剪慮E 均加訝姑 Saa 2*短進(jìn)程:時(shí)間片輪:ns =8» i*1ub t iinB=12ne =9*aippl u<e t inB=l 3vie =113丄 me!亡:Lmt y! 4ne -11flrr lyct irnc-20lie -12arrlvct line -23ne 3 arr Ltjet ime -2 4vunina=4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度豬場(chǎng)租賃與養(yǎng)殖廢棄物資源化利用合作協(xié)議
- 2025年度?;肺锪鞒邪b卸搬運(yùn)及安全防護(hù)合同
- 二零二五年度董事職責(zé)履行與聘任合同
- 2025年度學(xué)生安全教育與應(yīng)急演練合作協(xié)議
- 2025年度醫(yī)院食堂營(yíng)養(yǎng)均衡供餐服務(wù)協(xié)議
- 2025年度農(nóng)產(chǎn)品電商平臺(tái)購(gòu)銷(xiāo)合同圖片制作與物流服務(wù)合同
- 2025年度夫妻共同財(cái)產(chǎn)投資決策及收益共享協(xié)議書(shū)
- 2025年吉林職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案
- 2025年度保障房東權(quán)益的商鋪?zhàn)赓U合同要點(diǎn)
- 2025年度債務(wù)轉(zhuǎn)移與債務(wù)清償合同范本
- 2024年南京旅游職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 2025年春新外研版(三起)英語(yǔ)三年級(jí)下冊(cè)課件 Unit2第2課時(shí)Speedup
- 人教版(新)九年級(jí)下冊(cè)化學(xué)全冊(cè)教案教學(xué)設(shè)計(jì)及教學(xué)反思
- 2025年浙江省國(guó)土空間規(guī)劃研究院招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年安徽省安慶市公安警務(wù)輔助人員招聘190人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 7.1力教學(xué)課件-2024-2025學(xué)年初中物理人教版八年級(jí)下冊(cè)
- 光伏電站安全培訓(xùn)課件
- 小學(xué)生勤儉節(jié)約課件
- 化工行業(yè)生產(chǎn)過(guò)程安全管理升級(jí)策略方案
- 慢性胰腺炎病教學(xué)查房
- 中考英語(yǔ)復(fù)習(xí)閱讀理解-主旨大意題、推理判斷題
評(píng)論
0/150
提交評(píng)論