




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)實驗報告(二)實驗題目:進程調(diào)度算法實驗環(huán)境:C+實驗?zāi)康模壕幊棠M實現(xiàn)幾種常見的進程調(diào)度算法,通過對幾組進程分別使用不同的調(diào)度算法,計算進程的平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間,比較各種算法的性能優(yōu)劣。實驗內(nèi)容:編程實現(xiàn)如下算法:1 .先來先服務(wù)算法;2 .短進程優(yōu)先算法;3 .時間片輪轉(zhuǎn)調(diào)度算法設(shè)計分析:程序流程圖:1 .先來先服務(wù)算法2 .短進程優(yōu)先算法3.時間片輪轉(zhuǎn)調(diào)度算法實驗代碼:1.先來先服務(wù)算法#include<iostream.h>#definen20typedefstructintatime;/進程到達時間intruntime;/進程運行時間fcs;voidm
2、ain()(intamount,i,j,diao,huan;fcsfn;cout<<"請輸入進程個數(shù):"<<endl;cin>>amount;for(i=0;i<amount;i+)(cout<<"請輸入進程名,進程到達時間,進程運行時間:“<<endl;cin>>fi.id;cin>>fi.atime;cin>>fi.runtime;for(i=0;i<amount;i+)按進程到達時間的先后排序(如果兩個進程同時到達,按在屏幕先輸入的先運行for(j=0
3、;j<amount-i-1;j+)if(fj.atime>fj+1.atime)diao=fj.atime;fj.atime=fj+1.atime;fj+1.atime=diao;huan=fj.id;fj.id=fj+1.id;fj+1.id=huan;for(i=0;i<amount;i+)cout<<"進程:"<<fi.id<<"從"<<fi.atime<<"開始"<<","<<"在"&l
4、t;<fi.atime+fi.runtime<<"之前結(jié)束。"<<endl;fi+1.atime=fi.atime+fi.runtime;2.短進程優(yōu)先算法#include<stdio.h>#definen5#definenum5#definemax65535typedefstructprointPRO_ID;intsum_time;intflag;Pro;/整數(shù)排序intbubble(inttemp)(inti,j,tem=0;for(i=1;i<num;i+)intlastX=1;for(j=0;j<num-i;j+
5、)if(tempj>tempj+1)tem=tempj;tempj=tempj+1;tempj+1=tem;lastX=0;if(lastX=1)break;returntemp0;/進程排序Probubble(Prop)inti,j;Protemp=0;Prosnum;for(i=0;i<num;i+)si=pi;for(i=1;i<num;i+)intlastX=1;for(j=0;j<num-i;j+)if(sj.sum_time>sj+1.sum_time)temp=sj;sj=sj+1;sj+1=temp;lastX=0;if(lastX=1)break
6、;returns0;voidSPF(intp)(if(n>0)(inti,j,k,l,tc=0;Proseqn;Protemp_seqn;printf("短進程優(yōu)先調(diào)度算法SPFn");printf("請依次輸入5個進程的進程號、到達時間和執(zhí)行時間n");printf("成員變量用逗號隔開;進程間用回車隔開n");for(i=0;i<n;i+)scanf("%d,%d,%d",&seqi.PRO_ID,&seqi.arrive_time,&seqi.sum_time);)prin
7、tf("調(diào)度順序是:n");初始化tcinttempnum;for(i=0;i<num;i+)tempi=seqi.arrive_time;)tc=bubble(temp);/tc是斷點啊/flag表示對應(yīng)i的pro的隊列情況/-1表示未進入過隊列,0表示在隊列中,1表示被清除了for(i=0;i<n;i+)seqi.flag=-1;)for(i=0;i<n;i+)for(j=0;j<n;j+)if(seqj.flag!=1&&seqj.arrive_time<=tc)seqj.flag=0;)for(j=0;j<n;j+
8、)temp_seqj=seqj;if(seqj.flag!=0)temp_seqj.sum_time=max;)l=bubble(temp_seq).PRO_ID;for(j=0;j<n;j+)if(l=seqj.PRO_ID)k=j;)tc=tc+bubble(temp_seq).sum_time;seqk.flag=1;printf("%d",l);)printf("n");)voidmain()SPF(n);)3 .時間片輪轉(zhuǎn)調(diào)度算法頭文件RR.h#include<iostream>#include<stdio.h>#
9、include<string.h>#include<stdlib.h>#include<ctype.h>#defineMaxNum100typedefstructpcb/定義進程控制塊charNameMaxNum;/進程名intarrivetime;/到達時間intruntime;/運行時間intwholetime;固定運行時間intFinishTime;/完成時間doubleWeightTime;/周轉(zhuǎn)時間doubleWeightWholeTime;/帶權(quán)周轉(zhuǎn)時間charstate;/運行后的狀態(tài)structpcb*next;PCB;全局變量intN;do
10、ubleSumWT;doubleSumWWT;doubleAverageWT;doubleAverageWWT;實際進程數(shù)周轉(zhuǎn)時間之和/帶權(quán)周轉(zhuǎn)時間之和/平均周轉(zhuǎn)時間平均帶權(quán)周轉(zhuǎn)時間typedefstruct定義隊列,封裝頭結(jié)點,指針分別指向隊頭和隊尾PCB*front,*rear;queue;(queue*head;head=(queue*)malloc(sizeof(queue);head->front=NULL;head->rear=NULL;returnhead;intempty(queue*head)/檢驗隊列是否為空(return(head->front?0:1)
11、;queue*append(queue*head,charcMaxNum,inta,intr,chars)進程隊列入隊,往后插入(PCB*p;p=(PCB*)malloc(sizeof(PCB);strcpy(p->Name,c);p->arrivetime=a;p->runtime=r;p->wholetime=r;p->state=s;/p->FinishTime=0;/p->WeightTime=0;/p->WeightWholeTime=0;p->next=NULL;if(empty(head)head->front=head
12、->rear=p;else(head->rear->next=p;head->rear=p;returnhead;queue*creat(queue*head)/創(chuàng)建進程隊列(charcMaxNum;chars='R'inta,r,i;printf("請輸入共有幾個進程:n");scanf("%d",&N);for(i=1;i<=N;i+)(printf("請輸入第%d個進程的進程名:n",i);getchar();gets(c);printf("請輸入第%d個進程的到達
13、時間:n",i);scanf("%d",&a);printf("請輸入第%d個進程的服務(wù)時間:n",i);scanf("%d",&r);head=append(head,c,a,r,s);returnhead;voidprint(queue*head)輸入創(chuàng)建的進程隊列PCB*p;p=head->front;if(!p)printf("時間片輪轉(zhuǎn)調(diào)度隊列為空!n");while(p)printf("Name=%sarrivetime=%druntime=%dstate=%c
14、",p->Name,p->arrivetime,p->runtime,p->state);printf("n");p=p->next;*/*時間片輪轉(zhuǎn)法調(diào)度算法的實現(xiàn)voidRR(queue*head,intq)intt=head->front->arrivetime,lt=head->rear->arrivetime;if(head->front->runtime<q)t=t+head->front->runtime;elset=t+q;/*進程隊列為不空才可調(diào)度*/while(
15、!empty(head)PCB*p1,*p2;printf("n時刻進程運行后的狀態(tài)n");/*第一種情況:當(dāng)前運行的時間小于最后一個進程到達時間做一下操作*/while(t<lt)p1=head->front;printf("%2d%s",t,p1->Name);p1->runtime=p1->runtime-q;if(p1->runtime<=0)(p1->state='C'printf("%cn",p1->state);p1->FinishTime=t;
16、p1->WeightTime=p1->FinishTime-p1->arrivetime;p1->WeightWholeTime=p1->WeightTime/p1->wholetime;SumWT+=p1->WeightTime;SumWWT+=p1->WeightWholeTime;printf("時刻%2d進程%s運行結(jié)束,進程%s周轉(zhuǎn)時間=%5.2f,帶權(quán)周轉(zhuǎn)時間=%5.2fn",t,p1->Name,p1->Name,p1->WeightTime,p1->WeightWholeTime);he
17、ad->front=p1->next;free(p1);/2.運行時間大于0,向后找位置插入else(printf("%cn",p1->state);p2=p1->next;while(p2->next&&p2->arrivetime!=t)(p2=p2->next;此時無新進入隊列的進程,有兩種情況:1.不用找位置往后插入,隊首不變,不做操作/2.找位置往后插入if(p2->arrivetime!=t)(PCB*p3=p1,*p4;while(p3->next&&p3->arriv
18、etime<t)(p4=p3;p3=p3->next;if(p3->arrivetime>t)(if(p4!=p1)/p1插在p4后,頭為p1->next(head->front=p1->next;p1->next=p4->next;p4->next=p1;else/不做操作p4=p3=p2=NULL;elsep4=p3=p2=NULL;)此時有新進入隊列的進程時:pl插在新進入隊列的進程p2后,隊首為p1->nextelse(head->front=p1->next;p1->next=p2->next;
19、p2->next=p1;)時刻變化if(head->front->runtime<q)t=t+head->front->runtime;elset=t+q;/*第一種情況結(jié)束*/*第二種情況:當(dāng)期運行的時間大于最后一個進程至I達的時間做以下操作*/while(t>=lt)(p1=head->front;printf("%2d%s",t,p1->Name);p1->runtime=p1->runtime-q;/1.運行時間小于0,刪除隊首if(p1->runtime<=0)(p1->state
20、='C'printf("%c'n",p1->state);p1->FinishTime=t;p1->WeightTime=p1->FinishTime-p1->arrivetime;p1->WeightWholeTime=p1->WeightTime/p1->wholetime;SumWT+=p1->WeightTime;SumWWT+=p1->WeightWholeTime;printf("時刻%2d進程%s運行結(jié)束,進程%s周轉(zhuǎn)時間=%5.2f,帶權(quán)周轉(zhuǎn)時間=%5.2fn&qu
21、ot;,t,p1->Name,p1->Name,p1->WeightTime,p1->WeightWholeTime);printf("時亥U%2d進程s運行名束",t,p1->pname);head->front=p1->next;free(p1);)/2.運行時間大于0,直接插在隊尾else(printf("%cn",p1->state);若原隊列只有一個進程,不必往隊尾插if(!p1->next)head->front=p1;/若原隊列有多個進程else(head->front=p1
22、->next;head->rear->next=p1;head->rear=p1;p1->next=NULL;時刻變化,隊列為空時不做時刻變化if(empty(head)return;else(if(head->front->runtime<q)t=t+head->front->runtime;elset=t+q;/*第二種情況結(jié)束*/主程序Main.cpp#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#include"RR.h"voidmain()(queue*head;intq;head=init();head=creat(head);printf("n您輸入的時間片輪轉(zhuǎn)進程隊列為:n&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年應(yīng)急管理與災(zāi)害響應(yīng)考試試卷及答案總結(jié)
- 2025年新工藝材料技術(shù)的研究與應(yīng)用試題及答案
- 2025年信息安全與風(fēng)險管理課程考核試卷及答案
- 2025年汽車服務(wù)工程職業(yè)能力測試試卷及答案
- 2025年批判性思維能力測試題及答案
- 2025年建筑師執(zhí)業(yè)資格考試試卷及答案
- 2025年5G通信技術(shù)與網(wǎng)絡(luò)的性能優(yōu)化的綜合能力考試卷及答案
- 2025年電子商務(wù)技能證書考試試題及答案
- 物資采購出庫管理制度
- 特困補助資金管理制度
- DB12T 531-2014 電梯主要部件判廢技術(shù)條件
- 大隱1#綜合樓安裝全專業(yè)手工計算表
- 《一元一次方程》參考課件
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 《阿凡達》電影賞析
- GB/T 44625-2024動態(tài)響應(yīng)同步調(diào)相機技術(shù)要求
- 商業(yè)倫理與職業(yè)道德學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 系統(tǒng)商用密碼應(yīng)用方案v5-2024(新模版)
- 基于單片機的彩燈控制器設(shè)計
- 2024至2030年中國醫(yī)療信息化市場潛力與投資前景分析報告
- 四川省成都市成華區(qū)2023-2024學(xué)年七年級下學(xué)期期末生物試題(原卷版)
評論
0/150
提交評論