c - 操作系统中的循环调度算法
问题描述
我一直在尝试了解循环概念的原理以及算法的工作原理。我曾尝试在 ubuntu 中运行此代码,但我无法得到我想要的答案。
所以基于循环调度算法;假设有3个进程。其中处理器 1 - 突发时间为 24,处理器 2 - 突发时间为 3,处理器 3 - 突发时间为 3。时间量子为 3。
根据此信息,P1 的等待时间为 6,P2 为 4,P3 为 7。因此周转时间为 P1 为 30,P2 为 7,P3 为 10。
平均周转时间为 15.6667,平均等待时间为 5.667
根据下面的代码,如果我运行它,它会返回我;等待时间 - P1 为 6,P2 为 3,P3 为 6,周转时间 P1 为 30,P2 为 6,P3 为 9。
平均周转时间为 15.0000,平均等待时间为 5.000
我无法弄清楚错误。任何人都可以帮助我解决这个问题并解释错误和解决方案吗?
#include<stdio.h>
#include<curses.h>
int main()
{
int i,j,n,bu[10],wa[10],tat[10],t,ct[10],max;
float awt=0,att=0,temp=0;
clear();
printf("Enter the no of processes -- ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nEnter Burst Time for process %d -- ", i+1);
scanf("%d",&bu[i]);
ct[i]=bu[i];
}
printf("\nEnter the size of time slice -- ");
scanf("%d",&t);
max=bu[0];
for(i=1;i<n;i++)
if(max<bu[i])
max=bu[i];
for(j=0;j<(max/t)+1;j++)
for(i=0;i<n;i++)
if(bu[i]!=0)
if(bu[i]<=t)
{
tat[i]=temp+bu[i];
temp=temp+bu[i];
bu[i]=0;
}
else
{
bu[i]=bu[i]-t;
temp=temp+t;
}
for(i=0;i<n;i++)
{
wa[i]=tat[i]-ct[i];
att+=tat[i];
awt+=wa[i];
}
printf("\n\tPROCESS\t BURST TIME \t WAITING TIME\tTURNAROUND TIME\n");
for(i=0;i<n;i++)
{
printf("\t%d \t %d \t\t %d \t\t %d \n",i+1,ct[i],wa[i],tat[i]);
}
printf("\nThe Average Turnaround time is -- %f",att/n);
printf("\nThe Average Waiting time is -- %f ",awt/n);
getch();
}
解决方案
代码返回正确答案。
所有进程都在时间 0 到达。
P1 -0-3
剩余 21 个单位
P2 -3-6
剩余 0 个单位
P3 -6-9
剩余 0 个单位
P1 -9-30
剩余 0 个单位
P1 等了 6 个单位,P2 等了 3 个单位,P3 等了 6 个单位。
请注意,等待时间是指进程等待调度程序后未执行的时间量。周转时间是进程完成其执行所花费的总时间(等待时间 + 突发时间)。
平均等待时间:(6+3+6) / 3 = 15
平均周转时间 = (30+6+9) / 3 = 15
推荐阅读
- angularjs - 使用AngularJS静态文件加载器时如何优雅地处理丢失的翻译文件?
- boost - Boost Libraries 在 Linux 上调试和发布构建
- r - How to change date value in R?
- arrays - 在 Mongodb 和 EJS 中使用数组
- orbeon - Orbeon 表单中的批量更新权限
- c# - 如何使两个数组中的元素成为条件,Linq c#
- mp4 - AAC 音频文件播放速度比正常速度快
- html - 如何使我的网站具有响应性 - 表格文本相互重叠
- java - 如何重写 document.getElementsByTagName(); 与 XPath?
- javascript - 如何修复我的项目中未加载图像和 CSS 的问题?