1、实验二 进程调度算法模拟姓名:海日汗学号:20092106091 概述:进程调度算法有FIFO,优先数调度算法,时间片轮转调度算 法,分级调度算法。2 实验目的:模拟FIFO,时间片调度算法和优先数调度算法。更深入的了 解进程调度算法。3 实验要求输入:每个进程包括四个数据项: 进程名 进程状态(1 等待 2 就绪 3 运行) 所需时间 优先数(0 级最高) 。 输出: 进程执行流 和等待时间 平均等待时间。#include #include using namespace std;const int block_time=10; /定义时间片的长度为 10 秒 const int MAXPCB=100;/定义最大进程数int aMAXPCB;/保存各个进程几次时间偏上运行/定义进程结构体 typedef struct nodechar name20; int state;int rtime;int privilege; int wait_time;/进程名字/进程状态/进程运行时间 /进程优先级/进程等待时间pcb;/进程个数pcb pcbsMAXPCB; int quantity;
2、/初始化函数 void initial()int i; for(i=0;ifname; if(fp=fopen(fname,r)=NULL)coutvv错误,文件打不开,请检査文件名vvendl;else while(!feof(fp)fscanf(fp,%s %d %d %d,pcbsquantity.name,&pcbsquantity.state,&pcbsquantity .rtime,&pcbsquantity.privilege);quantity+;/输出所读入的数据coutvv输出所读入的数据vvendl;coutvv进程名进程状态所需时间优先数vvendl;for(i=0;ivquantity;i+)coutvv vvpcbsi.namevv tvvpcbsi.statevv tvvpcbsi.rtimevv tvvpcbsi.privilegevvendl;return(1);return(0);/重置数据,以供另一个算法使用 void init()int i; for(i=0;iquantity;i+) pcbsi.wait_time=0;/先进先出算法void
3、FIFO()int i,j;double total;输出FIFO算法执行流coutendlendl;coutvvFIFO 算法执行流:vvendl;coutvv进程名等待时间vvendl;for(i=0;ivquantity;i+)coutvv vvpcbsi.namevv vvpcbsi.wait_timevvendl;for(j=i+1;jvquantity;j+) pcbsj.wait_time+=pcbsi.rtime;total=0.0;for(i=0;ivquantity;i+) total+=pcbsi.wait_time;coutvv总等待时间:vvtotalvv平均等待时间:vv10*(total/quantity)vvendl;/优先数调度算法 void privilege()int i,j;double total;for(i=0;iquantity;i+) pcb zhizhen;for(j=i+1;jquantity;j+)if(pcbsi.statepcbsj.privilege)zhizhen=pcbsi;pcbsi=pcbsj;pcbsj=zhizhe
4、n;if(pcbsi.state=pcbsj.state&pcbsi.privilege=pcbsj.privilege) /状态和 优先级都相等的情况,运行时间短的先运行if(pcbsi.rtimepcbsj.rtime) zhizhen=pcbsi; pcbsi=pcbsj; pcbsj=zhizhen;elsecontinue;for(i=0;iquantity;i+)for(j=i+1;jquantity;j+)pcbsj.wait_time+=pcbsi.rtime;/输出优先数调度执行流coutendlpcbsjprivilege) /状 态 相 等情况要考虑优先级zhizhen=pcbsi; pcbsi=pcbsj;pcbsj=zhizhen;if(pcbsistate=pcbsjstate&pcbsiprivilege=pcbsjprivilege) /状态和 优先级都相等的情况,运行时间短的先运行if(pcbsirtimepcbsjrtime)zhizhen=pcbsi;pcbsi=pcbsj;pcbsj=zhizhen; elsecontinue;int flag=
5、0;/标记运行几次时间片int number=0;/时间片个数for(i=0;iflag) flag=ai;elseai=pcbsi.rtime/block_time+1; if(aiflag)flag=ai;vvendl;coutendl=number)coutvvpcbsj.namevvendl;return 0;/主函数 void main()int flag;coutendlendl;cout cout cout cout cout cout coutI1 vvendl;I进程调度模拟系统I vvendl;|1 vvendl;I海日汗I vvendl;I2009210609I vvendl;II vvendl;11 vvendl;coutvvendlvvendl; initial();flag=readData(); if(flag=1)FIFO();init();privilege();init();BLOCK_TIME(); 5运行结果:Jcb.txt的内容是:job11881job23560job31501job42792job52890job621103job71904进程调度模拟系统海日汗程右逬程状态所需时间优先数1312221jobi job2 job3 job4 job5 job6 job?885650?989110902034oob2b381844ob4194joob5b623?6320jobl472job?总導待吋间= 1533平均等待吋间:219优先数调度#遁呈名W辱待job20job556job4145job6224job3334jobl384job?4?2流:总等待时间:违15平均等待时间:230.?146.心得和思路:通过本次实验,我更深入的了解了进程调度算法!实现了先来先服务算法,优先级调度算法,时间片轮转算法!主要思想如下:(1)先来先服务算法的时候,状态和优先级都没考虑,看成队 列的顺序就是进程的顺序,所以很简单了!(2)优先级调度算法:考虑三种情况,第一:状态的大小来排 序,因为我的代码里运行态是 3 就
《进程调度实验》由会员ni****g分享,可在线阅读,更多相关《进程调度实验》请在金锄头文库上搜索。