320 likes | 598 Views
Programming R-T Abstractions. TSW November 2009 Anders P. Ravn Aalborg University. Characteristics of a RTS. Timing Constraints Concurrent control of separate components Dependability Requirements Facilities to interact with special purpose hardware.
E N D
Programming R-T Abstractions TSW November 2009 Anders P. Ravn Aalborg University
Characteristics of a RTS • Timing Constraints • Concurrent control of separate components • Dependability Requirements • Facilities to interact with special purpose hardware
Timing Constraints • Notion of time • Specifying timing constraints: Temporal scopes • Notion of Event • Clocks, delays and timeouts
RT Java Time Types public abstract class HighResolutionTimeimplements java.lang.Comparable { ... public booleanequals(HighResolutionTime time); public final long getMilliseconds(); public final intgetNanoseconds(); public void set(HighResolutionTime time); public void set(long millis); public void set(long millis, intnanos); }
Time HighResolutionTime AbsoluteTime RelativeTime
RTSJ Absolute and Relative Time public class AbsoluteTimeextends HighResolutionTime { // various constructor methods including public AbsoluteTime(AbsoluteTime T); public AbsoluteTime(long millis, intnanos); ... public final AbsoluteTime add(RelativeTime time); public final RelativeTime subtract(AbsoluteTime time); public final AbsoluteTime subtract(RelativeTime time); } public class RelativeTimeextends HighResolutionTime { // various constructor methods including public RelativeTime(long millis, intnanos); public RelativeTime(RelativeTime time); ... public final RelativeTime add(RelativeTime time); public final RelativeTime subtract(RelativeTime time); }
Temporal scope • C: maximum execution time • D: deadline for completion of execution • T: minimum time between releases (period) • S: minimum delay before start of execution
RTSJ ReleaseParameters ReleaseParameters PeriodicParameters AperiodicParameters SporadicParameters
RTSJ ReleaseParameters public abstract class ReleaseParameters { protected ReleaseParameters( RelativeTime cost, RelativeTime deadline, AsyncEventHandleroverrunHandler, AsyncEventHandlermissHandler); ... }
RTSJ Periodic Parameters public class PeriodicParametersextends ReleaseParameters { public PeriodicParameters( HighResolutionTime start, RelativeTime period, RelativeTime cost, RelativeTime deadline, AsyncEventHandleroverrunHandler, AsyncEventHandlermissHandler); public RelativeTimegetPeriod(); public HighResolutionTimegetStart(); }
RTSJ Aperiodic- and SporadicParameters public class AperiodicParametersextends ReleaseParameters { public AperiodicParameters(RelativeTime cost, RelativeTime deadline, AsyncEventHandleroverrunHandler, AsyncEventHandlermissHandler); } public class SporadicParametersextends AperiodicParameters { public SporadicParameters(RelativeTimeminInterarrival, RelativeTime cost, RelativeTime deadline, AsyncEventHandleroverrunHandler, AsyncEventHandlermissHandler); public RelativeTimegetMinimumInterarrival(); public void setMinimumInterarrival(RelativeTime minimum); }
RTSJ AsyncEvent public class AsyncEvent { public AsyncEvent(); ... public void addHandler(AsyncEventHandler handler); public void fire(); ... } An asynchronous event can have a set of handlers associated with it, and when the event occurs, the fireCount of each handler is incremented, and the handlers are released.
RTSJ Clock public abstract class Clock { public Clock(); public static Clock getRealtimeClock(); public abstract RelativeTimegetEpochOffset(); public AbsoluteTimegetTime(); public abstract void getTime(AbsoluteTime time); public abstract RelativeTimegetResolution(); public abstract void setResolution(RelativeTime resolution); }
Characteristics of a RTS • Timing Constraints • Concurrent control of separate components • Dependability Requirements • Facilities to interact with special purpose hardware
RTSJ Schedulable «interface» Schedulable RealTimeThread AsyncEventHandler BoundAsyncEventHandler NoHeapRealTimeThread
RTSJ AsyncEventHandler public class AsyncEventHandlerextends java.lang.Object implements Schedulable { public AsyncEventHandler( SchedulingParameters scheduling, ReleaseParameters release, MemoryArea area); ... public void handleAsyncEvent(); // the program to be executed ... }
RTSJ RealTimeThread public class RealtimeThreadextends java.lang.Thread implements Schedulable { public RealtimeThread(SchedulingParameters s, ReleaseParameters r); . . . . . . public static RealtimeThreadcurrentRealtimeThread(); public synchronized void schedulePeriodic(); // add the thread to the list of schedulable objects public synchronized void deschedulePeriodic(); // remove the thread from the list of schedulable object // when it next issues a waitForNextPeriod public booleanwaitForNextPeriod() throws ...; public synchronized void interrupt(); // overrides java.lang.Thread.interrupt() public static void sleep(Clock c, HighResolutionTime time) throws ...; }
A Real-Time Application • Periodic Event Handlers • Aperiodic Event Handlers collected in a mission • Mission Handler Each handler • has a Memory • is Scheduled
Periodic handler class Periodic extends PeriodicEventHandler { protected Periodic(.., PeriodicParameters pp, Scheduler scheduler, MemoryArea memory); public void handleEvent() { // the logic to be executed every period } }
Aperiodic handler class Aperiodic extends AperiodicEventHandler { protected Aperiodic(.., AperiodicParameters ap, Scheduler scheduler, MemoryArea memory); public void handleEvent() { // the logic to be executed when an event occurs } }
A simple mission public class Basic extends Mission { protected Basic(.., AperiodicParameters ap, Scheduler scheduler, MemoryArea memoryArea) { ... // initialization } public static void main (String[] args) { new Basic( null, null, new CyclicScheduler(), new LTMemory(10*1024)); } }
…The mission addToMission( new Periodic( null, pp, getScheduler(), new LTMemory(1024))); addToMission( new Periodic( null, pp, getScheduler(), new LTMemory(1024))); ... add(); // mission to its scheduler
Complex mission private Mission[] mission; private int active = 0; static AperiodicEvent event; public ThreeSequentialMissions(...) { mission = new Mission[3]; // set up the three missions mission[0] = new Mission(...); // add handlers for mission 0 // including the mission termination ... mission[1] = new Mission(); ... // start the first mission mission[active].add(); event = new AperiodicEvent(this); }
Changing mission private Mission[] mission; private int active = 0; static AperiodicEvent event; public ThreeSequentialMissions(...) { ... } public void handleEvent() { mission[active].remove(); active = (active + 1) % mission.length; mission[active].add(); }
RTSJ Scheduler Scheduler PriorityScheduler Class which represents the required (by the RTSJ) priority-based scheduler. The default instance is the base scheduler which does fixed priority, preemptive scheduling.
RTSJ SchedulingParameters public class PriorityParameters { public PriorityParameters(int priority); ... } public class ImportanceParameters { public PriorityParameters(int priority, int importance); ... } Importance is an 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.
RTSJ PriorityScheduler public class PriorityScheduler extends Scheduler { public static PriorityScheduler instance(); ... protected boolean addToFeasibility(Schedulable schedulable); public boolean isFeasible(); public boolean SetIfFeasible( Schedulable schedulable, ReleaseParameters release, MemoryParameters memory); }
RTSJ Memory Management MemoryArea «singleton» HeapMemory ScopedMemory ImmortalMemory LTMemory VTMemory ImmortalPhysicalMemory
RTSJ MemoryArea public abstract class MemoryArea { protected MemoryArea(long sizeInBytes); public void enter(java.lang.Runnable logic); // associate this memory area to the current thread // for the duration of the logic.run method public static MemoryArea getMemoryArea(java.lang.Object object); // get the memory area associated with the object public long memoryConsumed(); // number of bytes consumed in this memory area public long memoryRemaining(); // number of bytes remaining . . . public synchronized java.lang.Object newInstance( java.lang.Class type)throws IllegalAccessException, InstantiationException, OutOfMemoryError; // allocate an object public long size(); // the size of the memory area }
Simplicity – Static Schedules • Cyclic Executive • Time Triggered Architecture (Kopetz) • Synchronous Languages (Esterel) • Giotto (Henzinger)