RoundRobin算法的简单实现

轮询调度算法,也就是设置一个桶的大小,规定每次的执行时间任务,然后执行下一个任务,若是任务小于桶的容量就可以将此任务执行完成,若是任务大小大于桶容量,则最多执行大小为桶容量的任务的一部分,剩下的部分下一次轮到自己再继续执行,以此类推,直到执行完所有任务。

代码如下:

package org.cloudbus.cloudsim.examples;

import java.util.*;

public class RoundRobin
{

    static void findWaitingTime(int processes[], int n,
                                int bt[], float wt[], int quantum)
    {
        float rem_bt[] = new float[n];
        for (int i = 0 ; i < n ; i++)
            rem_bt[i] =  bt[i];

        float t = 0;

        while(true)
        {
            boolean done = true;

            for (int i = 0 ; i < n; i++)
            {

                if (rem_bt[i] > 0)
                {
                    done = false;

                    if (rem_bt[i] > quantum)
                    {

                        t += quantum;
                        rem_bt[i] -= quantum;
                    }

                    else
                    {
                        t = t + rem_bt[i];
                        wt[i] = t - bt[i];
                        rem_bt[i] = 0;
                    }
                }
            }
            

            if (done == true)
                break;
        }
    }

    static float findavgTime(int processes[], int n, int bt[],
                            int quantum)
    {
        System.out.println("Let's calculate the average waiting time using process_scheduling_algorithm.RoundRobin algorithm");

        float wt[] = new float[n], tat[] = new float[n];
        float total_wt = 0, total_tat = 0;
        
        findWaitingTime(processes, n, bt, wt, quantum);

        for (int i=0; i<n; i++)
        {
            total_wt = total_wt + wt[i];
            total_tat = total_tat + tat[i];
        }
        float k = total_wt/n;
        System.out.println(total_wt+total_tat);

        return k;
    }
}
  

结果展示:

RoundRobin算法的简单实现

任务数组:bt[0]=84;    bt[1]=68;    bt[2]=2;     bt[3]=31

桶的容量:quantum=50

第一轮:rm_bt[0]=34                                                      第二轮:t=133+34=167        wt[0]=167-84=83

               rm_bt[1]=18                                                                    t=167+18=185        wt[1]=185-68=117

               rm_bt[2]=0  wt[2]=50+50=100                                        t=185                       wt[2]=100

               rm_bt[3]=0  wt[3]=50+50+2=102                                    t=185                       wt[3]=102

               t=50+50+2+31=133

      total_wt=83+117+100+102=402

      avg_wt=402/4=100.5