




免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 作业调度实验一. 目的要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 例题:为单道批处理系统设计一个作业调度程序。 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。 调度算法的流程图如下图所示。三 . 实习题: 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。源代码:#include stdio.h#include #include #define getpch(type) (type*)malloc(sizeof(type)struct workZtme float run; /作业运行时刻 float end; /作业完成时刻 float Zt; /周转时间 float Wi; /带权周转时间;struct jcb /*定义作业控制块JCB */ char name10; /作业名 float subZtme; /作业提交时间 float runZtme; /作业所需的运行时间 /char resource; 所需资源 float Rp; /后备作业响应比 char state; /作业状态 struct workZtme wt; struct jcb* link; /链指针*jcb_ready=NULL,*j;typedef struct jcb JCB;float T=0;void sort() /* 建立对作业进行提交时间排列函数*/ JCB *first, *second; int insert=0; if(jcb_ready=NULL)|(j-subZtme)subZtme) /*作业提交时间最短的,插入队首*/ j-link=jcb_ready; jcb_ready=j; T=j-subZtme; j-Rp=1; else /* 作业比较提交时间,插入适当的位置中*/ first=jcb_ready; second=first-link; while(second!=NULL) if(j-subZtme)subZtme) /*若插入作业比当前作业提交时间短,*/ /*插入到当前作业前面*/ j-link=second; first-link=j; second=NULL; insert=1; else /* 插入作业优先数最低,则插入到队尾*/ first=first-link; second=second-link; if (insert=0) first-link=j; void SJFget()/* 获取队列中的最短作业 */ JCB *front,*minZtme,*rear; int ipmove=0; minZtme=jcb_ready; rear=minZtme-link; while(rear!=NULL) if (rear!=NULL)&(T=rear-subZtme)&(minZtme-runZtme)(rear-runZtme) front=minZtme; minZtme=rear; rear=rear-link; ipmove=1; else rear=rear-link; if (ipmove=1) front-link=minZtme-link; minZtme-link=jcb_ready; jcb_ready=minZtme;void HRNget()/* 获取队列中的最高响应作业 */ JCB *front,*minZtme,*rear; int ipmove=0; minZtme=jcb_ready; rear=minZtme-link; while(rear!=NULL) if (rear!=NULL)&(T=rear-subZtme)&(minZtme-Rp)Rp) front=minZtme; minZtme=rear; rear=rear-link; ipmove=1; else rear=rear-link; if (ipmove=1) front-link=minZtme-link; minZtme-link=jcb_ready; jcb_ready=minZtme;void input() /* 建立作业控制块函数*/ int i,num; printf(n 请输入作业数:); scanf(%d,&num); for(i=0; iname); printf(n 输入作业提交时刻:); scanf(%f,&j-subZtme); printf(n 输入作业运行时间:); scanf(%f,&j-runZtme); printf(n); j-state=w; j-link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; JCB* jr=jcb_ready; while(jr!=NULL) l+; jr=jr-link; return(l);void disp(JCB* jr,int select) /*建立作业显示函数,用于显示当前作业*/ if (select=3) printf(n 作业 运行时刻 完成时刻 周转时间 带权周转时间 n); else printf(n 作业 运行时刻 完成时刻 周转时间 带权周转时间 n); printf( |%st,jr-name); printf( |%.2ft ,jr-runZtme); if (select=3) printf( |%.2f ,jr-Rp); if (j=jr) printf( |%.2ft,jr-wt.run); printf( |%.2f ,jr-wt.end); printf( |%.2f t,jr-wt.Zt); printf( |%.2f,jr-wt.Wi); printf(n);int destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ printf(n 作业 %s 已完成.n,j-name); free(j); return(1);void check(int select) /* 建立作业查看函数 */ JCB* jr; printf(n 当前正在运行的作业是:%s,j-name); /*显示当前运行作业*/ disp(j,select); jr=jcb_ready; printf(n 当前就绪队列状态为:n); /*显示就绪队列状态*/ while(jr!=NULL) jr-Rp=(T-jr-subZtme)/jr-runZtme; disp(jr,select); jr=jr-link; destroy();void running(JCB* jr) /* 建立作业就绪函数(作业运行时间到,置就绪状态*/ if (T=jr-subZtme) jr-wt.run=T; else jr-wt.run=jr-subZtme; jr-wt.end=jr-wt.run+jr-runZtme; jr-wt.Zt=jr-wt.end-jr-subZtme; jr-wt.Wi=jr-wt.Zt/jr-runZtme; T=jr-wt.end;int main() /*主函数*/ int select=0,len,h=0; float sumZt=0,sumWi=0; input(); len=space(); /input(); printf(nt1.FCFS 2.SJF 3.HRNnn请选择作业调度算法:); scanf(%d,&select); while(len!=0)&(jcb_ready!=NULL) h+; printf(n 执行第%d个作业 n,h); j=jcb_ready; jcb_ready=j-link; j-link=NULL; j-state=R; running(j); sumZt+=j-wt.Zt; sumWi+=j-wt.Wi; check(select); if (select=2&hlen-1) SJFget(); if (select=3&hlen-1) HRNget(); printf(nn 作业已经完成.n); printf(t 此组作业的平均周转时间:%.2fn,sumZt/h); printf(t 此组作业的带权平均周转时间:%.2fn,sumWi/h);FCFS算法运行结果:SJF算法:HRN算法:优缺点:2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。源代码:#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;/*完成时刻,周转时间,带权周转时间,时间量*/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; 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() 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,*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; else test=1; if(test=0) p=first; first=first-link; p-link=NULL; if(ready=NULL) ready=p; else fir=ready; while(fir-link!=NULL) fir=fir-link; fir-link=p; else flag=1; pb=first;void FCFS() JCB *first,*second; int ins=0; if(pb=NULL)|(p-arrivetimearrivetime) p-link=pb; pb=p; else first=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; while(pr!=NULL) disp(pr); pr=pr-link; else printf(就绪队列为空队列!n); if(pb!=NULL) printf(后备队列如下:n); pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- K2教育中STEM课程实施与跨学科学习效果评估报告
- 2025年兽医基础试题及答案
- 车间安全知识培训课件时间表
- 电大西方行政制度试题及答案
- 2025年科技管理与创新专业考试试卷及答案
- 2025年新版《医疗器械监督管理条例》培训试题及答案
- 办公室工作作风和生活作风管理制度
- 车辆运输安全知识培训课件
- 隐性教学管理课件
- 手语教学第4讲课件下载
- 医疗器械生产企业GMP培训专家讲座
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 辐射及其安全防护(共38张PPT)
- 金风15兆瓦机组变流部分培训课件
- 膀胱镜检查记录
- 沈阳终止解除劳动合同证明书(三联)
- 化工装置静设备基本知识
- 电脑节能环保证书
- 美国共同基金SmartBeta布局及借鉴
- 露天矿山危险源辨识汇总
- 国家城镇救援队伍能力建设与分级测评指南
评论
0/150
提交评论