/* This appears to be what is called LST (Least Slack Time) at * http://www.ece.mcgill.ca/~info421/Lectures/Lecture22.pdf. There, they * characterize the highest priority process as being the one with the * minimum value of (absolute_deadline - now()) - (wcet - elapsed_time) */ scheduler LLFm = { states = { RUNNING running : process; READY ready : select queue; READY yield : process; BLOCKED period_yield : queue; BLOCKED blocked : queue; TERMINATED terminated; } modules {CommonRTM (running, ready, yield, blocked, terminated), GTimerRTM (running, ready, period_yield), AbsoluteDeadline(), ElapsedTime(running, period_yield, blocked), LlfRTM (running, ready, period_yield, blocked) } process { LlfRTM.elapsed_time reads ElapsedTime.elapsed_time, LlfRTM.absolute_deadline reads AbsoluteDeadline.absolute_deadline, LlfRTM.wcet reads GTimerRTM.wcet, LlfRTM.end_period reads GTimerRTM.end_period, ElapsedTime.end_period reads GTimerRTM.end_period, AbsoluteDeadline.end_period reads GTimerRTM.end_period } ordering_criteria {LlfRTM} admission {AbsoluteDeadline, GTimerRTM} handler { unblock.timer.end_period : ElapsedTime, AbsoluteDeadline, LlfRTM, GTimerRTM; unblock.preemptive : ElapsedTime, LlfRTM, CommonRTM; } interface { attach : ElapsedTime, AbsoluteDeadline, GTimerRTM, LlfRTM, CommonRTM; } }