Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.PriorityQueue;
- public class RealTimeScheduler {
- private int totalTime;
- private ArrayList<Task> tasks;
- private PriorityQueue<Task> scheduleQueue;
- private class TaskComparator implements Comparator<Task>{
- @Override
- public int compare(Task o1, Task o2) {
- double priorityTask1 = 1 / o1.getPeriod();
- double priorityTask2 = 1 / o2.getPeriod();
- return (int)(o1.getPeriod() - o2.getPeriod());
- }
- }
- public RealTimeScheduler(int totalTime, ArrayList<Task> tasks) {
- this.totalTime = totalTime;
- this.tasks = tasks;
- this.scheduleQueue = new PriorityQueue<>(tasks.size(), new TaskComparator());
- }
- private ArrayList<Task> getTasksAtGivenTimePeriod(int clock){
- ArrayList<Task> tasksAtTimePeriod = new ArrayList<>();
- for(Task t : this.tasks){
- if((clock - t.getRelease())% t.getPeriod() == 0){
- tasksAtTimePeriod.add(new Task(clock, t.getExecution(), t.getDeadline(), t.getPeriod(), t.getId()));
- }
- }
- return tasksAtTimePeriod;
- }
- private void work(int clock){
- Task t = this.scheduleQueue.peek();
- if (t == null){
- return;
- }
- t.work();
- if(t.hasFinishedWork()){
- System.out.println("Time = " + clock + " Thread with id = " + t.getId() + " has finished working");
- this.scheduleQueue.remove(t);
- }
- }
- public void simulate(){
- int clock = 1;
- this.scheduleQueue.addAll(tasks);
- while(clock <= this.totalTime){
- //find threads that are missing the deadline
- for(Iterator<Task> it = this.scheduleQueue.iterator(); it.hasNext();){
- Task ta = it.next();
- if(clock - ta.getRelease() > ta.getDeadline()){
- System.out.println("Time = " + clock + " Thread with id = " + ta.getId() + " has missed its deadline");
- it.remove();
- }
- }
- work(clock);
- ArrayList<Task> ts = getTasksAtGivenTimePeriod(clock);
- if (ts.size() != 0){
- this.scheduleQueue.addAll(ts);
- }
- clock++;
- }
- System.out.println("Time has ended!");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement