最高响应比调度算法代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四模拟处理机HRRN调度算法

一、实验目的:用c++设计HRRN调度算法程序。

二、实验内容:本实验随机输入的进程个数、进程名称、进程提交到系统的时间、进程运行所需时间。通过模拟程序。显示以下信息:

1)处理机对进程的调度过程。

2)计算这N个进程的平均周转时间。

三、HRRN(最高响应比调度算法)原理

最高响应比调度:在每次调度作业时,先计算后备队中每个作业的响应比,然后挑选响应比高者投入运行。响应比R定义:

R=(w+S)/S

(R:响应比,W=等待时间,S=运行时间)

响应比R= 周转时间/ 运行时间

=(运行时间+ 等待时间)/ 运行时间

= 1 +(等待时间/ 运行时间)

四、示例

如:输入

进程个数:5

进程名称到达系统时间所需服务时间

A 0 3

B 2 6

C 4 4

D 6 5

E 8 2

显示运行结果:

进程名称到达系统时间所需服务时间开始时间结束时间

A 0 3 0 3

B 2 6 3 9

C 4 4 9 13

E 8 2 13 15

D 6 5 15 20 5个进程的平均周转时间:(3+7+9+7+14)/5=8

五、运行结果

六、代码

#include #include

typedef struct Node {

char name[10];

int into;

int runtime;

int start;

int finish;

int status;

int hrrn;

int sum;

}Node;

int select(Node node[],int n) {

int i,flag=0;

for(i=0;i

{

if(0==node[i].status)

{

flag=1;

break;

}

}

if(1==flag)

return i;

else

return -1;

}

int compute(Node node,int t)

{

return (node.runtime+t-node.into)/node.runtime;

}

int main()

{

int n,i,j,max,t=0;

Node node[100];

printf("输入处理进程的个数:\n");

scanf("%d",&n);

getchar();

printf("进程名称到达系统时间所需服务时间\n");

for(i=0;i

{

scanf("%s",node[i].name);

scanf("%d",&node[i].into);

scanf("%d",&node[i].runtime);

getchar();

node[i].status=0;

if(0==i)

node[i].hrrn=0;

}

while(1)

{

int index;

index=select(node,n);

int flag=0;

if(index==-1)

break;

max=0;

for(i=0;i

{

if(node[i].into<=t&&0==node[i].status)

{

node[i].hrrn=compute(node[i],t);

if(0==i)

node[i].hrrn=0;

if(node[i].hrrn>node[max].hrrn)

max=i;

flag=1;

}

}

if(1==flag)

{

node[max].start=t;

t+=node[max].runtime;

node[max].status=1;

node[max].finish=t;

node[max].sum=node[max].finish-node[max].into;

}

else

{

t++;

}

}

for(i=0;i

{

for(j=i;j

{

if(node[j].finish>node[j+1].finish)

{

Node temp=node[j];

node[j]=node[j+1];

node[j+1]=temp;

}

}

}

printf("进程名称到达系统时间所需服务时间开始时间结束时间\n");

double sum=0;

for(i=0;i

{

printf("%s%12d%16d%12d%12d\n",node[i].name,node[i ].into,node[i].runtime,node[i].start,node[i].finish);

sum+=node[i].sum;

}

printf("平均周转时间:%.2lf\n",sum/n);

return 0;

}

相关文档
最新文档