操作系统处理器调度算法C程序Word文档下载推荐.docx
《操作系统处理器调度算法C程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统处理器调度算法C程序Word文档下载推荐.docx(9页珍藏版)》请在冰点文库上搜索。
cmath>
usingnamespacestd;
intmain()
{
intn,a[100],b[100];
doubles[100],m[100],T=0,W=0;
cout<
<
"
请输入作业数:
endl;
cin>
>
n;
请分别输入各作业到达系统的时间:
for(inti=0;
i<
i++)
{
b[i];
}
请分别输入各作业所运行的时间:
for(i=0;
a[i];
s[0]=0;
s[i+1]=s[i]+a[i];
m[i+1]=(s[i+1]-b[i])/a[i];
T=T+s[i+1]-b[i];
W=W+m[i+1];
}
平均周转时间为:
T/n<
平均带权周转时间为:
W/n<
return0;
4.运行与测试
1.运行程序,输入作业数,如所示。
A1启动界面
2.输入各作业到达系统的时间,如所示。
A2输入各作业到达系统的时间
3.输入各作业所运行的时间,如所示。
A3输入各作业运行的时间
二、最短作业优先算法
1.程序简介
最短作业优先算法以进入系统的作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。
这是一种非剥夺式调度算法,能克服FCFS算法偏爱长作业的缺点,易于实现,但执行效率也不高。
2.分析
1.分两种情况来介绍这种算法,一是各作业到达系统的时间都相同,二是各作业到达系统的时间不同,且以第一个作业到达系统的时间为0作基础。
2.到达系统时间都相同的情况只要累积CPU运行的时间,最后加一个排序函数即可。
3.到达系统时间不相同的情况则是要在前面FCFS的基础上加一个排序函数即可。
4.注意本程序认为第一个作业完成后,其它作业都已经到达系统了。
3.详细设计
运行程序,输入作业数,如所示。
2.输入各作业所运行的时间,如所示。
A2输入各作业所运行的时间
3.输入各作业到达系统的时间,如所示。
A3输入各作业到达系统的时间
三、优先级调度算法
优先级调度算法根据确定的优先级来选取进程/线程,总是选择就绪队列中的优先级最高者投入运行。
本实验介绍的是非剥夺式优先级调度算法,如果在就绪队列中出现优先级更高的就让当前进程/线程继续运行,直到它结束或出现等待事件而主动让出处理器,再调度另一个优先级高的进程/线程运行。
1.先定义一个二维数组a[i][0]代表各作业的优先级,a[i][1]代表各作业运行的时间。
2.输入作业数。
3.根据排序函数得出作业调度顺序。
4.最后,累积得作业周转时间和带权周转时间后分别除以作业数即可得到平均作业周转时间和平均带权周转时间。
voidB(floata[][2],intsize)
{
floatt,p;
size;
for(intj=0;
j<
size-1;
j++)
if(a[j][0]>
a[j+1][0])
t=a[j][0];
a[j][0]=a[j+1][0];
a[j+1][0]=t;
p=a[j][1];
a[j][1]=a[j+1][1];
a[j+1][1]=p;
intmain(void)
floatn,a[100][2];
doubles[100][2],m[100][2],T=0,W=0;
请分别输入各作业优先级和所运行的时间:
cin>
a[i][0]>
a[i][1];
}B(a,n);
作业调度顺序为:
for(i=0;
cout<
a[i][0]<
a[i][1]<
"
;
s[0][1]=0;
s[i+1][1]=s[i][1]+a[i][1];
m[i+1][1]=s[i+1][1]/a[i][1];
T=T+s[i+1][1];
W=W+m[i+1][1];
}cout<
4.运行与测试
1.运行程序,输入作业数,如所示。
2.输入各作业优先级和所运行的时间,如所示。
A2输入各作业的优先级和所运行的时间
四、响应比最高者优先算法
响应比最高者优先算法是介乎这两种算法之间的一种折中的非剥夺式算法,既考虑作业的等待时间,又考虑作业的处理时间,这样既照顾短作业又不会使长作业的等待时间过长,有效地改进调度的性能。
HRRF算法的缺点是每次计算各道作业的响应比会导致一定时间的开销,其性能比SJF算法略差。
1.先定义一个二维数组a[i][0]代表各作业的等待时间,a[i][1]代表各作业运行的时间,a[i][2]代表响应比-1。
voidB(doublea[][3],intsize)
doublet,p,s;
for(inti=2;
for(intj=1;
if(a[j][2]<
a[j+1][2])
s=a[j][2];
a[j][2]=a[j+1][2];
a[j+1][2]=s;
doublen,a[100][3],s[100][3],m[100][3],T=0,W=0;
请分别输入各作业等待时间和所运行的时间:
for(i=1;
a[i][2]=(a[0][1]-a[i][0])/a[i][1];
B(a,n);
m[i+1][1]=(s[i+1][1]-a[i][0])/a[i][1];
T=T+s[i+1][1]-a[i][0];
3.输入各作业等待时间和所运行的时间,如所示。
A2输入各作业等待时间和所运行的时间