首页 > 解决方案 > 操作系统中的循环调度算法

问题描述

我一直在尝试了解循环概念的原理以及算法的工作原理。我曾尝试在 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();
}

标签: calgorithmoperating-system

解决方案


代码返回正确答案。

所有进程都在时间 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


推荐阅读