时磊5说-
实验题目:响应比最高者优先算法
一、实验目的
熟悉操作系统作业管理步骤,用 C语言编程模拟实现响应比最高者优先算法。
二、实验环境及仪器设备
硬件环境:IBM-PC或兼容机
软件环境:C语言编程环境
三、实验算法思想
最高响应比优先法(HRN,Highest Response_ratio Next) 是对FCFS方式和 SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行 时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这 两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个
作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投
入执行。
响应比R定义如下:R =(W+T)/T = 1+W/T
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者
投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,
也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。 由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,
从而米用HRN方式时其吞吐量将小于米用 SJF法时的吞吐量。另外,由于每 次调度前要计算响应比,系统开销也要相应增加
(1)等待时间相等时。贝U服务时间越短,优先级越高,符合SJF思想。
⑵服务时间相等时,贝U等待时间越长,优先级越高,符合FCFS思想。
(3)对于长作业,只要其等待时间足够长,也能获得处理机。
四、实验步骤
实验中,作业控制块及队列的数据结构定义如下:
struct task {
string name; /* 作业号 */
int arrTime; /*作业到达时间*/
int serTime; /*作业要求服务时间*/
int waiTime; /* 等待时间 */
int begTime; /*开始运行时间*/
int fin Time; /*结束运行时间*/
时磊忖呎…
时磊忖呎…
int turTime; /* 周转时间 */
int wTuTime; /*带权周转时间*/
int priority;/* 优先权 */
int finish;/*是否已经完成*/
}JCB[10];
存放作业控制块的区域:
#define n 10
JCB jobtable[10];
int jobco unt;
将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作 业的后备队列,作业队列头指针定义为:int *head;
实验中,内存采用可移动的动态分区管理方法,即只要内存空闲区总和作 业大就可以满足作业对内存的需求;对打印机和磁带机这两种独占设备采 用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。
采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必
要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配 资源。由于是实验,所以就将作业控制块出队,并输出作业名代替装入处 存储器,同时修改系统的资源数量。
时磊忖呎…
HRN
时器忖呎
五、实验清单
#in clude
#in clude
#in clude
#i nclude
#in clude
#i ncludevstri ng.h>
typedef char string[10]; /* //定义string为含有10个字符元素的字符数组类 型*/
struct task {
string name; /* 作业号 */
int arrTime; /*作业到达时间*/
int serTime; /*作业要求服务时间*/
int waiTime; /* 等待时间 */
int begTime; /*开始运行时间*/
int fin Time; /*结束运行时间*/
int turTime; /* 周转时间 */
int wTuTime; /*带权周转时间*/
int priority;/* 优先权 */
int finish;/*是否已经完成*/
}JCB[10];
int num;
void in put()
{
int i;
system("cls");
printf("\n请输入作业数量:");
scan f("%d", &nu m);
for(i=0;i
{
printf("\n 请输入作业 NO.%d:\n",i);
printf("作业名称:");
sca nf(