Планировщик процессов очереди приоритетов - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть задача создать планировщик процессов, который использует SJF и многоуровневые очереди с приоритетами, но теперь мне нужно улучшить стратегию. Я начал с создания самой короткой работы, первой программы, которая работает. Но теперь мне нужно реализовать многоуровневые очереди с приоритетами, чтобы в CSV-файле был столбец приоритетов с номерами 1,2,3, 3 = низкий, 2 = слабый, 1 = высокий. Я хочу иметь возможность создавать 3 отдельные очереди (я использую списки) для каждого из приоритетов. Отсюда мне нужно будет создать способ избежать голода и чтобы приоритеты с низким и средним возрастом не ожидали долго.

Я создал три отдельные очереди, но не уверен, куда идти ...

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

public class TEST
{
List<Process> processList;
private int count;
private int totalWaitingTime=0;
private int totalTurnAroundTime=0;
int j=0;
private int ganntP[];
private int ganntT[];
private float avgWatingTime=0;
private float avgTurnaroundTime=0;

// Here I want to be able to create 3 queues (made with list) for each of the priorities 
// So something like if priority = 3 add to low priority queue
List<Process> lowPriorityQueue = new ArrayList<Process>(); // PRIORITY = 3
List<Process> mediumPriorityQueue = new ArrayList<Process>(); // PRIORITY = 2
List<Process> highPriorityQueue = new ArrayList<Process>(); // PRIORITY = 1

TEST(List<Process> processList)
{
    count=processList.size();
    ganntT=new int[200];
    ganntP=new int[200];
    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_ARRIVAL_TIME);
    Collections.sort(this.processList, Process.BY_BURST_TIME);
}

public void simulate()
{
    int currentTime=0;
    int remainingProcess=count; 
    while (remainingProcess > 0)
    {
        int min=1000;
        int index=-1;
        Process current = null;

        for (int i = 0; i < count; i++) 
        {
            current = processList.get(i);

            if (current.getRemainingTime() > 0 && current.getBurstTime()<min &&current.getArrivalTime()<=currentTime )
            {   
                index=i;
                min=current.getBurstTime();
            }   
        }
        if(index==-1)
        {   currentTime++;
            continue;
        }
        current = processList.get(index);
        if (current.getStartTime()==-1) 
        {
            current.setStartTime(currentTime);
        }

        ganntP[j]=current.getProcessId();
        ganntT[j]=currentTime;
        j++;

        current.setRemainingTime(0);
        current.setEndTime(currentTime +current.getBurstTime());
        currentTime+=current.getBurstTime();
        remainingProcess--;

    }
    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()
{
    Collections.sort(this.processList, Process.BY_PROCESSID);
    System.out.println("Simulation result of SJF ");
    System.out.println("ProcessID | ArrivalTime | BurstTime | Priority | StartTime | EndTime| WaitingTime | TurnAroundTime");
    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 SJF "+avgWatingTime);
    System.out.println("Average TurnAround Time of SJF "+avgTurnaroundTime);
    for(int i=0;i<j;i++)
    {
        System.out.println("Time "+ganntT[i]+" Process "+ganntP[i]);    

    }
    System.out.println();
 }
}

В настоящее время она прекрасно работает как SJF-программа, и, как вы можете видеть, я создал три очереди, но мне нужно сделать следующее, когда я запутался

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...