版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进程调度模拟设计最高响应比优先调度算法实验报告一、实验题目与要求1、实验题目:加深对作业概念的理解。深入了解批处理系统如何组织作业、管理作业和调度作业。2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。二、总的设计思想及语言环境、工具1、总的设计思想:最高响应比优先法(HRRN)是对FCFS方式和SJF方式的一种综合平衡°HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。响应比R定义如下:
2、R=(W+T)/T=1+W/T其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。2、语言环境:计算机基本配置要求:操作系统:WIN98/2000/XP/2003等Windows平台内
3、存:256MB及以上主存64KB(Memory)(以KB为单位分配)开发语言:VisualC+3、工具:Windows平台+VisualC+三、数据结构与模块说明(功能与框图)作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。当
4、进行作业调度时,从后备队列中查找选择作业。由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。实验中,作业控制块及队列的数据结构定义如下:structtaskstringname;/*作业号*/intarrTime;/*作业到达时间*/intserTime;/*作业要求服务时间*/intwaiTime;/*等待时间*/intbegTime;/*
5、开始运行时间*/-3intfinTime;/*结束运行时间*/intturTime;/*周转时间*/intwTuTime;/*带权周转时间*/intpriority;/*优先权*/intfinish;/*是否已经完成*/JCB10;存放作业控制块的区域:#definen10JCBjobtable10;intjobcount;将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int*head;实验中,内存采用可移动的动态分区管理方法,即只要内存空闲区总和比作业大就可以满足作业对内存的需求;对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获
6、得所需资源,并且执行完才归还。采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配资源。由于是实验,所以就将作业控制块出队,并输出作业名代替装入处存储器,同时修改系统的资源数量。最高响应比优先调度算法的作业调度程序流程图(如下)HRN5百度文库-好好学习,天天向上#include<>#include<>#include<>#include<>#include<>#include<>typedefcharstring10;/*d:n",i)
7、;printf("作业名称:");scanf("%s",JCB);printf("到达时间:");scanf("%d",&JCBi.arrTime);printf("服务时间:");scanf("%d",&JCBi.serTime);JCBi.priority=0;JCBi.finish=0;intHRN(intpre)intcurrent=1,i,j;/*优先权=(等待时间+服务时间)/服务时间*/for(i=0;i<num;i+)JCBi
8、.waiTime=JCBpre.finTime-JCBi.arrTime;/*等待时间=上一个作业的完成时间-到达时间*/JCBi.priority=(JCBi.waiTime+JCBi.serTime)/JCBi.serTime;for(i=0;i<num;i+)if(!JCBi.finish)current=i;/*找到第一个还没完成的作业*/break;for(j=i;j<num;j+)/*和后面的作业比较*/if(!JCBj.finish)/*还没完成(运行)*/if(JCBcurrent.arrTime<=JCBpre.finTime)/*如果作业在上一个作业完成之
9、前到达*/if(JCBj.arrTime<=JCBpre.finTime&&JCBj.priority>JCBcurrent.priority)current=j;/*找出到达时间在上一个作业完成之前,优先权高的作业*/else/*如果作业是在上一个作业完成之后到达*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j;/*找出比较早到达的一个*/if(JCBj.arrTime=JCBcurrent.arrTime)/*如果同时到达*/if(JCBj.priority>JCBcurrent.priority)curr
10、ent=j;/*找出服务时间比较短的一个*/returncurrent;/*返回当前作业*/voidruning(inti,inttimes,intpre,intstaTime,intendTime)if(times=0)JCBi.begTime=JCBi.arrTime;JCBi.finTime=JCBi.begTime+JCBi.serTime;JCBi.turTime=JCBi.serTime;JCBi.wTuTime=;staTime=JCBi.begTime;elseif(JCBi.arrTime>JCBpre.finTime)JCBi.begTime=JCBi.arrTime
11、;elseJCBi.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)endTime=JCBi.finTime;JCBi.finish=1;voidprint(inti,inttimes)if(times=0)printf("名称到达时间服务时间开始时间完成时间周转时间带权周转时间n");printf("%9
12、s%9d%9d%9d%9d%9d%9dn",JCB,JCBi.arrTime,JCBi.serTime,JCBi.begTime,JCBi.finTime,JCBi.turTime,JCBi.wTuTime);voidcheck()inti;intstaTime,endTime,sumTurTime=,sumWTuTime=,aveTurTime,aveWTuTime;intcurrent=0,times=0,pre=0;JCBpre.finTime=0;for(i=0;i<num;i+)JCBi.finish=0;staTime,endTime,sumTurTim
13、e=,sumWTuTime=,aveTurTime,aveWTuTime;current=0;times=0;pre=0;JCBpre.finTime=0;printf("n");for(i=0;i<num;i+)JCBi.finish=0;staTime,endTime,sumTurTime=,sumWTuTime=,aveTurTime,aveWTuTime;current=0;times=0;pre=0;JCBpre.finTime=0;printf("n-HRRNn");for(times=0;times<num;times+)cur
14、rent=HRN(pre);runing(current,times,pre,staTime,endTime);print(current,times);pre=current;for(i=0;i<num;i+)sumTurTime+=JCBi.turTime;sumWTuTime+=JCBi.wTuTime;ryiryiryirin/aveTurTime=sumTurTime/num;aveWTuTime=sumWTuTime/num;printf("(计与平均值)%9d%9d%9d%9dn",NULL,sumTurTime,aveTurTime,aveWTuTim
15、e);printf("n");voidmain()charagain;dosystem("cls");/*清屏*/printf("pleaseinput4groupsofdatas:n");input();check();printf("Continue.(Y/N):");doagain=getch();while(again!='Y'&&again!='y'&&again!='N'&&again!='n'
16、;);while(again='Y'|again='y');五、运行结果与运行情况-7J'G:MicrosoftVisiidIStudioCOMM0NMSDev98A,BinDebugCpp2.exe"请输入作业数量:3-1100X11N业入业达务聘到服业入业达务聘到服NO.i=:x2:22:12-382NOXNM业作£入业达务聘到服HRBN名称至Q达时间i±222Sxix2(计与平第值)服务时间101232开始时间ii22340完咸时间2i346660周转时间19123820带权周转时间Cantintie-.-<¥ZN>:六、运行结果分析:从运行结果得到调度序列结果为:X1TX2TX3X1到达时间最早,服务时间也最短,其响应比最高;X2到达时间为22,但因XI早到达,所以开始时间为22,其服务时间为12,所以响应比X1小;X3到达时间最迟,其响应比最小,所以在最后。七、自我评价与总结:本次课程设计题目较为简单,主要是对优先级和最高响应比这两个算法的理解和对进程调度的功能以及进程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瓦屋面工创新方法模拟考核试卷含答案
- 调理肉制品加工工岗前基础培训考核试卷含答案
- 皮肤管理师安全生产基础知识竞赛考核试卷含答案
- 工艺蜡染工安全技能测试模拟考核试卷含答案
- 水产养殖潜水工安全实操强化考核试卷含答案
- 印染烧毛工变革管理强化考核试卷含答案
- 压力机(生产线)操作工岗中业务能力考核试卷含答案
- 船舶电焊工变更管理评优考核试卷含答案
- 铝箔腐蚀氧化工班组安全能力考核试卷含答案
- 油船清洗工安全知识强化考核试卷含答案
- 中国人寿保险集团笔试题目
- 2026年河南中职对口升学机电类专业试题含答案
- 2026年浙江省宁波慈溪观海卫镇人民政府招聘编外13人易考易错模拟试题(共500题)试卷后附参考答案
- AI大模型训练大规模智算中心建设整体方案
- 2026年秋新教材教科版五年级科学上册教学计划及进度表
- 2026年儿科三基题库及答案
- (2026年秋)外研社版六年级英语上册单词默写表(汉译英)
- (完整版)医疗质量与安全管理培训考核试卷试题及答案
- 一年级下口算题卡2000道打印版每日100道
- 安全教育培训记录
- 2026年全国大学生市场调查大赛-通关题库【突破训练】附答案详解
评论
0/150
提交评论