programming r-t abstractions tsw november 2009 anders p. ravn aalborg university

Post on 19-Dec-2015

213 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Programming R-T Abstractions

TSW November 2009Anders 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 SporadicParameterspublic 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 AsyncEventpublic 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 Clockpublic 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 RealTimeThreadpublic 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

Thread MemoryArea

+run() : void

«interface»Runnable

«interface»Schedulable

RealtimeThread

NoHeapRealTimeThread

-End1

1

-End2

1

-aJileTh : com.ajile.jem.PeriodicThread

PeriodicThreadInitializer

PriorityParameters

-End1

1

-End2

1

PeriodicParameters

+run() : void

«interface»Runnable

-End1

1

-End2

1

-End1

1 -End2

1

Asynchronous Event and Handler

#bindTo(in happening : String)#addHandler(in handler : AsyncEventHandler)#fire()

AsyncEvent

+fire()

SporadicEvent SporadicInterrupt

BoundAsyncEventHandler

#handleAsyncEvent()+run()

AsyncEventHandler

+handleAsyncEvent()

SporadicEventHandler

NoHeapRealTimeThread

RelativeTime

-End1

1

-End2

1

-End1

1

-End2

1

uses

+run()

«interface»Runnable

«interface»Schedulable

uses

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 handlerclass Periodic extends PeriodicEventHandler{ protected Periodic(.., PeriodicParameters pp, Scheduler scheduler, MemoryArea memory);

public void handleEvent() { // the logic to be executed every period }}

21

Aperiodic handlerclass 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 missionpublic 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 missionprivate 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

LTMemoryImmortalPhysicalMemory

VTMemory

RTSJ MemoryAreapublic 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)

top related