采用高响应比算法的进程调度程序Word文件下载.doc

上传人:wj 文档编号:1453214 上传时间:2023-04-30 格式:DOC 页数:13 大小:105.50KB
下载 相关 举报
采用高响应比算法的进程调度程序Word文件下载.doc_第1页
第1页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第2页
第2页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第3页
第3页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第4页
第4页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第5页
第5页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第6页
第6页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第7页
第7页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第8页
第8页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第9页
第9页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第10页
第10页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第11页
第11页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第12页
第12页 / 共13页
采用高响应比算法的进程调度程序Word文件下载.doc_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

采用高响应比算法的进程调度程序Word文件下载.doc

《采用高响应比算法的进程调度程序Word文件下载.doc》由会员分享,可在线阅读,更多相关《采用高响应比算法的进程调度程序Word文件下载.doc(13页珍藏版)》请在冰点文库上搜索。

采用高响应比算法的进程调度程序Word文件下载.doc

(2)培养学生结构化程序、模块化程序设计的方法和能力。

(3)提高学生调试程序的技巧和软件设计的能力.

(4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

操作系统课程设计是计算机专业重要的教学环节,它为学生提供

三、设计内容:

设计并实现一个采用高响应比算法的进程调度演示程序,响应比R定义如下:

RWT/T1W/T其中T为该作业估计需要的执行时间,为作业在后备状态队列中的等待时W间。

每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。

这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。

这种算法是介于FCFS和SJF之间的一种折中算法。

由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF法时的吞吐量。

另外,由于每次调度前要计算响应比,系统开销也要相应增加。

四、程序功能分析

在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。

于是我们想到了一种办法解决这个问题,就是引用动态优先权、并使作业的优先级随着等待时间的增加而以速率a提高,长作业在等待一定的时间后,必然有机会分配到处理机,这样长作业也得到了运行。

由此可见:

(1)如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因此该算法有利于短作业。

(2)当要求服务的时间相同时,作业的优先权取决与其等待的时间,等待时间越长,其优先权越高,因而它实现的是先来先服务。

(3)对于长作业,作业的优先权可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可以获得处理机。

五、实验原理

高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。

该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:

响应比=(等待时间+要求服务时间)/要求服务时间,即RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。

某系统有3个作业,系统确定它们在全部到达后,再开始采用响应比高者优先的调度算法,则它们的调度顺序是什么?

各自的周转时间是什么?

作业号提交时间运行时间

18.81.5

29.00.4

39.51.0

(1)如果都到达再算的话,等待时间=最后一个的提交时间-该作业到达的时刻

1:

9.5-8.8=0.7

2:

9.5-9=0.5

3:

0

所以响应比为(等待时间+要求服务时间)\要求服务时间=等待时间/要求服务时间+1

0.7/1.5+1=1.47

0.5/0.4+1=2.25

1

所以2先运行,2从9.5开始运行到9.9结束;

再以9.9时刻算响应比:

(9.9-8.8)/1.5+1=1.73

(9.9-9.5)/1+1=1.4

所以2执行完后1开始执行,从9.9执行到11.4结束

最后一个是3:

从11.4开始执行到12.4结束

(2)如果不是都到达后才运行,那么在8.8时只有作业1到达,所以先运行作业18.8+1.5(运行时间)=10.3到10.3的时候作业1完成,此时作业2和3都已到达所以计算其响应比(等待时间+要求服务时间)\要求服务时间=等待时间/要求服务时间+1

作业2:

(10.3-9.0)/0.4+1=4.325

作业3:

(10.3-9.5)/1.0+1=1.8

所以先运行作业210.3+0.4=10.7到10.7运行

作业310.7+1.0=11.7到11.7结束

高响应比函数执行过程流程图:

开始

同时到达

当前作业取较早到达的一个

当前作业取相应比较高的一个

当前作业取较早达到且响应比较高的一个

返回这一次要执行的作业

当前作业在上次作业被执行完之前到达

当前作业和下一个还没执行的作业比较

当前作业是最后一个作业

当前作业为依编号找到的第一个还未执行的作业

六、设计要求:

1.每一个进程有一个PCB,其内容可以根据具体情况设定。

2.进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定

3.可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化

4.可以在运行中显示各进程的状态:

就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)

5.采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列

6.有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间

7.具有一定的数据容错性

七、程序总设计流程图

读取进程

判断进程是否进入内存

对响应比排序高的进程先运行

等待

结束

八、程序运行结果及分析

输入两个进程a、b,在高响应比调度算法下的进程运行情况及各进程的性能分析如下:

