Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package SO1;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.LinkedList;
- import java.util.List;
- public class Processor
- {
- private static List<Process> queue = new LinkedList<>();
- private static List<Process> waitingTime = new ArrayList<>();
- public static Procedure procedure;
- private static int generalTime =0;
- public static boolean canContinue = true;
- private static Process current;
- private static int timeQuantum=0;
- public static void setTimeQuantum(int q)
- {
- timeQuantum=q;
- }
- public static void addProcessToQueue(Process p)
- {
- p.set_addTime(generalTime);
- if(procedure==Procedure.SJFW && current!=null)
- {
- if(p.getTime() < current.getTime())
- {
- canContinue = false;
- queue.add(0,p);
- }
- }
- if(procedure==Procedure.SJF || ( procedure==Procedure.SJFW && canContinue))
- {
- int i =0;
- while (i<queue.size() && p.getTime()>=queue.get(i).getTime())
- i++;
- queue.add(i,p);
- }
- else if(procedure==Procedure.FCFS || procedure==Procedure.ROT)
- {
- queue.add(p);
- }
- }
- private static void executeProcess() //wykonywanie wszystkich procesow oprocz ROT
- {
- if(!canContinue)
- canContinue=true;
- while (current.getTime()>0)
- {
- if(!canContinue)
- return;
- generalTime++;
- current.executePart();
- ProcessorManager.checkIfIsSomeNewProcess();
- }
- }
- private static void executeProcessROT()
- {
- if(!canContinue)
- canContinue=true;
- for(int i=0; i<=timeQuantum;i++)
- {
- generalTime++;
- current.executePart();
- ProcessorManager.checkIfIsSomeNewProcess();
- if (current.getTime() <= 0)
- return;
- }
- canContinue=false;
- queue.remove(current);
- queue.add(current);
- }
- public static void runProcessor()
- {
- while (!queue.isEmpty())
- {
- current = queue.get(0);
- if(procedure==Procedure.ROT)
- executeProcessROT();
- else
- executeProcess();
- if(canContinue)
- {
- current.set_endTime(generalTime);
- queue.remove(current);
- waitingTime.add(current);
- }
- }
- print();
- }
- public static void countAverage()
- {
- double total =0;
- for(Process p: waitingTime)
- {
- total+= p.getWaitingTime();
- }
- double average= total/ waitingTime.size();
- System.out.println("ŚREDNI CZAS (" +procedure + ") :" + average + " ");
- waitingTime.removeAll(waitingTime);
- }
- public static void print()
- {
- for(Process w: waitingTime)
- {
- System.out.println(w);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement