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 HighResolutionTime implements
       java.lang.Comparable
{
  ...
  public boolean equals(HighResolutionTime time);
 
  public final long getMilliseconds();
  public final int getNanoseconds();
  public void set(HighResolutionTime time);
  public void set(long millis);
  public void set(long millis, int nanos);
}
Time
HighResolutionTime
AbsoluteTime
RelativeTime
public class AbsoluteTime extends HighResolutionTime
{ // various constructor methods including
  public AbsoluteTime(AbsoluteTime T);
  public AbsoluteTime(long millis, int nanos);
  ...
  public final AbsoluteTime add(RelativeTime time);
  public final RelativeTime subtract(AbsoluteTime time);
  public final AbsoluteTime subtract(RelativeTime time);
}
RTSJ Absolute and Relative Time
public class RelativeTime extends HighResolutionTime
{ // various constructor methods including
  public RelativeTime(long millis, int nanos);
  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,
                 AsyncEventHandler overrunHandler,
                 AsyncEventHandler missHandler);
  ...
}
public class PeriodicParameters extends ReleaseParameters
{
  public PeriodicParameters(
         HighResolutionTime start,
         RelativeTime period,
         RelativeTime cost,
         RelativeTime deadline,
         AsyncEventHandler overrunHandler,
         AsyncEventHandler missHandler);
  public RelativeTime getPeriod();
  public HighResolutionTime getStart();
}
RTSJ Periodic Parameters
RTSJ Aperiodic- and SporadicParameters
public class AperiodicParameters extends ReleaseParameters
{
  public AperiodicParameters(RelativeTime cost,
         RelativeTime deadline, AsyncEventHandler overrunHandler,
         AsyncEventHandler missHandler);
}
public class SporadicParameters extends AperiodicParameters
{
  public SporadicParameters(RelativeTime minInterarrival,
         RelativeTime cost, RelativeTime deadline,
         AsyncEventHandler overrunHandler,
         AsyncEventHandler missHandler);
  public RelativeTime getMinimumInterarrival();
  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 RelativeTime getEpochOffset();
  public AbsoluteTime  getTime();
  public abstract void getTime(AbsoluteTime time);
  public abstract RelativeTime getResolution();
  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
AsyncEventHandler
BoundAsyncEventHandler
RealTimeThread
NoHeapRealTimeThread
RTSJ AsyncEventHandler
public class AsyncEventHandler extends 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 RealtimeThread extends java.lang.Thread
       implements Schedulable
{
  public RealtimeThread(SchedulingParameters s, ReleaseParameters r);
  . . .
  . . .
  public static RealtimeThread currentRealtimeThread();
  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 boolean waitForNextPeriod() throws ...;
  public synchronized void interrupt();
  // overrides java.lang.Thread.interrupt()
  public static void sleep(Clock c, HighResolutionTime time) throws ...;
}
Ravenscar Periodic Thread
Asynchronous Event and Handler
A Real-Time Application
Periodic Event Handlers
Aperiodic Event Handlers
collected in a mission
Mission Handler
Each handler
has a Memory
is Scheduled
20
Periodic handler
class Periodic extends PeriodicEventHandler
{
  protected Periodic(.., PeriodicParameters pp,
                     Scheduler scheduler,
                     MemoryArea memory);
  public void handleEvent() {
    // the logic to be executed every period
  }
}
21
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
  }
}
22
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));
  }
}
23
…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
24
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);
}
25
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();
}
26
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
ImmortalPhysicalMemory
VTMemory
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)