Skip to content
Snippets Groups Projects
Select Git revision
  • 6c90d315a142dfcb92e31e743e54568936c5e682
  • master default
  • labcomm2014
  • labcomm2006
  • python_sig_hash
  • typedefs
  • anders.blomdell
  • typeref
  • pragma
  • compiler-refactoring
  • labcomm2013
  • v2014.6
  • v2015.0
  • v2014.5
  • v2014.4
  • v2006.0
  • v2014.3
  • v2014.2
  • v2014.1
  • v2014.0
  • v2013.0
21 results

CS_CodeGen.jrag

Blame
  • 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();
        }
    }