实验二作业调度实验

上传人:re****.1 文档编号:477766915 上传时间:2023-10-07 格式:DOC 页数:22 大小:166.50KB
返回 下载 相关 举报
实验二作业调度实验_第1页
第1页 / 共22页
实验二作业调度实验_第2页
第2页 / 共22页
实验二作业调度实验_第3页
第3页 / 共22页
实验二作业调度实验_第4页
第4页 / 共22页
实验二作业调度实验_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《实验二作业调度实验》由会员分享,可在线阅读,更多相关《实验二作业调度实验(22页珍藏版)》请在金锄头文库上搜索。

1、实验二作业调度实验一. 实验目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 实验要求 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统

2、中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。3、编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 三、实验过程1.单道处理系统的作业等待模拟程序(分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 )实习代码:#include stdio.h#include stdlib.h#define getjcb(type)(type*)malloc(sizeof(type)#define NULL 0struct jcbchar name10;int htime;int ntime;char stat

3、e;struct jcb *link; *ready=NULL,*p;typedef struct jcb JCB;int input()int num,i,t=0;void sort();printf(n请输入作业个数:);scanf(%d,&num);for(i=1;iname);printf(n作业运行时间:);scanf(%d,&p-ntime);p-htime=t; p-state=w; p-link=NULL;sort();t+;return t;void sort()JCB *flag;if(ready=NULL)ready=p;elseflag=ready;while(flag

4、-link!=NULL)flag=flag-link;flag-link=p;void show()JCB *pr;printf(n*正在运行的作业是 :%s ,p-name);printf(nnamethtimetntimetstaten);printf(%st,p-name);printf(%dt,p-htime);printf(%dt,p-ntime);printf(%ct,p-state);printf(nn*就绪队列);for(pr=ready;pr!=NULL;pr=pr-link)printf(nnamethtimetntimetstaten);printf(%st,pr-nam

5、e);printf(%dt,pr-htime);printf(%dt,pr-ntime);printf(%ct,pr-state);void running()printf(n作业 %s已经完成n,p-name);free(p);main()char c;int t=0; int tb,tc,ti,wi;int tis=0,wis=0,i=0;t=input();while(ready!=NULL)c=getchar();+i;p=ready;ready=p-link;p-link=NULL;p-state=r;tb=t;show();/printf(npress any key to con

6、tinue.);c=getchar();running();tc=tb+p-ntime;/完成时间ti=tc-p-htime;/周转时间tis+=ti;wi=ti/p-ntime;/平均带权周转wis+=wi;printf(n作业 %d 开始: n, t);printf(n作业%d 完成:n,t);printf(n周转时间:%dn,ti);printf(n带权周转时间: %dn,wi);t=t+p-ntime;/printf(npress any key to continue.);c=getchar();printf(n*所有作业都已经完成);printf(n总周转时间:%dn,tis/i)

7、;printf(n总带权周转时间:%dn,wis/i);/printf(npress any key to continue.);c=getchar();运行结果: 2. 多道程序系统的作业调度模拟程序(采用基于先来先服务的调度算法)实习代码:#include #include #define getjch(type) (type*)malloc(sizeof(type) #define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/float arrivetime;/*提交时刻*/float stor

8、ageN;/*系统资源*/struct jcb* link; *ready=NULL,*pb=NULL,*p; typedef struct jcb JCB; float Tc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/float TiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/float sourceN;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void

9、running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(请输入所拥有的资源种类:);scanf(%d,&n);printf(输入系统所拥有资源数:n);for(i=0;in;i+)printf(资源%d:,i);scanf(%f,&sourcei); printf(n 输入作业数量:);scanf(%d,&num); for(i=0;iname); printf(输入提交时间:);scanf(%f,&p-arrivetime);printf(输入运行时间:);sca

10、nf(%f,&p-needtime); printf(输入所需资源数:n);for(k=0;kstoragek); printf(n); p-link=NULL; fcfs(); int space() int l=0; JCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void disp(JCB * pr) /*建立作业显示函数,用于显示当前作业*/ int i;printf(n%6st%6st%6st,作业名,运行时间,提交时刻);for(i=0;iname,pr-needtime,pr-arrivetime);for(i=

11、0;istoragei);printf(n); void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p); void check()JCB *first,*fir,*p;int flag=0,i,test=0;first=pb;while(first&(T=first-arrivetime)&(flag=0)for(i=0;i=first-storagei)sourcei=sourcei-first-storagei;elsetest=1;if(test=0)p=first;first=first-link;p-link=NULL;if(ready=NULL)ready=p;elsefir=ready;while(fir-link!=NULL)fir=fir-link;fir-link=p;elseflag=1;pb=first;void fcfs()JCB *first,*second;int ins=0;if(pb=NULL)|(p-arrivetimearrivetime)p-link=pb;pb=p;elsefirst=pb;second=first-link;while(second!=NULL)if(p-arrivetimearrivetime)p-link=second;second=NUL

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

当前位置:首页 > 学术论文 > 其它学术论文

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