实验五:进程调度.doc
- 文档编号:1934941
- 上传时间:2023-05-02
- 格式:DOC
- 页数:10
- 大小:160KB
实验五:进程调度.doc
《实验五:进程调度.doc》由会员分享,可在线阅读,更多相关《实验五:进程调度.doc(10页珍藏版)》请在冰点文库上搜索。
实验五:
进程调度
一、实验目的
1、理解进程调度的过程。
2、掌握各种进程调度算法的实现方法
3、通过实验比较各种进程调度算法的优劣。
进程调度算法是系统管理进程调度,提高系统性能的重要手段。
通过本次实验理解进程调度的机制,在模拟实现先来先服务FCFS、轮转RR(q=1)、最短进程优先SPN、最短剩余时间SRT、最高响应比优先HRRN算法的基础上,比较各种进程调度算法的效率和优劣,从而了解系统进程调度的实现过程。
二、实验内容
随机给出一个进程调度实例,如:
进程到达时间服务时间
A0 3
B2 6
C4 4
D6 5
E8 2
模拟进程调度,给出按照算法先来先服务FCFS、轮转RR(q=1)、最短进程优先SPN、最短剩余时间SRT、最高响应比优先HRRN进行调度各进程的完成时间、周转时间、响应比的值。
三、实验环境
PC+LinuxRedHat操作系统
GCC
四、实验原理及实验思路
1、FCFS先来先服务也可以称为是FIFO先进先出。
此策略是当前正在运行的进程停止执行时,选择在就绪队列中存在时间最长的进程运行。
这种策略执行长进程比执行短进程更好。
2、轮转这种策略是以一个周期性间隔产生时钟中断,当中断发生时,当前正在运行的进程被置于就绪队列中,然后基于FCFS策略选择下一个就绪作业运行,目的是为了减少在FCFS策略下短作业的不利情况。
3、SPN最短进程优先这种策略是下一次选择所需处理时间最短的进程。
是非抢占策略,目的也是为减少FCFS策略对长进程的偏向。
4、SRT最短剩余时间这种策略下调度器总是选择预期剩余时间最短的进程。
是抢占策略。
5、HRRN最高响应比优先当当前进程完成或被阻塞时,选择响应比R最大的就绪进程,R=(w+s)/s其中w:
等待处理器的时间,s:
期待的服务时间。
这样长进程被饿死的可能性下降。
五、流程图
六、源代码
#include
#include
voidFCFS(floatAtime[],floatStime[]);
voidSJF(floatAtime[],floatStime[]);
voidRR(floatAtime[],floatStime[]);
voidHRN(floatAtime[],floatStime[]);
main()
{
charc;
inti;
floatAtime[5]={0,2,4,6,8};
floatStime[5]={3,6,4,5,2};
for(i=0;i<5;i++)
printf("%5.2f",Atime[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%5.2f",Stime[i]);
printf("\n");
scanf("%c",&c);
switch(c)
{case'F':
FCFS(Atime,Stime);break;
case'S':
SJF(Atime,Stime);break;
case'R':
RR(Atime,Stime);break;
case'H':
HRN(Atime,Stime);break;
default:
printf("error");
}
}
voidFCFS(floatAtime[],floatStime[])
{
floatCtime[5];
floatZZtime[5];
floatDQtime[5];
inti;
Ctime[0]=Stime[0];
for(i=1;i<5;i++)
Ctime[i]=Stime[i]+Ctime[i-1];
for(i=0;i<5;i++)
printf("%5.2f",Ctime[i]);
printf("\n");
for(i=0;i<5;i++){
ZZtime[i]=Ctime[i]-Atime[i];
printf("%5.2f",ZZtime[i]);}
printf("\n");
for(i=0;i<5;i++)
{DQtime[i]=ZZtime[i]/Stime[i];
printf("%5.2f",DQtime[i]);}
printf("\n");
}
voidSJF(floatAtime[],floatStime[])
{
floatCtime[5];
floatZZtime[5];
floatDQtime[5];
inti,j;
floatm,n;
Ctime[0]=Stime[0];
ZZtime[0]=Ctime[0]-Atime[0];
DQtime[0]=ZZtime[0]/Stime[0];
for(j=1;j<=3;j++)
for(i=1;i<=4-j;i++)
if(Stime[i]>Stime[i+1])
{
m=Stime[i];Stime[i]=Stime[i+1];Stime[i+1]=m;
n=Atime[i];Atime[i]=Atime[i+1];Atime[i+1]=n;
}
for(i=0;i<5;i++)
printf("%5.2f",Atime[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%5.2f",Stime[i]);
printf("\n");
for(i=1;i<5;i++)
{
Ctime[i]=Stime[i]+Ctime[i-1];
}
for(i=0;i<5;i++)
printf("%5.2f",Ctime[i]);
printf("\n");
for(i=1;i<5;i++)
ZZtime[i]=Ctime[i]-Atime[i];
for(i=0;i<5;i++)
printf("%5.2f",ZZtime[i]);
printf("\n");
for(i=1;i<5;i++)
DQtime[i]=ZZtime[i]/Stime[i];
for(i=0;i<5;i++)
printf("%5.2f",DQtime[i]);
printf("\n");
}
voidRR(floatAtime[],floatStime[])
{
floatCtime[5];
floatZZtime[5];
floatDQtime[5];
inti,j,h,f,q;
floatt[5],k;
scanf("%d",&q);
for(i=0;i<5;i++)
{
if(q { for(j=0;j<5;j++) { k=Stime[j]/q-1; t[j]=Atime[j]+k*(5/q)+1; for(h=0;h<5;h++) { if(Stime[h] { f=h; } else Ctime[j]=t[j]; } Ctime[j]=t[j]-(k-Stime[f]); } } else { Ctime[0]=Stime[0]; for(i=1;i<5;i++) Ctime[i]=Stime[i]+Ctime[i-1]; } for(i=0;i<5;i++) ZZtime[i]=Ctime[i]-Atime[i]; for(i=0;i<5;i++) DQtime[i]=ZZtime[i]/Stime[i]; for(i=0;i<5;i++) printf("%5.2f",Ctime[i]); printf("\n"); for(i=0;i<5;i++) printf("%5.2f",ZZtime[i]); printf("\n"); for(i=0;i<5;i++) printf("%5.2f",DQtime[i]); printf("\n"); } } voidHRN(floatAtime[],floatStime[]) { floatCtime[5]; floatZZtime[5]; floatDQtime[5]; inti,j,t=1; floatm,n,k,f; Ctime[0]=Stime[0]; ZZtime[0]=Ctime[0]-Atime[0]; DQtime[0]=ZZtime[0]/Stime[0]; for(j=1;j<=3-t;j++) for(i=1;i<=4-j-t;i++) { k=Ctime[j-1]-Atime[i]; f=Ctime[j-1]-Atime[i+1]; if(k/Stime[i] { m=Stime[i];Stime[i]=Stime[i+1];Stime[i+1]=m; n=Atime[i];Atime[i]=Atime[i+1];Atime[i+1]=n; t++; } } for(i=0;i<5;i++) printf("%5.2f",Atime[i]); printf("\n"); for(i=0;i<5;i++) printf("%5.2f",Stime[i]); printf("\n"); for(i=1;i<5;i++) { Ctime[i]=Stime[i]+Ctime[i-1]; } for(i=0;i<5;i++) printf("%5.2f",Ctime[i]); printf("\n"); for(i=1;i<5;i++) ZZtime[i]=Ctime[i]-Atime[i]; for(i=0;i<5;i++) printf("%5.2f",ZZtime[i]); printf("\n"); for(i=1;i<5;i++) DQtime[i]=ZZtime[i]/Stime[i]; for(i=0;i<5;i++) printf("%5.2f",DQtime[i]); printf("\n"); } 七、运行结果及其分析 当程序运行,打印出5个进程到达时间: 02468和服务时间: 36452时,然后再输入要选择的调动服务算法F: FCFSS: SJFR: RRH: HRN可得到不同的完成情况。 5个进程完成时间,周转时间,响应比如下面各图中每行所示: FCFS的完成情况: SJF的完成情况 HRN的完成情况: 在RR的选择运行过程中出现未知问题不能显示,所以暂时没有图片
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 进程 调度
![提示](https://static.bingdoc.com/images/bang_tan.gif)