Thread Scheduling and Dispatching
Thread Scheduling and Dispatching
Maung Aung Han Marc E. Loy Jihua Zhong CIS 642: Seminar in Real-time Systems Instructor: Professor Insup Lee
Direction
Allow an underlying scheduling mechanism to be used by realtime Java threads but not specify in advance the exact nature of all possible scheduling mechanisms Allow implementations to provide unanticipated scheduling algorithms Programmatic assignment of parameters appropriate for underlying scheduling mechanism as well as providing any necessary for creation, management, and termination of threads Provide enough flexibility in thread scheduling framework to allow future versions of the specification to build on this release and allow the dynamic loading of scheduling policy modules
Outline
Issues Definitions API
Issues
Issues: Threads
However, work in different threads competes for CPU time and memory resources Must ensure resource usage by non-critical activities does not interfere with needs of critical activities
period
To know whether threads will interfere, need to characterize their temporal behavior Need descriptors with key temporal attributes
E.g., execution cost, deadline
deadline
Time
Release characteristics advertise how threads are projected to behave However, differences between projected and actual behavior can lead to unexpected failures Need to be able to detect (and if possible handle) release failures
Cost overruns Deadline misses
deadline
Time
Issues: Scheduling
executing
Priorities
Need sufficient unique priority levels
Preemptive scheduling
Need well defined and appropriate semantics
runnable
Fairness among threads is not usually a Real-Time concern (FIFO vs. RR)
But may be useful
scheduler
Feasibility
Admission control, certification/testing
blocked
Consider a low priority process L and a high priority process H that both have access to a common shared resource that they can only access mutual exclusively Picture a scenario in which a high-priority thread needs a lock in order to execute, but the lock is being held by a lower-priority thread The lower-priority thread is preventing a higher-priority thread from executing
Definitions
Definitions
Schedulable Object
Scheduling scheme analogous to threads, tasks, modules, and blocks
Schedule
Sequence or ordering of a set of threads
Scheduling/Scheduling Algorithm
Production of a sequence or ordering for the execution of a schedule
Feasibility Analysis
Determines if a schedule has an acceptable value for the metric
Definitions
Definitions
Priority
Integer associated with a thread that conveys to the system the order in which the threads should execute Execution Eligibility
Dispatching
Portion of the system which selects the thread with the highest execution eligibility from the pool of threads that are ready to run
blocked
runnable
scheduler
Class Hierarchy
Thread RealtimeThread NoHeapRealtimeThread
ProcessingGroupParameters
MemoryParameters
ReleaseParameters
ScheduingParameters
PeriodicParameters
AperiodicParameters
PriorityParameters
SporadicParameters
ImportanceParameters
Scheduler
Scheduler
executing
runnable
blocked
scheduler
Subclasses of Scheduler are used for alternate scheduling policies and should define an instance() class method to return the default instance of the subclass
PriorityScheduler
abstract Scheduler
PriorityScheduler
Schedulable
interface java.lang.Runnable
Objects of this type are analogous to threads, tasks, modules, and blocks Objects of this type are managed by Scheduler
interface Schedulable
Schedulable
Each object is assigned priority resources according to their release characteristics, execution eligibility, and processing group variables
SchedulingParameters ReleaseParameters ProcessingGroupParameters MemoryParameters
RealtimeThread
interface Runnable
interface Schedulable
java.lang.Thread
RealtimeThread
Class that extends java.lang.Thread and implements Scheduable Includes classes and methods to get and set parameter objects (mentioned in Schedulable) Must be placed in a memory area such that Java methods on java.lang.Thread complete normally except where such execution would cause access violations Instances may have an execution eligibility logically lower than the garbage collector
NoHeapRealtimeThread
interface Runnable interface Schedulable java.lang.Thread RealtimeThread
NoHeapRealtimeThread
Parameters
Parameters
SchedulingParameters ReleaseParameters ProcessingGroupParameters MemoryParameters
SchedulingParameters
Abstract class Provides the parameters used in Scheduler Changes to the values in this object affects the scheduling behavior of all the Scheduable objects to which it is bound
Implementations:
PriorityParameters ImportanceParameters
PriorityParameters
abstract SchedulingParameters
PriorityParameters
PriorityParameters
executing
9
runnable
blocked
scheduler
ImportanceParameters
abstract SchedulingParameters
PriorityParameters
ImportanceParameters
Class that extends PriorityParameters Additional scheduling metric that may be used by some priority-based scheduling algorithms during overload conditions to differentiate execution order among threads of the same priority
ReleaseParameters
cost
deadline
Time
Changes to the values in this object affects the scheduling behavior of all the Scheduable objects to which it is bound
ReleaseParameters
actual execution cost
deadline
Time
Changes to the values in this object affects the scheduling behavior of all the Scheduable objects to which it is bound
PeriodicParameters
abstract ReleaseParameters
Class that extends ReleaseParameters Indicates that the waitForNextPeriod() method in the associated Schedulable object will be unblocked at the start of each period
start: time at which the first period begins period: interval between successive unblocks
PeriodicParameters
PeriodicParameters
period
start
Class that extends ReleaseParameters Indicates that the waitForNextPeriod() method in the associated Schedulable object will be unblocked at the start of each period
start: time at which the first period begins period: interval between successive unblocks
cost
deadline
Time
AperiodicParameters
abstract ReleaseParameters
AperiodicParameters
Class that extends ReleaseParameters Characterizes a schedulable object that may become active at any time Inherits cost, deadline, overrunHandler, and missHandler from parent
SporadicParameters
abstract ReleaseParameters
AperiodicParameters
Class that extends AperidiocParameters Notice to the scheduler that the associated schedulable objects run method will be released aperiodically but with a minimum time between releases
SporaticParameters
minInterarrival: release times of the schedulable object will occur no less than this interval Inherits cost, deadline, overrunHandler, and missHandler from parent
SporadicParameters
minInterarrival
Class that extends AperidiocParameters Notice to the scheduler that the associated schedulable objects run method will be released aperiodically but with a minimum time between releases
minInterarrival: release times of the schedulable object will occur no less than this interval
cost
deadline
Time
ProcessingGroupParameters
period
Class Associated with one or more schedulable objects for which the system guarantees that the associated objects will not be given more time per period than indicated by cost
ProcessingGroupParameters
start: time at which the first period begins period: interval between successive unblocks of waitForNextPeriod() cost: processing time per period deadline: latest permissible completion time measured from the start of the current period overrunHandler: invoked if the run() method of the schedulable object of the previous period is still executing at the start of the current period missHandler: invoked if the run() method of the schedulable object is still executing after the deadline has passed
Example
Scheduler Example
pubic static Scheduler findScheduler(String policy) { String className = System.getProperty(javax.realtime.scheduler + policy); Class clazz; try { if (className != null && (clazz = Class.forName(className)) != null) { return (Scheduler) clazz.getMethod(instance, null).invoke(null, null); } } catch (ClassNotFoundException notFound) { } catch (NoSuchMethodException noSuch) { } catch (SecurityException security) { } catch (IllegalAccessException access) { } catch (IllegalArgumentException arg) { } catch (InvocationTargetException target) { } return null; }
Scheduler Example
Scheduler scheduler = findScheduler(EDF); if (scheduler != null) { RealtimeThread t1 = new RealtimeTread( null, new PeriodicParameters( null, new RelativeTime(100, 0), new RealativeTime(5, 0), new RelativeTime(50, 0), null, null), null, null, null) { public void run() { /* thread processing */ } } // scheduling param // release param // start // period // cost // deadline // overrunHandler // missHandler // memory param // memory area // group param // runnable logic
Scheduler Example
try { Scheduler.setDefaultScheduler(scheduler); } catch (SecurityException security) { } boolean useEDF = false; try { if (Scheduler.getDefaultScheduler().getPolicyName().equals(EDF)) { useEDF = true; }
ProcessingGroup Example
SchedulingParameters pp = new PriorityParameters(PriorityScheduler.getNormPriority());
ProcessingGroupParameters group = new ProcessingGroupParameters( null, new RelativeTime(100, 0), new RelativeTime(10, 0), null, null, null);
// start // period // cost // deadline // cost overrun handler // deadline miss handler
ProcessingGroup Example
RealtimeThread t1 = new RealtimeThread( pp, new AperiodicParameters( new RelativeTime(10, 0), new RelativeTime(300, 0), null, null), null, null, group) { public void run() { /* do thread task */ } }
// priority parameters // periodic parameters // cost // deadline // cost overrun handler // deadline miss handler // memory parameters // memory // group paramters
ProcessingGroup Example
RealtimeThread t2 = new RealtimeThread( pp, new AperiodicParameters( new RelativeTime(5, 0), new RelativeTime(200, 0), null, null), null, null, group) { public void run() { /* do thread task */ } }
// priority parameters // periodic parameters // cost // deadline // cost overrun handler // deadline miss handler // memory parameters // memory // group paramters
ProcessingGroup Example
sp.setPriority(GROUP_PRIORITY); t1.start(); t2.start();
Takeaways
Specification, not an implementation Extensibility Benefits of Java
API Reference
API Summary
interface Schedulable extends java.lang.Runnable class RealtimeThread extends java.lang.Thread implements Schedulable class NoHeapRealtimeThread extends RealtimeThread abstract class Scheduler class PriorityScheduler extends Scheduler abstract class SchedulingParameters class PriorityParameters extends SchedulingParameters class ImportanceParameters extends PriorityParameters abstract class ReleaseParameters class PeriodicParameters extends ReleaseParameters class AperiodicParameters extends ReleaseParameters class SporadicParameters extends AperiodicParameters class ProcessingGroupParameters
Scheduler
Syntax: public abstract class Scheduler
Constructor: public Scheduler()
Scheduler Methods
protected abstract void addToFeasibility(Schedulable scheduable) public boolean changeIfFeasible(Schedulable schedulable, ReleaseParameters release, MemoryParameters, memory) public static Scheduler getDefaultScheduler() public abstract java.lang.String getPolicyName() public abstract boolean isFeasible() protected abstract void removeFromFeasibility(Schedulable schedulable) public static void setDefaultScheduler(Scheduler scheduler)
PriorityScheduler
Syntax: public class PriorityScheduler extends Scheduler
Constructor: public PriorityScheduler()
PriorityScheduler Methods
protected void addToFeasibility(Schedulable s) public boolean changeIfFeasible(Scheduable schedulable, ReleaseParameters release, MemoryParameters memory) public void fireSchedulable(Scheduable schedulable) public int getMaxPriority() public static int getMaxPriority() public static int getMaxPriority(java.lang.Thread thread) public int getMinPriority() public static int getMinPriority(java.lang.Thread thread) public int getNormPriority() public static int getNormPriority(java.lang.Thread thread) public java.lang.String getPolicyName() public static PrioritySchedular instance() public boolean isFeasible() protected void removeFromFeasibility(Schedulable s)
Scheduable
Syntax: public interface Schedulable extends java.lang.Runnable
Scheduable Methods
public void addToFeasibility() public MemoryParameters getMemoryParameters() public ReleaseParameters getReleaseParameters() public Scheduler getScheduler() public SchedulingParameters getSchedulingParameters() public void removeFromFeasibility() public void setMemoryParameters(MemoryParameters memory) public void setReleaseParameters(ReleaseParameters release) public void setScheduler(Scheduler scheduler) public void setSchedulingParameters(SchedulingParameters)
RealtimeThread
Syntax: public class RealtimeThread extends java.lang.Thread implements Schedulable
Constructors: public RealtimeThread() public RealtimeThread(SchedulingParameters scheduling) public RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release) public RealtimeThread(SchedulingParameter scheduling, ReleaseParameters release, MemoryParameters memory, MemoryArea area, ProcessingGroupParameters group, java.lang.Runnable logic)
RealtimeThread Methods
public void addToFeasibility() public static RealtimeThread currentRealtimeThread() public synchronized void deschedulePeriodic() public MemoryArea getMemoryArea() public MemoryParameters getMemoryParameters public ProcessingGroupParameters getProcessingGroupParameters() public ReleaseParameters getReleaseParameters() public Scheduler getScheduler() public SchedulingParameters getSchedulingParameters() public synchronized void interrupt()
RealtimeThread Methods
public void removeFromFreasibility() public synchronized void schedulePeriodic() public void setMemoryParameters(MemoryParameters parameters) public void setProcesssingGroupParameters(ProcessingGroupParameters parameters) public void setReleaseParameters(ReleaseParameters parameters) public void setScheduler(Scheduler scheduler) public void setSchedulingParameters(SchedulingParameters scheduling) public static void sleep(Clock clock, HighResolutionTime time) public static void sleep(HighResolutionTime time) public boolean waitForNextPeriod()
NoHeapRealtimeThread
Syntax: public class NoHeapRealtimeThread extends RealtimeThread
Constructors: NoHeapRealtimeThread(SchedulingParameters scheduling, MemoryArea area) NoHeapRealtimeThread(schedulingParameters scheduling, ReleaseParameters release, MemoryArea area) NoHeapRealtimeThread(SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory, MemoryArea area, ProcessingGroupParameters group, java.lang.Runnable logic)
SchedulingParameters
Syntax: public abstract class SchedulingParameters Contructor: public SchedulingParameters()
PriorityParameters
Syntax: public class PriorityParameters extends SchedulingParameters
Constructor: public PriorityParameters(int priority) Methods: public int getPriority() public void setPriority(int priority) public java.lang.String toString()
ImportanceParameters
Syntax: public class ImportanceParameters extends PriorityParameters
Constructor: public ImportanceParameters(int priority, int importance) Methods: public int getImportance() public void setImportance(int importance) public java.lang.String toString()
ReleaseParameters
Syntax: public abstract class ReleaseParameters Constructor: protected ReleaseParameters(RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler)
ReleaseParameters Methods
public RelativeTime getCost() public AsyncEventHandler getCostOverrunHander() public RelativeTime getDeadline() public AsyncEventHandler getDeadlineMissHandler() public void setCost(RelativeTime cost) public void setCostOverrunHandler(AsyncEventHandler handler) public void setDeadline(RelativeTime deadline) public void setDeadlineMissHandler(AsyncEventHandler hander)
PeriodicParameters
Syntax: public class PeriodParameters extends ReleaseParameters
Constructor: public PeriodicParameters(HighResolution start, RelativeTime period, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler) Methods: public RelativeTime getPeriod() public HighResolution getStart() public void setPeriod(RelativeTime period) public void setStart(HighResolution start)
AperiodicParameters
Syntax: public class AperiodicParameters extends ReleaseParameters
Constructor: public AperiodicParameters(RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler)
SporadicParameters
Syntax: public class SporadicParameters extends AperiodicParameters
Constructor: public SporadicParameters(RelativeTime minInterval, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler) Methods: public RelativeTime getMinimumInterarrival() public void setMinimumInterarrival(RelativeTime minimum)
ProcessingGroupParameters
Syntax: public class ProcessingGroupParameters
Constructor: public ProcessingGroupParameters(HighResolutionTime start, RelativeTime period, RelativeTime cost, RelativeTime deadline, AsyncEventHandler overrunHandler, AsyncEventHandler missHandler)
ProcessingGroupParameters Methods
public RelativeTime getCost() public AsyncEventHandler getCostOverrunHandler() public RelativeTime getDeadline() public AsyncEventHandler getDeadlineMissHandler() public RelativeTime getPeriod() public HighResolutionTime getStart() public void setCost(RelativeTime cost) public void setCostOverrunHandler(AsyncEventHandler handler) public void setDeadline(RelativeTime deadline) public void setDeadlineMissHandler(AsyncEventHandler handler) public void setPeriod(RelativeTime period) public void setStart(HighResolutionTime start)
Reference
http://www.rtj.org/