作业调度(算法(c语言版))

上传人:ji****72 文档编号:37574232 上传时间:2018-04-18 格式:DOC 页数:12 大小:356.50KB
返回 下载 相关 举报
作业调度(算法(c语言版))_第1页
第1页 / 共12页
作业调度(算法(c语言版))_第2页
第2页 / 共12页
作业调度(算法(c语言版))_第3页
第3页 / 共12页
作业调度(算法(c语言版))_第4页
第4页 / 共12页
作业调度(算法(c语言版))_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《作业调度(算法(c语言版))》由会员分享,可在线阅读,更多相关《作业调度(算法(c语言版))(12页珍藏版)》请在金锄头文库上搜索。

1、作业调度算法设计思路:1每个进程有一个作业控制块(JCB)表示。进程控制块包含如下信息:作业 号、作业到达时间、作业要求服务时间、 等待时间、 开始运行时间、 结束运 行时间、周转时间、带权周转时间、优先权和是否已经完成; 2. 设置一个作业数量 num; 3由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直 到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它 所占用的 CPU 时限等因素; 4分别采用先来先服务(FCFS) ,最短作业优先(SJF) 、响应比高者优先 (HRN)的调度算法对输入进程进行调度; 5先来先服务(FCFS)对先来的作业优先处理; 6

2、最短作业优先(SJF)对已就绪作业进行短程序优先服务; 7响应比=(等待时间+需要服务时间)/需要服务时间,响应比高者优先 (HRN)是对已就绪作业进行响应比高者优先服务,以免一些程序长时间不能 被执行; 8对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、 带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各 种算法的优缺点。开始当前作业为依编号找到第一 个还没执行的作业当前作业是最后一个作业和下一个还没执行 的作业比较返回这一次要 执行的作业FCFS当前作业取较早到 达的一个YN开始当前作业为依编号找到第一 个还没执行的作业当前作业是最后一个作业和下一个还没

3、 执行的作业比较返回这一次要 执行的作业当前作业取较早到达且 服务时间较短的一个YN当前在上次作业 被执行完之前到达同时到达当前作业取服务 时间较短的一个当前作业取较早 到达的一个YNYNSJF开始当前作业为依编号找到第一 个还没执行的作业当前作业是最后一个作业和下一个还没 执行的作业比较返回这一次要 执行的作业当前作业取较早到达且 相应比较高的一个YN当前在上次作业 被执行完之前到达同时到达当前作业取相应 比较高的一个当前作业取较早 到达的一个YNYNHRN#include #include #include /*conio.h 是一个包含一些字符处理函数的头文件,如 getch(), ge

4、tch()是无显示的从键盘接收一个字符,有显示的接收是 getchar()*/typedef char string10; /* /定义 string 为含有 10 个字符元素的字符数组类型*/ struct task string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ in

5、t priority;/*优先权*/ int finish;/*是否已经完成*/ JCB5;int num; void input() int i;system(“cls“); printf(“nPlease input task number: “); scanf(“%d“, for(i=0;iJCBcurrent.priority ) current=j;/* 找出到达时间在上一个作业完成之前,优先权高的作业 */ else /* 如果作业是在上一个作业完成之后到达*/ if(JCBj.arrTimeJCBcurrent.priority) current=j; /*找出服务时间比较短的一

6、个*/ return current;/*返回当前作业*/ void runing(int i, int times, int pre, int staTime, int endTime) if(times=0) JCBi.begTime=JCBi.arrTime; JCBi.finTime=JCBi.begTime+JCBi.serTime; JCBi.turTime=JCBi.serTime; JCBi.wTuTime=1.0; staTime=JCBi.begTime; else if(JCBi.arrTimeJCBpre.finTime) JCBi.begTime=JCBi.arrTi

7、me; else JCBi.begTime=JCBpre.finTime; JCBi.finTime=JCBi.begTime+JCBi.serTime; JCBi.turTime=JCBi.finTime-JCBi.arrTime; JCBi.wTuTime=JCBi.turTime/JCBi.serTime; if(times=num-1) endTime=JCBi.finTime; JCBi.finish=1; void print(int i,int times) if(times=0) printf(“ name arrTime serTime begTime finTime tur

8、Time wTuTimen“); printf(“%9s%9d%9d%9d%9d%9df%9dfn“, JCBi.name,JCBi.arrTime,JCBi.serTime, JCBi.begTime,JCBi.finTime,JCBi.turTime,JCBi.wTuTime); void check( ) int i; int staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime; int current=0, times=0, pre=0; JCBpre.finTime=0; printf(“n

9、- FCFS -n“); for(times=0; timesnum; times+) current=FCFS(); runing(current, times, pre, staTime, endTime); print(current, times); pre=current; for(i=0; inum; i+) sumTurTime+=JCBi.turTime; sumWTuTime+=JCBi.wTuTime; aveTurTime=sumTurTime/num; aveWTuTime=sumWTuTime/num; printf(“(total) %9.2f%9.2f%9.2f%

10、9.2fn“,staTime,endTime,aveTurTime,aveWTuTime); printf(“-n“); for(i=0; inum; i+) JCBi.finish=0; staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime; current=0; times=0; pre=0; JCBpre.finTime=0; printf(“n- SJF -n“); for(times=0; timesnum; times+) current=SJF(pre); runing(current,

11、times, pre, staTime, endTime); print(current, times); pre=current; for(i=0; inum; i+) sumTurTime+=JCBi.turTime; sumWTuTime+=JCBi.wTuTime; aveTurTime=sumTurTime/num; aveWTuTime=sumWTuTime/num; printf(“(total) %9d%9d%9d%9dn“,staTime,endTime,aveTurTime,aveWTuTime); printf(“-n“); for(i=0; inum; i+) JCBi

12、.finish=0; staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime; current=0; times=0; pre=0; JCBpre.finTime=0; printf(“n- HRN -n“); for(times=0; timesnum; times+) current=HRN(pre); runing(current, times, pre, staTime, endTime); print(current, times); pre=current; for(i=0; inum; i+

13、) sumTurTime+=JCBi.turTime; sumWTuTime+=JCBi.wTuTime; aveTurTime=sumTurTime/num; aveWTuTime=sumWTuTime/num; printf(“(total) %9d%9d%9d f%9dfn“,staTime,endTime,aveTurTime,aveWTuTime); printf(“-n“); void main() char again; do system(“cls“); /*清屏*/ printf(“please input 4 groups of datas:n“); input(); check(); printf(“Continue.(Y/N): “); do again = getch(); while(again!=Y while(again=Y | again=y);

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

当前位置:首页 > 行业资料 > 其它行业文档

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