概述
模拟一个简单多用户争取资源的模型,编程实现轮询调度(RR)算法。
可以自行预定义所需参数,比如参与者数目。
C语言代码实现:(初版)(有错误)
#include<stdio.h>
int main()
{
int a[1000],b[1000];
int i,j,flag=1;
int n,sjp,lun=0,time=0;
printf("输入用户数量:");
scanf("%d",&n);
printf("输入处理各用户的需求所需时间:");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("输入时间片大小:");
scanf("%d",&sjp);
for(i=0;i<n;i++)
{
b[i]=0;
}
while(flag==1)
{
flag=0;
for(i=0;i<n;i++)
{
if(a[i]<=sjp&&a[i]!=0)
{
a[i]=0;
}
else if(a[i]>sjp)
{
a[i]=a[i]-sjp;
}
if(a[i]!=0)
{
flag=1;
}
}
lun=lun+1;
time=time+n*sjp;
printf("第%d轮,总用时%dn",lun,time);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
if(a[i]==0&&b[i]==0)
{
b[i]=time;
}
}
printf("n");
}
for(i=0;i<n;i++)
{
printf("用户%d所用时间为:%dn",i+1,b[i]);
}
}
实现效果图:
C语言最终版:
#include<stdio.h>
int main()
{
int a[1000],b[1000];
int i,j,flag=1;
int n,sjp,lun=0,time=0,time2=0;
printf("输入用户数量:");
scanf("%d",&n);
printf("输入处理各用户的需求所需时间:");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("输入时间片大小:");
scanf("%d",&sjp);
for(i=0;i<n;i++)
{
b[i]=0;
}
do
{
flag=0;
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
flag=flag+1;
}
if(a[i]<=sjp&&a[i]!=0)
{
if(a[i]==sjp)
{
b[i]=time+flag*sjp;
}
else
{
b[i]=time+flag*sjp-a[i];
}
a[i]=0;
}
else if(a[i]>sjp)
{
a[i]=a[i]-sjp;
}
}
lun=lun+1;
time=time+flag*sjp;
printf("第%d轮,总用时%d,flag=%dn",lun,time,flag);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("n");
flag=0;
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
flag=flag+1;
}
}
}while(flag!=0);
for(i=0;i<n;i++)
{
printf("用户%d所用时间为:%dn",i+1,b[i]);
}
}
实现效果:
描述轮询调度(RR)算法优缺点。
传统的轮询算法对不同的分组业务流队列进行同样的无差别的循环调度服务,这样的调度方式对于等长业务流队列是公平的,但是互联网的业务流是由不定长分组流构成的,因此不同的队列就可能具有不同的分组长度,结果分组长度大的业务流队列将可能会比分组长度小的业务流队列接收更多的服务,是队列之间产生不公平的现象;而且,这种算法也无法事先对业务需要的时延保证。
最后
以上就是称心路人为你收集整理的C语言模拟轮询调度(RR)算法的全部内容,希望文章能够帮你解决C语言模拟轮询调度(RR)算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复