短作业优先调度和时间片轮转调度算法

上传人:M****1 文档编号:493701260 上传时间:2023-04-13 格式:DOC 页数:10 大小:67KB
返回 下载 相关 举报
短作业优先调度和时间片轮转调度算法_第1页
第1页 / 共10页
短作业优先调度和时间片轮转调度算法_第2页
第2页 / 共10页
短作业优先调度和时间片轮转调度算法_第3页
第3页 / 共10页
短作业优先调度和时间片轮转调度算法_第4页
第4页 / 共10页
短作业优先调度和时间片轮转调度算法_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《短作业优先调度和时间片轮转调度算法》由会员分享,可在线阅读,更多相关《短作业优先调度和时间片轮转调度算法(10页珍藏版)》请在金锄头文库上搜索。

1、电 子 科 技 大 学实 验 报 告学生姓名:胡钟文 学 号:2823103010 指导教师:罗惠琼一、实验室名称: 主楼A2-412 二、实验项目名称:进程调度算法的设计三、实验原理:短作业(进程)优先调度算法:短作业调度算法是从后备队列中选择一个或者若干个估计运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或者发生某事件而被阻塞放弃处理机时再重新调度。时间片轮转法:系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时

2、间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的队尾;然后,再把处理机分配给就绪队列中的新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一个给定的时间内均能获得一时间片的处理机执行时间。四、实验目的:通过对进程调度算法的设计,深入理解进程调度的原理五、实验内容:1编写程序实现SJ(P)F算法2编写程序实现RR算法六、实验器材(设备、元器件):装有VC+6.0的PC机一台七、实验步骤:1打开VC,设计编写程序的源代码2编译运行程序的源代码3分析检验程序的结果是否正确4总结实验结果及结论短进程优先调度源代码:#incl

3、ude stdio.hstruct sjfchar name10;float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;sjf a100;void input(sjf *p,int N) int i;printf(intput the processs name & arrivetime & servicetime:nfor exmple: a 0 100n);for(i=0;i=N-1;i+)printf(input the %dth processs i

4、nformation:n,i+1);scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.servicetime);void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)int k; printf(run order:); printf(%s,p0.name);for(k=1;k%s,pk.name); printf(nthe processs information:n); pri

5、ntf(nnametarrivetservicetstarttfinishtzztdqzzn); for(k=0;k=N-1;k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime);/排序void sort(sjf *p,int N) for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime

6、) sjf temp; temp=pi; pi=pj; pj=temp; /运行阶段void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) int k; for(k=0;k=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finisht

7、ime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; void sjff(sjf *p,int N)float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;/对结构进行初始化sort(p,N); for(int m=0;mN-1;m+) if(m=0) pm.f

8、inishtime=pm.arrivetime+pm.servicetime; else pm.finishtime=pm-1.finishtime+pm.servicetime; int i=0; for(int n=m+1;n=N-1;n+) if(pn.arrivetime=pm.finishtime)/判断内存中每次完成之后有多少到达的进程 i+; float min=pm+1.servicetime; int next=m+1;/m+1=n for(int k=m+1;km+i;k+) /找出到达后的进程中最小的进程 if(pk+1.servicetimemin) min=pk+1.

9、servicetime; next=k+1; sjf temp; temp=pm+1; pm+1=pnext; pnext=temp; deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);void main() int N; printf(-短作业优先调度算法-n); printf(input the processs number:n); scanf(%d,&N)

10、; input(a,N); sjf *b=a; sjf *c=a; sjff(b,N);时间片轮转法源代码:#include #define M 5 /物理页数#define Myprintf printf(|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|n)typedef struct PCBint ID;int ReachTime;int TotalTime;PCB;/进程号,到达时间和服务时间typedef struct NOTE /备份int ID;int TotalTime;NOTE;PCB AM; /5个进程PCB aM;NOTE temp;int que

11、ue50; /记录调度的进程int K=0;/调度进程数组的标识void INIT()/初始化int i;for(i=0;iM;i+)Ai.ID=-1;int GetNum()/计算进程数int i,j=0;for(i=0;iM;i+)if(Ai.ID!=-1)j+;return j;int GetReach(int time)/找出到达进程号int i;for(i=0;iM;i+)if(ai.ReachTime=time)ai.ReachTime=100;return i;return -1;int GetInsert()/找出插入位置int i;for(i=0;iM;i+)if(Ai.ID=-1)return i;return -1;void Forward(int num)/前移int i;for(i=0;inum-1;i+)Ai.ID=Ai+1.ID;Ai.TotalTime=Ai+1.TotalTime;Anum-1.ID=-1;void Process()/执行进程queueK=A0.ID;K+;A0.TotalTime-;temp.ID=A0.ID;temp.TotalTime=A0.TotalTime;void main()int i;int time;int t=0;int reach;int insert;in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号