




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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=nu
12、ll)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=null;first-link=p;ins=
13、1;else first=first-link; second=second-link;if(ins=0)first-link=p;void running()jcb *pr;int i;printf(正在运行的作业是:%sn,p-name);disp(p);if(ready!=null)printf(就绪队列如下:n);pr=ready;while(pr!=null)disp(pr);pr=pr-link;elseprintf(就绪队列为空队列!n);if(pb!=null)printf(后备队列如下:n);pr=pb;while(pr!=null)disp(pr);pr=pr-link;e
14、lseprintf(后备队列为空队列!n);printf(作业%s的开始运行时刻t:%4.2fn,p-name,t);tc=t+p-needtime;t=tc;ti=tc-p-arrivetime;wi=ti/(p-needtime);for(i=0;istoragei;printf(完成时刻tc:%4.2fn,tc);printf(周转时间ti:%4.2fn,ti);printf(带权周转时间wi:%4.2fn,wi);tisum+=ti;wisum+=wi;destroy();main() /主函数int len; char ch;input(); t=pb-arrivetime;chec
15、k();len=space(); while(len!=0)&(ready!=null) system(pause);p=ready; ready=p-link; p-link=null; running();if(pb!=null)if(ready=null)if(tarrivetime)t=pb-arrivetime;check();len=space(); printf(n该作业组的平均周转时间:%4.2fn,tisum /len); printf(该作业组的带权平均周转时间:%4.2fn,wisum/len);ch=getchar(); 运行结果:3.多道程序系统的作业调度模拟程序。
16、(采用基于优先级的作业调度) 实习代码:#include #include #define getjch(type) (type*)malloc(sizeof(type) #define n 10struct jcb /* 定义作业控制块pcb */ char name10; float needtime; /*运行时间*/float arrivetime;/*提交时刻*/float storagen;/*系统资源*/struct jcb* link; *ready=null,*pb=null,*p; typedef struct jcb jcb; float tc,ti,wi,t=0;/*完
17、成时刻,周转时间,带权周转时间,时间量*/float tisum=0,wisum=0;/*平均周转时间,带权a平均周转时间*/float sourcen;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(jcb *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(请输入所拥有的资源
18、种类:);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(输入运行时间:);scanf(%f,&p-needtime); printf(输入所需资源数:n);for(k=0;kstoragek); printf(n); p-link=null; fcfs(); int space()
19、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=0;istoragei);printf(n); void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p); void check()jcb *first,*fir,
20、*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()j
21、cb *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=null;first-link=p;ins=1;else first=first-link; second=second-link;if(ins=0)first-link=p;void running()jcb *pr;int i;printf(正在运行的作业是:%sn,p-name);disp(p);if(ready!=null)printf(就绪队列如下:n);pr=ready;whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能赋能高校辅导员个性化服务的实施策略
- 影视产业赋能区域经济发展的现状及总体形势
- 高二新课程全解析
- 春节营销与人资并进
- 共筑校园安全墙
- 电化学储能电站项目投资估算
- 健康教育质控检查总结
- 2025合作协议:技术股东合作合同
- 腹外疝医学进展
- 关注睡眠健康教育座谈会
- 安徽省合肥八中2025届高三最后一卷历史试题及答案
- 2025年四川省成都市初中学业水平考试生物试题(无答案)
- 计算机系统的故障与维护技巧试题及答案
- 领养猫合同协议书范本
- 2025年地理信息系统与应用考试试题及答案
- 2025国家开放大学电大【信息管理概论】形考12答案 及 一体化终结性测试答案
- 河南省烟草专卖局(公司)笔试试题2024
- 四川省绵阳市名校联盟2025届八年级物理第二学期期末复习检测试题含解析
- 2025-2030中国烘焙食品行业市场发展分析与发展趋势及投资风险研究报告
- 《无脊椎动物的演化》课件
- 建筑施工资料员培训课件:提升工程档案管理技能
评论
0/150
提交评论