0% found this document useful (0 votes)
29 views75 pages

Thread Scheduling and Dispatching

The document discusses key issues in real-time thread scheduling such as defining temporal behavior of threads, handling failures when threads do not meet projected behavior, scheduling priorities and algorithms, and solving the priority inversion problem. It also outlines the Java thread scheduling application programming interface including the Scheduler abstract class, Schedulable interface for threads, and parameter classes like PriorityParameters and ReleaseParameters that specify thread characteristics and constraints.

Uploaded by

Abdul Gafur
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views75 pages

Thread Scheduling and Dispatching

The document discusses key issues in real-time thread scheduling such as defining temporal behavior of threads, handling failures when threads do not meet projected behavior, scheduling priorities and algorithms, and solving the priority inversion problem. It also outlines the Java thread scheduling application programming interface including the Scheduler abstract class, Schedulable interface for threads, and parameter classes like PriorityParameters and ReleaseParameters that specify thread characteristics and constraints.

Uploaded by

Abdul Gafur
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 75

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

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


execution cost

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

Can abstract out separate descriptors for canonical behavioral classes


I.e., periodic, aperiodic, sporadic

minimum inter-arrival spacing

Time

Issues: Release Failures


actual execution cost

projected execution cost execution finished (late)

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

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 t2s 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 monitors 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


executing

blocked

runnable

parameters (cost, deadline, etc)

parameters (cost, deadline, etc)

parameters (cost, deadline, etc)

scheduler

Class Hierarchy
Thread RealtimeThread NoHeapRealtimeThread

ProcessingGroupParameters

MemoryParameters

ReleaseParameters

ScheduingParameters

PeriodicParameters

AperiodicParameters

PriorityParameters

SporadicParameters

ImportanceParameters

Scheduler

Scheduler
executing

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

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

Class that extends Scheduler


Implementation for prioritybased 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

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

Three implementations of Schedulable RealTimeThread NoHeapRealTimeThread AsyncEventHandler

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

Class that extends RealtimeThread


Instances have an implicit execution eligibility logically higher than the garbage collector
Provided in order to allow timecritical 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

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

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
executing
9

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

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

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

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

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

projected execution cost execution finished (late)


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

Inherits cost, deadline, overrunHandler, and missHandler from parent

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

Inherits cost, deadline, overrunHandler, and missHandler from parent

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

Inherits cost, deadline, overrunHandler, and missHandler from parent

ProcessingGroupParameters
period

actual execution cost

projected execution cost

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

actual execution cost


projected execution cost

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

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 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/

You might also like