操作系统最高响应比优先调度算法实验报告_第1页
操作系统最高响应比优先调度算法实验报告_第2页
操作系统最高响应比优先调度算法实验报告_第3页
操作系统最高响应比优先调度算法实验报告_第4页
操作系统最高响应比优先调度算法实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、进程调度模拟设计最高响应比优先调度算法实验报告一、实验题目与要求1、实验题目:加深对作业概念的理解。深入了解批处理系统如何组织作业、管理作业和调度作业。2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。二、总的设计思想及语言环境、工具1、总的设计思想:最高响应比优先法(hrrn)是对fcfs方式和sjf 方式的一种综合平衡。hrrn调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比r定义如下: r=

2、(w+t)/t=1+w/t 其中t为该作业估计需要的执行时间,w为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中r最大者投入执行。这样,即使是长作业,随着它等待时间的增加,w/t也就随着增加,也就有机会获得调度执行。这种算法是介于fcfs和sjf 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于sjf 法,从而采用hrrn 方式时其吞吐量将小于采用sjf 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。2、语言环境:计算机基本配置要求:操作系统:win 98/2000/xp/2003 等wind

3、ows平台内存:256mb及以上主存64kb(memory)(以kb为单位分配)开发语言:visual c+ 6.03、工具:windows平台visual c+ 6.0 三、数据结构与模块说明(功能与框图)作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(jcb ),并将系统中等待作业调度的作业控制块组织成

4、一个队列,这个队列称为后备队列。当进行作业调度时,从后备队列中查找选择作业。由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。实验中,作业控制块及队列的数据结构定义如下:struct task string name; /*作业号*/int arrtime; /* 作业到达时间*/int sertime; /*作业要求服务时间*/int wa

5、itime; /*等待时间*/int begtime; /*开始运行时间*/int fintime; /*结束运行时间*/int turtime; /*周转时间*/int wtutime; /*带权周转时间*/int priority;/*优先权*/int finish;/*是否已经完成*/jcb10;存放作业控制块的区域:#define n 10jcb jobtable10;int jobcount; 将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int *head;实验中,内存采用可移动的动态分区管理方法,即只要内存空闲区总和比作业大就可以满

6、足作业对内存的需求;对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配资源。由于是实验,所以就将作业控制块出队,并输出作业名代替装入处存储器,同时修改系统的资源数量。最高响应比优先调度算法的作业调度程序流程图(如下)四、参考源程序:#include#include#include#include#include#includetypedef char string10; /* /定义string为含有10个字符元素的字符数组

7、类型*/struct task string name; /*作业号*/int arrtime; /* 作业到达时间*/int sertime; /*作业要求服务时间*/int waitime; /*等待时间*/int begtime; /*开始运行时间*/int fintime; /*结束运行时间*/int turtime; /*周转时间*/int wtutime; /*带权周转时间*/int priority;/*优先权*/int finish;/*是否已经完成*/jcb10;int num; void input()int i; system(cls);printf(n请输入作业数量:

8、);scanf(%d, &num);for(i=0;inum;i+)printf(n请输入作业 no.%d:n,i);printf( 作业名称: );scanf(%s,jcb);printf( 到达时间: );scanf(%d,&jcbi.arrtime);printf( 服务时间: );scanf(%d,&jcbi.sertime);jcbi.priority = 0;jcbi.finish =0;int hrn(int pre)int current=1,i,j;/* 优先权 =(等待时间+服务时间)/服务时间*/for(i=0; inum; i+)jcbi.waitime=j

9、cbpre.fintime-jcbi.arrtime; /*等待时间 =上一个作业的完成时间-到达时间*/jcbi.priority=(jcbi.waitime+jcbi.sertime)/jcbi.sertime;for(i=0; inum; i+)if(!jcbi.finish)current=i; /*找到第一个还没完成的作业*/break;for( j=i; jnum; j+) /*和后面的作业比较*/if( !jcbj.finish) /* 还没完成(运行)*/if(jcbcurrent.arrtime=jcbpre.fintime) /*如果作业在上一个作业完成之前到达*/if(j

10、cbj.arrtimejcbcurrent.priority )current=j;/* 找出到达时间在上一个作业完成之前,优先权高的作业*/else /* 如果作业是在上一个作业完成之后到达*/if(jcbj.arrtimejcbcurrent.priority)current=j; /*找出服务时间比较短的一个*/return current;/*返回当前作业*/void runing(int i, int times, int pre, int statime, int endtime)if(times=0)jcbi.begtime=jcbi.arrtime;jcbi.fintime=j

11、cbi.begtime+jcbi.sertime; jcbi.turtime=jcbi.sertime;jcbi.wtutime=1.0;statime=jcbi.begtime;elseif(jcbi.arrtimejcbpre.fintime) jcbi.begtime=jcbi.arrtime; elsejcbi.begtime=jcbpre.fintime; jcbi.fintime=jcbi.begtime+jcbi.sertime;jcbi.turtime=jcbi.fintime-jcbi.arrtime; jcbi.wtutime=jcbi.turtime/jcbi.serti

12、me;if(times=num-1)endtime=jcbi.fintime;jcbi.finish=1;void print(int i,int times)if(times=0)printf( 名称 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间n);printf(%9s%9d%9d%9d%9d%9d%9dn,jcb,jcbi.arrtime,jcbi.sertime,jcbi.begtime,jcbi.fintime,jcbi.turtime,jcbi.wtutime);void check( )int i;int statime, endtime, sumt

13、urtime=0.0, sumwtutime=0.0, aveturtime, avewtutime;int current=0, times=0, pre=0; jcbpre.fintime=0; for(i=0; inum; i+)jcbi.finish=0;statime, endtime,sumturtime=0.0, sumwtutime=0.0, aveturtime, avewtutime;current=0; times=0; pre=0;jcbpre.fintime=0; printf(-n);for(i=0; inum; i+)jcbi.finish=0; statime,

14、 endtime,sumturtime=0.0, sumwtutime=0.0, aveturtime, avewtutime;current=0; times=0; pre=0;jcbpre.fintime=0; printf(n- hrrn -n);for(times=0; timesnum; times+)current=hrn(pre);runing(current, times, pre, statime, endtime);print(current, times);pre=current;for(i=0; inum; i+) sumturtime+=jcbi.turtime;su

15、mwtutime+=jcbi.wtutime;aveturtime=sumturtime/num;avewtutime=sumwtutime/num;printf(计与平均值) %9d%9d%9d%9dn,null,sumturtime,aveturtime,avewtutime);printf(-n);void main()char again;do system(cls); /*清屏*/ printf(please input 4 groups of datas:n);input();check();printf(continue.(y/n): );doagain = getch();while(again!=y & again!=y & again!=n & again!=n);while(again=y | again=y);五、 运行结果与运行情况六、运行结果分析:从运行结果得到调度序列结果为: x1x2x3x1到达时间最早,服务时间也最短,其响应比最高;x2到达时间为22,但因x1早到达,所以开始时间为22,其服务时间为12,所以响应比x1小;x3到达时间最迟,其响应比最小,所以在最后。七、自我评价与总结:本次课程设计题目较为简单,主要是对优先级和最高响应比这两个算法的理解和对进程调度的功能以及进程调度算法有深入的理

温馨提示

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

评论

0/150

提交评论