广工大操作系统实验报告-作业调度_第1页
广工大操作系统实验报告-作业调度_第2页
广工大操作系统实验报告-作业调度_第3页
广工大操作系统实验报告-作业调度_第4页
广工大操作系统实验报告-作业调度_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上作业调度模拟程序一、 实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。二、 实验内容和要求为单道批处理系统设计一个作业调度程序(1)编写并调试一个单道处理系统的作业调度模拟程序。(2)作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。I. 先来先服务:就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建进程,然后放入就绪队列,投入运行,一直运行到完成或发生某事件而阻塞

2、后,才放弃处理。II. 最短作业优先:是从后备队列中选择一个估计运行时间最短的作业,将它调入内存运行并一直执行到完成,或发生某事件而被阻塞放弃处理时,再重新调度。III. 响应比高者优先:是通过计算出作业的响应比,按响应比高而进行调度的,其计算公式是:优先权(等待时间+要求服务时间)/要求服务时间.(3)由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。(4)每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等

3、。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。(5)对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。三、 实验主要仪器设备和材料硬件环境:IBM-PC或兼容机软件环境:C语言编程环境四、 实验原理及设计方案调度也称dispatcher,这是内核的主要职责之一。一个良好的任务调度算法应该主要体现在以下几个方面:1.公平:保证每个进程得到合理的CPU 时间;2.高效:使CPU 保持忙碌状态,即总是有进程在CPU 上运行;3

4、.响应时间:使交互用户的响应时间尽可能短;4.周转时间:使批处理用户等待输出的时间尽可能短;5.吞吐量:使单位时间内处理的进程尽可能多;很显然在任何操作系统中这几个目标不可能同时达到所以不同的。操作系统会在这几个方面中做出相应的取舍从而确定自己的调度算法,常用的处理机调度算法有:先来先服务FCFS、短作业优先SJF、优先级、时间片轮转法、多级队列法、多级反馈队列法。(1)先来先服务(FCFS)FCFS 是最简单的CPU 调度算法,即按进程到来的先后次序进行调度,这样在系统中等待时间最长的进程被优先调度,而不管其所需运行时间的长短。(2)作业优先SJF 算法是指当CPU 可供使用时SJF 算法把

5、CPU 分给需要运行时间最短的进程。(3)时间片轮转调度法当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间叫做时间额度quantum ,然后切换给另一个任务也叫做时间片调度time slicing ,内核在满足以下条件时把CPU 控制权交给下一个就绪态的任务, 当前任务已无事可做,当前任务在时间片还没结束时已经完成了。轮转法主要是为分时系统设计的,其中时间片是一个重要的参数,不能取的过大或过小,通常为10 至100ms 数量级,就绪队列可以看成是一个环形队列,CPU 调度程序轮流地把CPU 分给就绪队列中地每个进程。五、 流程图开始初始化作业JCB和资源source,所

6、有作业按照先后顺序排列,作业提交时间为系统默认时间p-ptime=Systemtim,作业完成时间p-ftime=0作业调度算法?312用响应比高优先算法,先计算所有作业高响应比,调度队响应比最高的首作业投入运行,更改作业状态为R,记录作业开始运行时间和完成时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间用短作业算法调度需求时间最短的作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间用先来先服务算法调度队首作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完

7、成时刻,周转时间和带权周转时间释放该作业占用资源Y作业运行完毕?等待队列空?NNYY结束计算并打印这组作业的平均周转时间及带权平均周转时间等待队列空?作业运行完毕?计算并打印这组作业的平均周转时间及带权平均周转时间结束六、 结果过程及截图主程序菜单 先来先服务算法 单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源:同样,第二轮调度,作业22222完成,如下显示:同样,第三轮调度,作业33333完成,如下显示:全部

8、作业运行完毕,计算总的平均周转时间和带权周转时间: 短作业优先算法单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源:同样,第二轮调度,作业33333完成,输出作业完成时间、周转时间、带权周转时间、释放的资源:同样,第三轮调度,作业22222完成,输出作业完成时间、周转时间、带权周转时间、释放的资源:全部作业运行完毕,计算总的平均周转时间和带权周转时间: 响应比高者优先算法单道作业批处理系统初始化,输入三个作业,按

9、照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,11111调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源:第二轮作业调度完毕,22222已经完成,输出作业完成时间、周转时间、带权周转时间、释放的资源:全部作业运行完毕,计算总的平均周转时间和带权周转时间:七、 所遇困难的解决以及心得体会1)测试的数据必须是符合JCB模块中相同类型的,如在源码中式int类型的,而在测试的时候输入float类型就出错。2)各个库函数的运用需要掌握相应的功能,否则会照成代码冗余、繁杂、不优化等各种问题。3)通常在dos下运用的

10、都是英文,而想要用汉字提示就必须考虑一些问题。在源码中我们用制表符(t)来控制提示,输出的数字是不能与之对齐的,所以我们要将“t”改成空格。4)在编写和调试程序时,为了尽快调通程序应该按照流程图的结构(保证流程图思路是对的情况下)来建立编程思路。八、 源代码专心-专注-专业#include #include #include #define getpch(type) (type*)malloc(sizeof(type) int Select;int Systemtime = 0; /*系统初始时间*/int JCBnum = 0; /*总作业数*/int JCBtime = 0; /*总周转时

11、间*/double JCBtotaltime =0; /*总带权周转时间*/struct source /*定义资源需求结构*/char memery5; /*主存需求*/int machine; /*磁带机数量*/;struct jcb /* 定义作业控制块PCB */ char name10; char state; /* 状态 */ double super; /* 响应比优先权 */ int ntime; /* 需要运行时间 */ int rtime; /* 开始运行时间 */int ptime; /*提交时间*/int ftime; /*完成时间*/ source *needsour

12、ces; /*资源需求链*/ struct jcb* link; /* 下一个作业控制块的地址 */*ready=NULL,*run,*p; typedef struct jcb JCB;typedef struct source SOURCE;void display() int c; do system(cls); printf(ntt n); printf(ntt*tt); printf(nttt 1.先来先服务算法.); printf(nttt 2.最短作业优先算法.); printf(nttt 3.响应比高者优先算法); printf(nttt 0.退出程序.); printf(nt

13、t*ttn); printf(ttt请输入选择所要操作(0-3):); scanf(%d,&c); system(cls); while(c3) ; switch(c) case 0: exit(0); break; case 1: Select=1; break; case 2: Select=2; break; case 3: Select=3; break; default: break; void sort() /* 建立对进程进行优先级排列函数*/ JCB *first, *second,*temp; int insert=0; switch(Select)case 1: /*先来先

14、去服务算法*/if(ready=NULL) /*队首空插入队首*/p-link=ready;ready=p;else /*否则插入队尾*/first=ready;second=ready-link;while(second!=NULL)first=first-link;second=second-link;first-link=p;break;case 2: /*最短作业优先算法*/ if(ready=NULL)|(p-ntime)ntime) /*队首*/ p-link=ready; ready=p; else /* 往后搜索适当的位置插入*/ first=ready; second=fir

15、st-link; while(second!=NULL) /*插入队伍中间*/ if(p-ntime)ntime) p-link=second; first-link=p; second=NULL; insert=1; else first=first-link; second=second-link; if(insert=0) first-link=p; /* 插入队尾*/ break;case 3: /*响应比高者优先算法*/ /*响应比=(等待时间+需求时间)/需求时间*/ temp=ready;p-super=(double)(Systemtime-p-ptime+p-ntime)/(

16、double)(p-ntime); /*计算插入队列作业优先权*/ while(temp) /*计算就绪队列作业优先权*/ temp-super=(double)(Systemtime-temp-ptime+temp-ntime)/(double)(temp-ntime);temp=temp-link; /*响应比越大优先权越高*/ if(ready=NULL)|(p-super)(ready-ntime) /*队首*/ p-link=ready; ready=p; else /* 往后搜索适当的位置插入*/ first=ready; second=first-link; while(seco

17、nd!=NULL) /*插入队伍中间*/ if(p-super)(second-super) p-link=second; first-link=p; second=NULL; insert=1; else first=first-link; second=second-link; if(insert=0) first-link=p; /* 插入队尾*/ break; default:break; void input() /* 建立作业输入函数*/ int i,num;SOURCE *q; printf(nn请输入作业数目:); scanf(%d,&num); JCBnum+=num; /*

18、总作业数*/ for(i=0;iname); getchar(); printf(请输入作业需要运行时间:);scanf(%d,&p-ntime); getchar(); printf(请输入作业主存资源需求:); scanf(%s,q-memery); getchar(); printf(请输入作业磁带机数量需求:); scanf(%d,&q-machine);p-needsources=q;p-ptime=Systemtime; /*作业提交时间为系统默认时间*/p-super=0; p-ftime=0; /*作业完成时间*/ p-state=W; p-link=NULL;sort();

19、void disp(JCB *pr) /*建立作业显示函数*/ printf(n 作业名 提交时间 需求时间 响应比 即时状态 主存需求 磁带机数量 n); printf( %st,pr-name); printf( %dt,pr-ptime); printf( %dt,pr-ntime); printf( %.2ft,pr-super); printf( %ct,pr-state); printf( %st,pr-needsources-memery); printf( %dt,pr-needsources-machine); printf( n); void check() /* 建立作业

20、查看函数 */ JCB* pr; printf(n *当前正在运行的作业*); /*显示当前运行作业*/ disp(run); pr=ready; printf(n *当前就绪队列状态*); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立作业撤销函数)*/ JCB *pr=run;run-ftime=Systemtime; printf(ntt 【作业 %s 已完成.】n,run-name); printf(n 开始时间 完成时间 周转时间 带权周转时间 释放主存资源 释放磁带机数量n); printf( %dt,run-rtime); printf( %dt,run-ftime); printf( %dt,Systemtime-run-ptime); printf( %ft,(double)(Systemtime-run-ptime)/(double)run-ntime); printf( %st,run-needsources-memery);printf( %dt,run-needsources-machine); printf( n); JCBtime

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论