欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    实验二作业调度实验.doc

    • 资源ID:9972929       资源大小:121KB        全文页数:22页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验二作业调度实验.doc

    实验二作业调度实验一. 实验目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 实验要求 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。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 state;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;i<=num;i+)printf("n作业 %d",i);p=(JCB*)malloc(sizeof(JCB);printf("n作业名:");scanf("%s",p->name);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->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->name);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 continue.");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);printf("n总带权周转时间:%dn",wis/i);/printf("npress any key to continue.");c=getchar();运行结果: 2. 多道程序系统的作业调度模拟程序(采用基于先来先服务的调度算法)实习代码:#include <stdio.h>#include <stdlib.h> #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;/*完成时刻,周转时间,带权周转时间,时间量*/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("请输入所拥有的资源种类:");scanf("%d",&n);printf("输入系统所拥有资源数:n");for(i=0;i<n;i+)printf("资源%d:",i);scanf("%f",&sourcei); printf("n 输入作业数量:");scanf("%d",&num); for(i=0;i<num;i+) printf("n 作业号%d:n",i);p=getjch(JCB); printf("输入作业名:");scanf("%s",p->name); printf("输入提交时间:");scanf("%f",&p->arrivetime);printf("输入运行时间:");scanf("%f",&p->needtime); printf("输入所需资源数:n");for(k=0;k<n;k+)printf("资源%d:",i);scanf("%f",&p->storagek); 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;i<n;i+)printf("资源%dt",i);printf("n%6st%6.2ftt%6.2ft",pr->name,pr->needtime,pr->arrivetime);for(i=0;i<n;i+)printf("t%6.2f",pr->storagei);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<n;i+)if(sourcei>=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->arrivetime<pb->arrivetime)p->link=pb;pb=p;elsefirst=pb;second=first->link;while(second!=NULL)if(p->arrivetime<second->arrivetime)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;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;elseprintf("后备队列为空队列!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;i<n;i+)sourcei=sourcei+p->storagei;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;check();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(T<pb->arrivetime)T=pb->arrivetime;check();len=space(); printf("n该作业组的平均周转时间:%4.2fn",TiSum /len); printf("该作业组的带权平均周转时间:%4.2fn",WiSum/len);ch=getchar(); 运行结果:3.多道程序系统的作业调度模拟程序。 (采用基于优先级的作业调度) 实习代码:#include <stdio.h>#include <stdlib.h> #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;/*完成时刻,周转时间,带权周转时间,时间量*/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("请输入所拥有的资源种类:");scanf("%d",&n);printf("输入系统所拥有资源数:n");for(i=0;i<n;i+)printf("资源%d:",i);scanf("%f",&sourcei); printf("n 输入作业数量:");scanf("%d",&num); for(i=0;i<num;i+) printf("n 作业号%d:n",i);p=getjch(JCB); printf("输入作业名:");scanf("%s",p->name); printf("输入提交时间:");scanf("%f",&p->arrivetime);printf("输入运行时间:");scanf("%f",&p->needtime); printf("输入所需资源数:n");for(k=0;k<n;k+)printf("资源%d:",i);scanf("%f",&p->storagek); 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;i<n;i+)printf("资源%dt",i);printf("n%6st%6.2ftt%6.2ft",pr->name,pr->needtime,pr->arrivetime);for(i=0;i<n;i+)printf("t%6.2f",pr->storagei);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<n;i+)if(sourcei>=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->arrivetime<pb->arrivetime)p->link=pb;pb=p;elsefirst=pb;second=first->link;while(second!=NULL)if(p->arrivetime<second->arrivetime)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;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;elseprintf("后备队列为空队列!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;i<n;i+)sourcei=sourcei+p->storagei;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;check();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(T<pb->arrivetime)T=pb->arrivetime;check();len=space(); printf("n该作业组的平均周转时间:%4.2fn",TiSum /len); printf("该作业组的带权平均周转时间:%4.2fn",WiSum/len);ch=getchar(); 运行结果:调

    注意事项

    本文(实验二作业调度实验.doc)为本站会员(土8路)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开