Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. import java.util.Iterator;
  4. import java.util.PriorityQueue;
  5.  
  6. public class RealTimeScheduler {
  7.     private int totalTime;
  8.     private ArrayList<Task> tasks;
  9.     private PriorityQueue<Task> scheduleQueue;
  10.  
  11.  
  12.     private class TaskComparator implements Comparator<Task>{
  13.  
  14.         @Override
  15.         public int compare(Task o1, Task o2) {
  16.             double priorityTask1 = 1 / o1.getPeriod();
  17.             double priorityTask2 = 1 / o2.getPeriod();
  18.  
  19.             return (int)(o1.getPeriod() - o2.getPeriod());
  20.         }
  21.     }
  22.  
  23.     public RealTimeScheduler(int totalTime, ArrayList<Task> tasks) {
  24.         this.totalTime = totalTime;
  25.         this.tasks = tasks;
  26.         this.scheduleQueue = new PriorityQueue<>(tasks.size(), new TaskComparator());
  27.     }
  28.  
  29.  
  30.     private ArrayList<Task> getTasksAtGivenTimePeriod(int clock){
  31.         ArrayList<Task> tasksAtTimePeriod = new ArrayList<>();
  32.         for(Task t : this.tasks){
  33.             if((clock - t.getRelease())% t.getPeriod() == 0){
  34.                 tasksAtTimePeriod.add(new Task(clock, t.getExecution(), t.getDeadline(), t.getPeriod(), t.getId()));
  35.             }
  36.         }
  37.         return tasksAtTimePeriod;
  38.     }
  39.  
  40.     private void work(int clock){
  41.         Task t = this.scheduleQueue.peek();
  42.         if (t == null){
  43.             return;
  44.         }
  45.         t.work();
  46.  
  47.         if(t.hasFinishedWork()){
  48.             System.out.println("Time = " + clock + " Thread with id = " + t.getId() + " has finished working");
  49.             this.scheduleQueue.remove(t);
  50.         }
  51.     }
  52.  
  53.     public void simulate(){
  54.         int clock = 1;
  55.         this.scheduleQueue.addAll(tasks);
  56.         while(clock <= this.totalTime){
  57.  
  58.             //find threads that are missing the deadline
  59.             for(Iterator<Task> it = this.scheduleQueue.iterator(); it.hasNext();){
  60.                 Task ta = it.next();
  61.                 if(clock - ta.getRelease() > ta.getDeadline()){
  62.                     System.out.println("Time = " + clock + " Thread with id = " + ta.getId() + " has missed its deadline");
  63.                     it.remove();
  64.                 }
  65.             }
  66.  
  67.             work(clock);
  68.  
  69.  
  70.  
  71.             ArrayList<Task> ts = getTasksAtGivenTimePeriod(clock);
  72.             if (ts.size() != 0){
  73.                 this.scheduleQueue.addAll(ts);
  74.             }
  75.             clock++;
  76.         }
  77.  
  78.         System.out.println("Time has ended!");
  79.  
  80.     }
  81.  
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement