public boolean isTasksetSchedulable() { boolean ret = true; for (Iterator<FixedPriorityProcessingLoad> iter = tasksetDecreasingPriority.iterator(); iter.hasNext(); ) { FixedPriorityProcessingLoad task = iter.next(); System.out.println( "FPTest: task period: " + task.getPeriod() + " wcet: " + cyclesToNanoseconds(task.getCycles()) + " bw: " + task.getBandwidth()); ret = ret && isTaskSchedulable(task); } return ret; }
public boolean isTaskSchedulable(FixedPriorityProcessingLoad t) { long exectime_ns = cyclesToNanoseconds(t.getCycles()); long responseTime = exectime_ns; long prevResponseTime; do { prevResponseTime = responseTime; responseTime = exectime_ns; // add all preemptions for (Iterator<FixedPriorityProcessingLoad> iter = tasksetDecreasingPriority.iterator(); iter.hasNext(); ) { FixedPriorityProcessingLoad t1 = iter.next(); // if we get to t we finish traversing higher-priority tasks if (t1.getUniqueID() == t.getUniqueID()) break; long numOfJobs = (long) Math.ceil((double) prevResponseTime / (double) t1.getPeriod()); responseTime += numOfJobs * cyclesToNanoseconds(t1.getCycles()); } // System.out.println("Response time current: " + responseTime + "prev:" + prevResponseTime); } while (responseTime != prevResponseTime && responseTime <= t.getDeadline()); return (responseTime <= t.getDeadline()); }