Select Git revision
OwlMinCardinality.html
RMS.java 1.57 KiB
package strategy;
import java.util.Comparator;
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Map;
import java.util.HashMap;
import tasks.Taskset;
import tasks.Task;
public class RMS extends QueueStrategy {
/*
* Return: Current version of the ready queue according to the EDF scheduling strategy
*/
protected Queue<Integer> updateQueue(Queue<Integer> q, Taskset ts, int time) {
//Create new Q that uses order comparator and move all current tasks to that Q
Comparator<Integer> order =
(Integer i1, Integer i2)->
ts.getTask(i1).get().period() - time % ts.getTask(i1).get().period() -
(ts.getTask(i2).get().period() - time % ts.getTask(i2).get().period());
Queue<Integer> internalQ = new PriorityQueue<>(order);
while (q.size() != 0) internalQ.add(q.poll());
//If we are at a job release, add that much CPU usage to the Q.
for (int taskNbr : ts.getPriorities()) {
Task t = ts.getTask(taskNbr).get(); //I know it exists so I can collect it from the optional directly
if (time % t.period() == 0) {
for (int i = 0; i < t.exectime(); i++) {
internalQ.add(taskNbr);
}
}
}
return internalQ;
}
/*
* Return which Strategy you are using
*/
public String toString() {
return "RMS";
}
/*
* Return a Comparator for this scheduling strategy
*/
public Comparator<Task> prioComparator() {
return new RMSComparator();
}
}