




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进程调度算法的模拟实现实验目的1 .本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。2 .利用程序设计语言编写算法,模拟实现先到先服务算法FCFS轮转调度算法RR最短作业优先算法SJF、优先级调度算法PRIOR最短剩余时间优先算法SRTF3 .进行算法评价,计算平均等待时间和平均周转时间。实验内容及结果1.先来先服务算法输入此进程时间片大,J时间和优先级输入第叶世程的名字灯间和优先级个进程的名字优先级一项是指睇运行后的优先圾优先皴还需要占用时间学按任意蹙批续清技任意馨继续.过程P1已势执行完毕说明:在本程序所列进程彳在程名字共需占用CFU时间GK时间和优先级优先级调度4;最短
2、作业优先5:最姮剩余时间优先选择调度算法:L-FCFS2=时间片轮换输入进程个数二I输入第1101I输入第3103C:WinQDwa'.systrm32cm1d,P2LbH1运行raieio?等待啃按任意建修.进程P2已经执行完毕»清按任意邂曲续.P3IQ运行甯疆鬻置2.轮转调度算法请按任意键5姆.-.进程P3已经执行完毕?清按任意镯性续一一一执行完毕?3.优先级调度算法C:Winciowssystem32、匚rrd.exe3;优先级谐度4;最通作业优先S:最J辞I除时间优先输入遴程个数二输入此逆程时间片大小:用U时间和优先级:10输入笫1大选程的名字、P1102输入第2个进
3、程的名字、2101GpUL时间和优先皴输入箪3个讲程的名字、3103冰间和优先级:说明:在本程序所列恚程信息中,优先级一项是指逑程运行后的优先级”进程名字并需占用*U时恒还需要占用时间状态F3nV210ieig01010运行辑请按任意键继续.一ft00M-1000111P1P3P2Ep-P2运行请按任意涯继续进程P2已经执行完毕!4.最短时间优先算法5.最短剩余时间优先算法实验总结在此次模拟过程中,将SRTF单独拿了出来用指针表示,而其余均用数组表示。完整代码Srtf.cpp代码如下:/最短剩余时间优先算法的实现#include<stdio.h>#include<stdlib
4、.h>#include<time.h>typedefstructintremain_time;intarrive_time;intTp;intTc;intTo;intnumber;Process_Block;typedefstruct_QueueProcess_BlockPB;struct_Queue*next;_Block,*Process;typedefstructProcesshead;Processend;/进程剩余执行时间/进程到达时间/进入就绪队列的时间/进入执行队列的时间/进程执行结束的时间/进程编号/定义进程模块/定义一个进程模块队列中结点/队列头指针/队列尾
5、指针/进程队列Process_Queue;Process_QueuePQ;intt;ProcessRun_Now;/定义一个全局队列变量/全局时间/当前正在运行的进程,作为全局变量voidInitQueue(Process_QueuePQ)(PQ.head->next=NULL;PQ.end->next=PQ.head;/*初始化队列*/intIsEmpty(Process_QueuePQ)(if(PQ.end->next=PQ.head)return1;/队列空的条件为头指针指向尾指针并且尾指针指向头指针elsereturn0;/*判定队列是否为空队列*/voidEnQue
6、ue(Process_QueuePQ,ProcessP)(Processtemp=(Process)malloc(sizeof(_Block);temp=PQ.end;temp->next->next=P;PQ.end->next=P;/*插入队列操作*/ProcessDeQueue(Process_QueuePQ)(if(IsEmpty(PQ)returnNULL;Processtemp=PQ.head->next;PQ.head->next=temp->next;if(PQ.end->next=temp)PQ.end->next=PQ.hea
7、d;returntemp;/*出列操作*/ProcessShortestProcess(Process_QueuePQ)(if(IsEmpty(PQ)/如果队列为空,返回(if(!Run_Now)returnNULL;elsereturnRun_Now;Processtemp,shortest,prev;intmin_time;if(Run_Now)(shortest=Run_Now;min_time=Run_Now->PB.remain_time;else(shortest=PQ.head->next;min_time=PQ.head->next->PB.remain
8、_time;temp=PQ.head;prev=temp;while(temp->next)(if(temp->next->PB.remain_time<min_time)(shortest=temp->next;min_time=shortest->PB.remain_time;prev=temp;temp=temp->next;if(shortest=PQ.end->next)PQ.end->next=prev;prev->next=shortest->next;returnshortest;/*调度最短剩余时间的进程至队头
9、*/voidRun()(Run_Now->PB.remain_time-;return;/*运行函数*/voidWait()(return;intsum(intarray,intn)(inti,sum=0;for(i=0;i<n;i+)sum+=arrayi;/如果当前有进程正在执行,/那么最短进程初始化为当前正在执行的进程,/如果当前没有进程执行,/则最短进程初始化为队列中第一个进程/如果当前进程的剩余时间比min_time短,/则保存当前进程,/及其前驱/如果最短剩余时间进程是队列中最后一个进程,/则需要修改尾指针指向其前驱/修改指针将最短剩余时间进程插入到队头/某一时间运行它
10、的剩余时间减returnsum;intmain()(PQ.head=(Process)malloc(sizeof(_Block);PQ.end=(Process)malloc(sizeof(_Block);Run_Now=(Process)malloc(sizeof(_Block);Run_Now=NULL;InitQueue(PQ);/Total_Time为所有进程的执行时间之和inti,N,Total_Time=0;printf("请输入计算机中的进程数目:n");scanf("%d",&N);Process*P,temp;P=(Proces
11、s*)malloc(N*sizeof(Process);int*wt,*circle_t;wt=(int*)malloc(N*sizeof(int);circle_t=(int*)malloc(N*sizeof(int);for(i=0;i<N;i+)(Pi=(Process)malloc(sizeof(_Block);Pi->PB.number=i+1;Pi->next=NULL;wti=0;circle_ti=0;printf("输入第阶进程的到达时间及剩余执行时间:n",i+1);scanf("%d%d",&Pi->
12、PB.arrive_time,&Pi->PB.remain_time);)for(i=0;i<N;i+)Total_Time+=Pi->PB.remain_time;printf("n进程按顺序运行依次为:n");i=0;intk=0;for(t=0;t+)(if(Run_Now)/如果当前有进程正在执行(Run();if(t=Pi->PB.arrive_time)/如果当前时间正好有进程进入(if(Pi->PB.remain_time<Run_Now->PB.remain_time)(temp=Pi;Pi=Run_Now;
13、/则调度它至运行队列中,Run_Now=temp;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);/并将当前运行进程重新插入队列中Pi->PB.Tp=t;k+;i=(i+1)>(N-1)?(N-1):(i+1);if(Run_Now->PB.remain_time=0)如果当前进程运行结束,Run_No
14、w->PB.To=t;/进程运行结束的时间circle_tRun_Now->PB.number-1+=t-Run_Now->PB.arrive_time;free(Run_Now);/则将它所占资源释放掉,Run_Now=NULL;/并修改Run_No讷NULLRun_Now=ShortestProcess(PQ);/从就绪队列中调出最短剩余时间进程至队头,if(!Run_Now)/如果队列为空,转为等待状态if(IsEmpty(PQ)&&k>=N)break;Wait();continue;elseRun_Now->PB.Tc=t;wtRun_N
15、ow->PB.number-1+=Run_Now->PB.Tc-Run_Now->PB.Tp;printf("%d",Run_Now->PB.number);/如果当前运行进程为空,那么/如果正好这时有进程入队/则直接被调入运行队列中elseif(t=Pi->PB.arrive_time)k+;EnQueue(PQ,Pi);Run_Now=DeQueue(PQ);Run_Now->PB.Tp=t;Run_Now->PB.Tc=t;printf("%d",Run_Now->PB.number);i=(i+1)
16、>(N-1)?(N-1):(i+1);else(Wait();continue)printf("n");printf("平均等待时间是:n%fn",(float)sum(wt,N)/N);printf("平均周转时间是:n%fn",(float)sum(circle_t,N)/N);return0;)/Process.cpp代码如下:】#include<iostream>#include<string>usingnamespacestd;classProcess(public:stringProcessN
17、ame;/进程名字intTime;/进程需要时间intleval;/进程优先级intLeftTime;/进程运行一段时间后还需要的时间);voidCopy(Processproc1,Processproc2);/*巴proc2赋值给proc1voidSort(Processpr,intsize);/此排序后按优先级从大到小排列voidsort1(Processpr,intsize);/此排序后按需要的cpu时间从小到大排列voidFcfs(Processpr,intnum,intTimepice);/先来先服务算法voidTimeTurn(Processprocess,intnum,intTi
18、mepice);/时间片轮转算法voidPriority(Processprocess,intnum,intTimepice);/优先级算法voidmain()(inta;cout<<endl;cout<<"选择调度算法:"<<endl;cout<<"1:FCFS2:时间片轮换3:优先级调度4:最短作业优先5:最短剩余时间优先"<<endl;cin>>a;constintSize=30;ProcessprocessSize;intnum;intTimePice;cout<<
19、;"输入进程个数:"<<endl;cin>>num;cout<<"输入此进程时间片大小:"<<endl;cin>>TimePice;for(inti=0;i<num;i+)stringname;intCpuTime;intLeval;cout<<"输入第"<<i+1<<"个进程的名字、cpu时间和优先级:"<<endl;cin>>name;cin>>CpuTime>>
20、Leval;processi.ProcessName=name;processi.Time=CpuTime;processi.leval=Leval;cout<<endl;for(intk=0;k<num;k+)processk.LeftTime=processk.Time;/对进程剩余时间初始化cout<<"(说明:在本程序所列进程信息中,优先级一项是指进程运行后的优先级!!)"cout<<endl;cout<<endl;cout<<"进程名字"<<"共需占用CPU
21、t间"<<"还需要占用时间"<<"优先级"<<状态"<<endl;if(a=1)Fcfs(process,num,TimePice);elseif(a=2)TimeTurn(process,num,TimePice);elseif(a=3)Sort(process,num);Priority(process,num,TimePice);else/最短作业算法,先按时间从小到大排序,再调用Fcfs算法即可sort1(process,num);Fcfs(process,num,TimePic
22、e);voidCopy(Processproc1,Processproc2)proc1.leval=proc2.leval;procl.ProcessName=proc2.ProcessName;procl.Time=proc2.Time;)voidSort(Processpr,intsize)/以进程优先级高低排序/直接插入排序for(inti=1;i<size;i+)Processtemp;temp=pri;intj=i;while(j>0&&temp.leval<prj-1.leval)prj=prj-1;j-;)prj=temp;/直接插入排序后进程按
23、优先级从小到大排列for(intd=size-1;d>size/2;d-)Processtemp;temp=prd;prd=prsize-d-1;prsize-d-1=temp;/此排序后按优先级从大到小排列/*最短作业优先算法的实现*/voidsort1(Processpr,intsize)/以进程时间从低到高排序/直接插入排序for(inti=1;i<size;i+)Processtemp;temp=pri;intj=i;while(j>0&&temp.Time<prj-1.Time)prj=prj-1;j-;prj=temp;/*先来先服务算法的实
24、现*/voidFcfs(Processprocess,intnum,intTimepice)/process是输入的进程,nunml进程的数目,Timepice是时间片大小while(true)if(num=0)cout<<"所有进程都已经执行完毕!"<<endl;exit(1);)if(process0.LeftTime=0)cout<<"进程"<<process0.ProcessName<<"已经执行完毕!"<<endl;for(inti=0;i<num
25、;i+)processi=processi+1;num-;)elseif(processnum-1.LeftTime=0)cout<<"进程"<<processnum-1.ProcessName<<num-;)elsecout<<endl;/输出正在运行的进程process0.LeftTime=process0.LeftTime-Timepice;process0.leval=process0.leval-1;cout<<""<<process0.ProcessName<<
26、;cout<<process0.LeftTime<<"cout<<endl;for(ints=1;s<num;s+)cout<<""<<processs.ProcessName<<"'cout<<processs.LeftTime<<""<<endl;已经执行完毕!"<<endl;<<process0.Time<<<<process0.leval<&l
27、t;"运行<<processs.Time<<<<processs.leval<<"等待)/elsecout<<endl;system("pause");cout<<endl;/while)/*时间片轮转调度算法实现*/voidTimeTurn(Processprocess,intnum,intTimepice)(while(true)(if(num=0)(cout<<"所有进程都已经执行完毕!"<<endl;exit(1);)if(proc
28、ess0.LeftTime=0)(cout<<"进程"<<process0.ProcessName<<"已经执行完毕!"<<endl;for(inti=0;i<num;i+)processi=processi+1;num-;)if(processnum-1.LeftTime=0)(cout<<"进程"<<processnum-1.ProcessName<<"已经执行完毕!"<<endl;num-;)elseif(p
29、rocess0.LeftTime>0)(cout<<endl;/输出正在运行的进程process0.LeftTime=process0.LeftTime-Timepice;process0.leval=process0.leval-1;cout<<""<<process0.ProcessName<<""<<process0.Time<<cout<<process0.LeftTime<<vvprocess0.leval<v运行Jcout<<
30、;endl;<<processs.Time<<<<processs.leval;for(ints=1;s<num;s+)(cout<<""<<processs.ProcessName<<cout<<processs.LeftTime<<"if(s=1)cout<<"就绪"<<endl;elsecout<<"等待"<<endl;Processtemp;temp=process0;for(intj=0;j<num;j+)processj=processj+1;processnum-1=temp;/elsecout<<endl;system("pause");cout<<endl;/while/*优先级调度算法的实现*/voidPriority(Processprocess,intnum,intTimepice)while(true)if(num=0)cout<<"所有进程都已经执行完毕!"<<endl;exit(1);if(process0.L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国豌豆项目创业计划书
- 中国减肥茶电商项目创业计划书
- 中国三维动画软件项目创业计划书
- 中国肉鹅屠宰项目创业计划书
- 中国高梁项目创业计划书
- 中国多功能麻醉机项目创业计划书
- 家电采购协议书
- 酒店住宿客人信息保护协议
- 旅行社服务质量控制协议
- 车辆质押贷款合同及违约责任条款
- 2025天津市龙网科技发展有限公司招聘9人笔试参考题库附带答案详解
- 工会考试试题及答案大全
- 中职电子技术试题及答案
- 麻醉精神药品培训考核试题(含答案)
- 猪丁型冠状病毒感染对ST细胞凋亡与自噬的机制解析
- 家居建材仓库管理制度
- 核电站辐射剂量优化管理策略-洞察阐释
- 屋面防水改造项目施工组织设计
- 北京2025年北京市城市管理委员会直属事业单位招聘笔试历年参考题库附带答案详解析
- 肿瘤高危人群筛查与管理策略
- 两用物项出口许可申报填报指南
评论
0/150
提交评论