ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:50.14KB ,
资源ID:8693679      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8693679.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统最高响应比优先调度算法实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统最高响应比优先调度算法实验报告.docx

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

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

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

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

5、要求服务时间*/ int waiTime; /*等待时间*/ 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; /* d:n

7、,i); printf( 作业名称: ); scanf(%s,JCBi.name); 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=JCBpre.finTime-JCBi.arrTime; /*等待时间 =上一个作业的完

8、成时间-到达时间*/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(JCBj.arrTimeJCBcurrent.priority ) cu

9、rrent=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=JCBi.begTime+JCBi.serTime; J

10、CBi.turTime=JCBi.serTime; JCBi.wTuTime=; staTime=JCBi.begTime; else if(JCBi.arrTimeJCBpre.finTime) JCBi.begTime=JCBi.arrTime; else JCBi.begTime=JCBpre.finTime; JCBi.finTime=JCBi.begTime+JCBi.serTime; JCBi.turTime=JCBi.finTime-JCBi.arrTime; JCBi.wTuTime=JCBi.turTime/JCBi.serTime; if(times=num-1) endT

11、ime=JCBi.finTime; JCBi.finish=1; void print(int i,int times) if(times=0) printf( 名称 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间n); printf(%9s%9d%9d%9d%9d%9d%9dn, JCBi.name,JCBi.arrTime,JCBi.serTime, JCBi.begTime,JCBi.finTime,JCBi.turTime,JCBi.wTuTime);void check( ) int i; int staTime, endTime, sumTurTime=, sumW

12、TuTime=, aveTurTime, aveWTuTime; int current=0, times=0, pre=0; JCBpre.finTime=0; for(i=0; inum; i+) JCBi.finish=0; staTime, endTime,sumTurTime=, sumWTuTime=, aveTurTime, aveWTuTime; current=0; times=0; pre=0; JCBpre.finTime=0; printf(-n); for(i=0; inum; i+) JCBi.finish=0; staTime, endTime,sumTurTim

13、e=, sumWTuTime=, 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; sumWTuTime+=JCBi.

14、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): ); do again = getch(); while

15、(again!=Y & again!=y & again!=N & again!=n); while(again=Y | again=y);五、运行结果与运行情况六、运行结果分析:从运行结果得到调度序列结果为: X1X2X3X1到达时间最早,服务时间也最短,其响应比最高;X2到达时间为22,但因X1早到达,所以开始时间为22,其服务时间为12,所以响应比X1小;X3到达时间最迟,其响应比最小,所以在最后。七、自我评价与总结:本次课程设计题目较为简单,主要是对优先级和最高响应比这两个算法的理解和对进程调度的功能以及进程调度算法有深入的理解。在这次的课程设计中,让我感觉较为不满意的地方是,在课程设计开始之前我对于最高响应比优先法理解不熟悉,导致了响应比的计算错误,从而加大了完成代码的时间量。对于这次出现的这个问题,使我有了对程序设计的严谨性,课本基础知识的理解程度上有了更深刻的认识,也让我明白到了基础知识的重要性。完成此次课程实际之后,我对进程调度模拟设计的各种算法有了更进一步的理解,也加深了我对于C+面向对象方面的掌握,在编写程序中所遇到的问题让我有了对操作系统有了迫切要更深层次的掌握,并操作系统这门课程实在是很重要的一门课程。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1