Post on 06-Jan-2018
description
Thread Scheduling and Dispatching
Maung Aung HanMarc E. LoyJihua Zhong
CIS 642: Seminar in Real-time SystemsInstructor: Professor Insup Lee
Direction
Allow an underlying scheduling mechanism to be used by real-time 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
– Scheduler– Schedulable Objects / Real-time Threads– Parameters
Issues
Issues: Threads
Multi-threading is useful to decouple different activities– Active objects, request
queues, synch/asynch 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
Issues: Release Characteristics
To know whether threads will interfere, need to characterize their temporal behavior
Need descriptors with key temporal attributes– E.g., execution cost,
deadline Can abstract out separate
descriptors for canonical behavioral classes– I.e., periodic, aperiodic,
sporadic
Time
execution cost
period
minimum inter-arrival spacing
deadline
Issues: Release Failures
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
Time
actual execution cost
deadline
execution finished (late)
projected execution cost
Issues: Scheduling
Priorities– Need sufficient unique
priority levels Preemptive scheduling
– Need well defined and appropriate semantics
Fairness among threads is not usually a Real-Time concern (FIFO vs. RR)– But may be useful
Feasibility– Admission control,
certification/testingsche
dule
r
blocked
runnable
executing
Issues: Priority Inversion Problem
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
Issues: Priority Inversion Solution
Priority Inheritance Protocol– If thread t1 attempts to acquire a lock that is held by a lower-priority
thread t2, then t2’s priority is raised to that of t1 as long as t2 holds the lock
Priority Ceiling Emulation Protocol (Highest locker protocol)– A monitor is given a priority ceiling when it is created, which is the
highest priority of any thread that could attempt to enter the monitor– As soon as a thread enters synchronized code, its priority is raised
to the monitor’s ceiling priority, thus ensuring mutually exclusive access to the code since it will not be preempted by any thread that could possibly attempt to enter the same monitor
– If, through a programming error, a thread has a higher priority than the ceiling of the monitor it is attempting to enter, then an exception is thrown
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
Timely Execution of Threads– Programmer can determine by analysis of
program, testing program on particular implementations, or both whether particular threads will always complete execution before a given timeliness constraint
– Expressed in relative or absolute terms
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
Threads and Scheduling API
Threads and Scheduling API
Scheduler Schedulable / RealtimeThread Parameters
– SchedulingParameters– ReleaseParameters– ProcessingGroupParameters– MemoryParameters
Threads and Scheduling API
sche
dule
rblocked runnable
executing
parameters(cost, deadline, etc)
parameters(cost, deadline, etc)
parameters(cost, deadline, etc)
Class HierarchyThread
RealtimeThread
ScheduingParametersReleaseParameters
MemoryParameters
PriorityParameters
ImportanceParameters
PeriodicParameters AperiodicParameters
SporadicParameters
ProcessingGroupParameters
NoHeapRealtimeThread
Scheduler
Scheduler
Abstract class Manages the execution of
schedulable objects Feasibility algorithm
– May determine if the known set of schedulable objects, given their particular execution ordering or priority assignment, is a feasible schedule
– Optional Subclasses of Scheduler are
used for alternate scheduling policies and should define an instance() class method to return the default instance of the subclasssc
hedu
ler
blocked
runnable
executing
PriorityScheduler
Class that extends Scheduler
Implementation for priority-based scheduling
Called the base scheduler Default instance is the
required priority scheduler Fixed priority, preemptive
scheduling with 28 unique priority levels
abstract Scheduler
PriorityScheduler
Threads / Schedulable Objects
Schedulable
Interface that extends java.lang.Runnable
Objects of this type are analogous to threads, tasks, modules, and blocks
Objects of this type are managed by Scheduler
Three implementations of Schedulable– RealTimeThread– NoHeapRealTimeThread– AsyncEventHandler
interface java.lang.Runnable
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
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
interface Schedulable
java.lang.Thread
RealtimeThread
interface Runnable
NoHeapRealtimeThread
Class that extends RealtimeThread
Instances have an implicit execution eligibility logically higher than the garbage collector
– Provided in order to allow time-critical threads to execute in preference to the garbage collector
– Memory access and assignment semantics are designed to guarantee that the execution does not lead to an inconsistent heap state
– Never allowed to allocate or reference any object allocated in the heap nor manipulate the reference of any object in the heap
interface Schedulable
java.lang.Thread
RealtimeThread
NoHeapRealtimeThread
interface Runnable
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
Class that extends SchedulingParameters
Instances of this class should be assigned to threads that are managed by schedulers which use a singer integer to determine execution order.– Base scheduler
PriorityScheduler is such a scheduler
abstract SchedulingParameters
PriorityParameters
PriorityParameters
Class that extends SchedulingParameters
Instances of this class should be assigned to threads that are managed by schedulers which use a singer integer to determine execution order.– Base scheduler
PriorityScheduler is such a scheduler
sche
dule
r
blocked
runnable
executing
11
3
3
7 8
9
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
abstract SchedulingParameters
ImportanceParameters
PriorityParameters
ReleaseParameters
Abstract class Gives release characteristics for a
thread– cost: processing time units per interval– deadline: latest permissible
completion time measured from the release time of the associated invocation of the schedulable object
– overrunHandler: invoked if an invocation of the schedulable object exceeds cost
– missHandler: invoked if the run() method of the schedulable object is still executing after the deadline has passed
Changes to the values in this object affects the scheduling behavior of all the Scheduable objects to which it is bound
Time
deadlinecost
ReleaseParameters
Abstract class Gives release characteristics for a
thread– cost: processing time units per interval– deadline: latest permissible
completion time measured from the release time of the associated invocation of the schedulable object
– overrunHandler: invoked if an invocation of the schedulable object exceeds cost
– missHandler: invoked if the run() method of the schedulable object is still executing after the deadline has passed
Changes to the values in this object affects the scheduling behavior of all the Scheduable objects to which it is bound
Time
actual execution cost
deadline
execution finished (late)
projected execution cost
PeriodicParameters
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 Inherits cost, deadline,
overrunHandler, and missHandler from parent
abstract ReleaseParameters
PeriodicParameters
PeriodicParameters
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 Inherits cost, deadline,
overrunHandler, and missHandler from parent
Time
deadlinecost
period
start
AperiodicParameters
Class that extends ReleaseParameters
Characterizes a schedulable object that may become active at any time
Inherits cost, deadline, overrunHandler, and missHandler from parent
abstract ReleaseParameters
AperiodicParameters
SporadicParameters
Class that extends AperidiocParameters
Notice to the scheduler that the associated schedulable object’s 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
Inherits cost, deadline, overrunHandler, and missHandler from parent
abstract ReleaseParameters
SporaticParameters
AperiodicParameters
SporadicParameters
Class that extends AperidiocParameters
Notice to the scheduler that the associated schedulable object’s 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
Inherits cost, deadline, overrunHandler, and missHandler from parent
Time
deadlinecost
minInterarrival
ProcessingGroupParameters
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
actual execution cost
projected execution cost
period
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
actual execution cost
projected execution cost
Example
Realtime Thread Example
public class ReceiveThread extends RealtimeThread {public void run() {
/* logic for receive thread */}
}
RealtimeThread rt = new ReceiveThread();
if (!rt.getScheduler().isFeasable)throw new Exception(“Whatever…”);
rt.start();
Realtime Thread Example
RealtimeThread rt2 = new RealtimeThread() {public void run() {
/* logic for receive thread */}
}
SchedulingParameters sp =new PriorityParameters(PriorityScheduler.getNormPriority(null));
RealtimeThread t2 = new RealtimeThread(sp) {public void run() {
/* thread logic */}
}
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 ExampleScheduler scheduler = findScheduler(“EDF”);if (scheduler != null) {
RealtimeThread t1 = new RealtimeTread(null, // scheduling paramnew PeriodicParameters( // release paramnull, // startnew RelativeTime(100, 0), // periodnew RealativeTime(5, 0), // costnew RelativeTime(50, 0), // deadlinenull, // overrunHandlernull), // missHandlernull, // memory paramnull, // memory areanull) { // group parampublic void run() { // runnable logic/* thread processing */ }
}
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, // startnew RelativeTime(100, 0), // periodnew RelativeTime(10, 0), // costnull, // deadlinenull, // cost overrun handlernull); // deadline miss handler
ProcessingGroup Example
RealtimeThread t1 =new RealtimeThread(
pp, // priority parametersnew AperiodicParameters( // periodic parameters
new RelativeTime(10, 0), // costnew RelativeTime(300, 0), // deadlinenull, // cost overrun handlernull), // deadline miss handler
null, // memory parametersnull, // memory group) { // group paramterspublic void run() {
/* do thread task */}
}
ProcessingGroup Example
RealtimeThread t2 =new RealtimeThread(
pp, // priority parametersnew AperiodicParameters( // periodic parameters
new RelativeTime(5, 0), // costnew RelativeTime(200, 0), // deadlinenull, // cost overrun handlernull), // deadline miss handler
null, // memory parametersnull, // memory group) { // group paramterspublic void run() {
/* do thread task */}
}
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.Runnableclass RealtimeThread extends java.lang.Thread implements Schedulable
class NoHeapRealtimeThread extends RealtimeThread
abstract class Schedulerclass PriorityScheduler extends Scheduler
abstract class SchedulingParametersclass PriorityParameters extends SchedulingParameters
class ImportanceParameters extends PriorityParameters
abstract class ReleaseParametersclass PeriodicParameters extends ReleaseParametersclass 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 getMemoryParameterspublic 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/