MLFQ仅在其他类运行时起作用

时间:2019-04-23 21:22:11

标签: java eclipse process operating-system scheduling

我有一个多层次的反馈类,我不确定它在做什么-当我在它之前运行一个先占式多层次类时,它似乎只输出我想要的输出打印不同的输出。我不知道它们之间是如何连接的,是否可以实现这一点。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MultiLevelFeedback {
List<Process> processList;
private int timeQuantum1;
private int timeQuantum2;
private int count;

int j=0;
private int ganntP[];
private int ganntT[];
private int totalWaitingTime = 0;
private int totalTurnAroundTime = 0;

private float avgWatingTime = 0;
private float avgTurnaroundTime = 0;

MultiLevelFeedback(List<Process> processList, int timeQuantum1,int timeQuantum2) {
    count = processList.size();
    ganntT=new int[200];
    ganntP=new int[200];
    this.timeQuantum1 = timeQuantum1;
    this.timeQuantum2 = timeQuantum2;
    this.processList=new ArrayList<Process>();
    for(Process p : processList)
    {
        this.processList.add(new Process(p.getProcessId(), p.getArrivalTime(), p.getBurstTime(),p.getPriority()));
    }

    Collections.sort(this.processList, Process.BY_PRIORITY);


}
public void simulate() {
    int currentTime =0;
    int remainingProcess = count;
    while (remainingProcess > processList.size()/2) 
    {
        int clockTime=currentTime;
        for (int i = 0; i < count; i++) 
        {
            Process current = processList.get(i);
            if(currentTime<current.getArrivalTime())
                break;
            if (current.getStartTime() == -1)
                current.setStartTime(currentTime);
            ganntP[j]=current.getProcessId();
            ganntT[j]=currentTime;
            j++;
            if (current.getRemainingTime() <= timeQuantum1 && current.getEndTime()==-1)
            {
                current.setEndTime(currentTime + current.getRemainingTime());
                currentTime += current.getRemainingTime();
                current.setRemainingTime(0);
                remainingProcess--;
            } 
            else if (current.getRemainingTime()>timeQuantum1)
            {
                currentTime += timeQuantum1;
                current.setRemainingTime(current.getRemainingTime()-timeQuantum1);
            }

        }
        if(clockTime==currentTime)
        {
            currentTime++;
        }
    }
    while (remainingProcess > processList.size()/2) 
    {
        int clockTime=currentTime;
        for (int i = 0; i < count; i++) 
        {
            Process current = processList.get(i);
            if(currentTime<current.getArrivalTime())
                break;
            if (current.getStartTime() == -1)
                current.setStartTime(currentTime);
            ganntP[j]=current.getProcessId();
            ganntT[j]=currentTime;
            j++;
            if (current.getRemainingTime() <= timeQuantum2 && current.getEndTime()==-1)
            {
                current.setEndTime(currentTime + current.getRemainingTime());
                currentTime += current.getRemainingTime();
                current.setRemainingTime(0);
                remainingProcess--;
            } 
            else if (current.getRemainingTime()>timeQuantum2)
            {
                currentTime += timeQuantum2;
                current.setRemainingTime(current.getRemainingTime()-timeQuantum2);
            }

        }
        if(clockTime==currentTime)
        {
            currentTime++;
        }
    }           
    for(int i=0;i<count;i++)
    {
        Process current=processList.get(i);
        if(current.getRemainingTime()>0 )
        {   
            if(currentTime<current.getArrivalTime())
            {   
                currentTime=current.getArrivalTime();
                current.setStartTime(currentTime);
            }

            current.setEndTime(currentTime+current.getRemainingTime());
            currentTime+=current.getRemainingTime();
        }
    }

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

        Process current = processList.get(i);
        current.setWaitingTime(current.getEndTime()-current.getBurstTime()-current.getArrivalTime());
        current.setTurnaroundTime(current.getEndTime()  - current.getArrivalTime());

        totalWaitingTime += current.getWaitingTime();
        totalTurnAroundTime += current.getTurnaroundTime();
    }
    avgWatingTime = (float) totalWaitingTime / count;
    avgTurnaroundTime = (float) totalTurnAroundTime / count;

}

public void printResult() 
{
    System.out.println("Simulation result of MultiLevelFeedback ");
    System.out.println("PId ArrivalT BurstT Priority StartT   EndT WaitingT TurnAroundT");
    for (Process p : processList) 
    {
        System.out.println(p);
    }
    System.out.println("Average Waiting Time of MultiLevelFeedback  "
        + avgWatingTime);
    System.out.println("Average TurnAround Time of MultiLevelFeedback  "
        + avgTurnaroundTime);
    for(int i=0;i<j;i++)
    {
        System.out.println("time "+ganntT[i]+" process "+ganntP[i]);    

    }
    System.out.println();
 }
}

我很困惑,因为mlfq类中没有与抢先式多级类有关的东西-它们都是独立的算法-除非在我同时运行两者时输出是不同的。

0 个答案:

没有答案