输入四个进程A、B、C、D在高响应比算法下的调度顺序,通过响应比(优先权)的比较,判断进程调度的次序,提高的进程的调度性能。

且高响应比调度算法适合于批处理操作。

九、结论

通过本次实验对用高响应比算法的优先调度算法有了更深入的理解和掌握,进一步巩固和复习操作系统的基础知识,更进一步的了解了结构化模块化程序设计的方法,提高了调试程序的技巧。

同时使我们对进程调度模拟设计的各种算法有了更进一步的理解,在编写程序时所遇到的问题让我有了对操作系统更深层次的理解和掌握,知道操作系统这门课程实在是很重要的一门课程。

十、源代码

#include<

stdio.h>

inte=0;

structP

{

charname[10];

floatarrtime;

floatsertime;

floatstartime;

floatfinishtime;

floatzztime;

floatdqzztime;

floatpower;

};

Pa[100];

voidinput(P*,int);

voidmove(P*,int);

voidwork(P*,int);

voidGxyb(P*,int);

voidrate(P*,float);

voidmain()

{

intN;

printf("

\t***********欢迎进入高响应比调度算法模拟界面**********\n"

);

请输入进程的个数:

"

scanf("

%d"

&

N);

input(a,N);

Gxyb(a,N);

}

voidinput(P*p,intN)

inti;

for(i=0;

i<

=N-1;

i++)

{

printf("

\n\t请输入第%d个进程的名字,到达时间,要求服务的时间:

\n"

i+1);

scanf("

%s%f%f"

p[i].name,&

p[i].arrtime,&

p[i].sertime);

}

voidwork(P*p,intN)

for(inti=0;

N-1;

for(intj=i+1;

j<

N;

j++)

if(p[i].arrtime>

p[j].arrtime)

{

Ptemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

else

if(p[i].arrtime==p[j].arrtime)

{ if(p[i].sertime>

p[j].sertime)

{ Ptemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

voidrate(P*p,intN)

{ ++e;

for(intm=N-1;

m>

=e;

m--)

if(p[m].arrtime<

=p[e-1].finishtime)

p[m].power=(p[e-1].finishtime-p[m].arrtime+p[m].sertime)/p[m].sertime;

for(inti=e;

if(p[i].power<

p[j].power)

voidmove(P*p,intN)

intk;

\n高响应比调度的顺序:

%s"

p[0].name);

for(k=1;

k<

k++)

->

p[k].name);

\n各进程运行的详细信息如下:

名称到达时间服务时间开始时间结束时间周转时间带权周转时间\n"

for(k=0;

{

%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n"

p[k].name,p[k].arrtime,p[k].sertime,p[k].startime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

voiddeal(P*p,intN)

if(k==0)

{

p[k].startime=p[k].arrtime;

p[k].finishtime=p[k].arrtime+p[k].sertime;

}

else

{ if(p[k].arrtime<

p[k-1].finishtime)

p[k].startime=p[k-1].finishtime;

p[k].startime=p[k].arrtime;

p[k].finishtime=p[k].startime+p[k].sertime;

p[k].zztime=p[k].finishtime-p[k].arrtime;

p[k].dqzztime=p[k].zztime/p[k].sertime;

voidGxyb(P*p,intN)

{ inti=0,n;

floatarrtime=0,sertime=0,startime=0,finishtime=0,zztime=0,dqzztime=0;

各进程的运行情况如下:

work(p,N);

for(intm=0;

m<

m++)

if(m==0)

{

p[m].finishtime=p[m].arrtime+p[m].sertime;

printf("

\n在第%-.0f时刻进程信息\n"

p[m].arrtime);

%s\t正在运行\n"

p[m].name);

for(n=m+1;

n<

n++)

{ if(p[n].arrtime==p[m].arrtime)

{

printf("

%s\t进程已到达\n"

p[n].name);

}

else

%s\t进程未到达\n"

{ rate(p,N);

if(p[m].arrtime<

=p[m-1].finishtime)

{

p[m].finishtime=p[m-1].finishtime+p[m].sertime;

printf("

p[m-1].finishtime);

for(n=m+1;

{ if(p[n].arrtime<

=p[m-1].finishtime)

printf("

else

{ p[m].finishtime=p[m].arrtime+p[m].sertime;

{

if(p[n].arrtime<

=p[n-1].arrtime)

{

}

for(intl=0;

l<

m;

l++)

{

%s\t进程已完成\n"

p[l].name);

}

deal(p,N);

move(p,N);

致谢

感谢老师您的指导!

13

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2