The Real-Time Specification for Java

Werbung
Echtzeitprogrammierung in Java
The Real-Time
Specification
for Java
Andrzej Kononowicz
Clausthal 2003
Real-Time Java Specification
1
Eignung von Java für Echtzeitsysteme
Java wurde nicht zur Programmierung
von Echtzeitsysteme entworfen.
Nachteile der Standard Java Spezifikation
• Nichtvorhersehbares Verhalten
• Speicherverwaltung
ECHT-Zeit
• Scheduling und Synchronisation
bedeutet nicht
ECHT-Schnell
• Schlechte Performance
Real-Time Java Specification
2
The Real-Time Specification for Java
Geschichte der Entstehung von RTSJ
1998 1999 2000 2002 -
The Real-Time for Java Expert Group
Community Review Draft
Public Release als Buch
Reference Implementation durch TimeSys
Entwicklungsrichtlinien von RTSJ
•
•
•
•
•
•
Vorhersehbare Ausführungszeiten
Keine Einschränkung auf spezielle Java-Umgebungen
Portabilität (Write Once – Run Anywhere)
Abwärtskompatibilität
Up-To-Date aber auch offen für zukünftige Entwicklungen
Keine syntaktischen Erweiterungen
Real-Time Java Specification
3
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
4
Threads und Scheduling
Jedes Objekt, welches das Interface Scheduleable
implementiert:
•
kann einem Scheduler übergeben werden,
der es zu gegebener Zeit ausführt
•
wird charakterisiert durch:
- SchedulingParameters
- ReleaseParameters
- ProcessingGroupParameters
- MemoryParameters
Real-Time Java Specification
5
Scheduling Parameters
SchedulingParameters
• Bestimmen die Ausführungsprioritäten
• Werden vom Programmierer und nicht
durch das System vergeben
PriorityParameters
priority : int
ImportanceParameters
importance : int
Real-Time Java Specification
• Eine Änderung der SchedulingParameter wird sofort vom Scheduler
wahrgenommen.
• Jede RTSJ-Implementation muss
einen Scheduler beinhalten, der
mindestens 28 verschiedene
Prioritätsstufen unterscheidet.
6
Release Parameters
ReleaseParameters
cost : RelativeTime
deadline : RelativeTime
overrunHandler : AsyncEventHandler
missHandler : AsyncEventHandler
Bestimmen die Auslösungsparamter:
• Berarbeitungszeit
• Deadline
• Reaktion bei Überschreitung der
Bearbeitungszeit oder der Deadline
PeriodicParameters
period : RelativeTime
start : HighResolutionTime
AperiodicParameters
SporadicParameter
minimumInterarrival : RelativeTime
ProcessingGroupParameter - ähnlich definiert wie PeriodicParameters
mit dem Unterschied, dass nicht nur ein Thread, sondern eine Gruppe von Threads
unter den selben Constraints ausgeführt werden muss.
Real-Time Java Specification
7
Schedulable Objects
Runnable
(from java.lang)
Thread
(from java.lang)
Schedulable
RealtimeThread
NoHeapRealtimeThread
Real-Time Java Specification
AsyncEventHandler
BoundAsyncEventHandler
8
RealtimeThread
void setScheduler(Scheduler scheduler)
throws IllegalThreadStateException;
void addToFeasibility();
boolean addIfFeasible();
boolean waitForNextPeriod()
throws IllegalThreadStateException;
static void sleep(HighResolutionTime time)
throws InterruptedException;
synchronized void interrupt();
Real-Time Java Specification
9
RealtimeThread vs.
NoHeapRealtimeThread
RealtimeThread
• kann Objekte auf dem Heap zugreifen
• kann durch den GC verzögert werden
• Anwendung → weniger zeitkritische Aufgaben
NoHeapRealtimeThread
• kann keine Objekte auf dem Heap zugreifen
• wird nicht vom GC beeinflusst.
• Anwendung → Aufgaben mit kleinen zeitlichen Toleranzen
Real-Time Java Specification
10
Scheduler
Scheduler
addToFeasibility(s : Schedulable) : void
removeFromFeasibility(s : Schedulable) : void
isFeasible() : boolean
getPolicyName() : java.lang.String
PriorityScheduler
fireSchedulable(s : Schedulable) : void
getMaxPriority() : int
getMinPriority() : int
getNormPriority() : int
Ein Scheduler verwaltet die
Ausführung von Objekten die
das Schedulable Interface
implementieren.
Beinhaltet:
• Scheduling-Algorithmus
• Feasibility-Algorithmus
Jede RTSJ Implementation
besitzt den PriorityScheduler
• unterbrechbar
• prioritätsgesteuert
• 28 Prioritätsstufen (+10)
Anwendungspezifische Scheduler
Real-Time Java Specification
11
Beispiel
Erstellung eines Threads
• Start – 0 ms
• Bearbeitungszeit – 30 ms
• Deadline – 60 ms
• Periode – 100 ms
Real-Time Java Specification
Beispiel 1
12
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
13
Synchronized
Java – nur gegenseitiger Ausschluss bei kritischen Ressourcen
RTSJ – neue Semantik für das Schlüsselwort synchronized.
• Jede RTS Implementation muss den Priority-Inheritance Algorithmus
implementieren. Die Implementation von Priority-Ceiling Algorithmus ist
optional.
• Wait-Free Queues erlauben Echtzeitthreads mit normalen Threads zu
synchronisieren.
MonitorControl
PriorityInheritance
Real-Time Java Specification
PriorityCeilingEmulation
14
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
15
Asynchrones EventHandling
AsyncEvent repräsentiert Hardwareinterrupts, Signale, programmatische Ereignisse, …
void fire()
void setHandler(AsyncEventHandler handler)
void bindTo(String happening)
throws UnknownHappeningException
AsyncEventHandler von einem AsyncEvent aktiviert
wird einem Scheduler übergeben
besitzt die selben Parametertypen wie ein RealtimeThread
BoundAsyncEventHandler Erbt aus AsyncEventHandler
Garantie eines eigenen Threads
Real-Time Java Specification
16
Beispiel
Beispiel 2
Das Binden eines asynchronen Ereignisses
an ein Hardwareinterrupt
Real-Time Java Specification
17
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
18
Asynchrone Übergabe der Kontrolle
in Java
Frühe Java-Versionen erlaubten:
void suspend();
void resume();
void stop();
deprecated !!!
Standard Java unterstützt jetzt nur:
void interrupt() throws SecurityException;
boolean isInterrupted();
public destroy(); → deadlocks
Real-Time Java Specification
19
Asynchrone Übergabe der Kontrolle
in RTSJ
Um den Mechanismus der Asynchronen
Übergabe der Kontrolle in RTSJ zu benutzen
muss man folgende drei Schritte befolgen:
1. Deklaration der AsynchronouslyInterruptedException
2. Auswahl der Methode, die unterbrechbar sein soll
3. Signalisierung der AsynchronouslyInterruptedException
Real-Time Java Specification
20
Asynchrone Übergabe der Kontrolle
in RTSJ
Ein RealTimeThread t kann durch einen anderen Thread unterbrochen
werden indem z.B. die interrupt() Methode aufgerufen wird. Eine
AsynchronouslyInterruptedException wird ausgelöst. Die
Konsequenzen einer solchen Unterbrechung sind folgende:
• Wenn t sich in einer Methode befindet, die AIE nicht voraussetzt,
so wird die Ausführung der AIE bis zu der Zeit verschoben, wo t die
AIE-verbietende Methode verlässt und eine Methode ausführt die
AIE zulässt.
• Wenn t sich in einer Methode befindet die AIE voraussetzt so wird
die Methode unterbrochen und die alternative Methode wird
ausgeführt.
• Die AIE kann man natürlich mit einem try{}catch(AIE)
Programmblock auffangen.
• Wurde t durch eine wait(),sleep() oder join() Methode
aufgehalten so wird er rescheduled und die AIE wird aufgerufen.
Real-Time Java Specification
21
Asynchrone Übergabe der Kontrolle
in RTSJ
InterruptedException
(from java.lang)
Interruptible
interruptAction(e : AIE) : void
run(e : AIE) : void
AsynchronouslyInterruptedException
doInterruptible(logic : Interruptible) : boolean
fire() : boolean
happened(propagate : boolean) : boolean
propagate() : void
disable() : void
enable() : boolean
Timed
<<constructor>> Timed(time : HighResolutionTime)
resetTime(time : HighResolutionTime) : void
Real-Time Java Specification
22
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
23
Zeit in RTSJ
Standard Java
static long java.lang.System.currentTimeMillis()
javax.swing.Timer, java.util.Timer
RTSJ
HighResolutionTime
Comparable
getMiliseconds()
getNanoseconds()
(from java.lang)
AbsoluteTime
RelativeTime
add(time : RelativeTime) : AbsoluteTime
substract(time : AbsoluteTime) : RelativeTime
substract(time : RelativeTime) : AbsoluteTime
add(time : RelativeTime) : RelativeTime
substract(time : RelativeTime) : RelativeTime
RationalTime
getFrequency() : int
Real-Time Java Specification
24
Clocks
• Dienen zum Auslösen von Timers
• Clock – Abstrakte Klasse
• Jede RTSJ Implementation beinhaltet einen
RealtimeClock
public AbsoluteTime getTime();
• Andere Clocks geplant:
– UserTimeClock
– SimulationTimeClock
Real-Time Java Specification
25
Timers
AsynchronicEvent
Timer
Timer(t : HighResolutionTime, c : Clock, h : AsynchronicEventHandler)
start() : void
stop() : void
isRunning() : boolean
reschedule(time : HighResolutionTime)
OneShotTimer
PeriodicTimer
setInterval(interval : RelativeTime) : void
Real-Time Java Specification
26
The Real-Time Specification for Java
Die Erweiterungen des Java Standards :
1.
Threads und Scheduling
2.
Synchronisation
3.
Asynchrones Eventhandling
4.
Asynchrone Übergabe der Kontrolle
5.
Zeit und Zeitmesser
6.
Speicherverwaltung
Real-Time Java Specification
27
Speicherverwaltung in Java
Standard Java:
• Objekte werden auf einem Heap verwaltet
• Jede VM besitzt genau eine Heap-Instanz – es ist
die einzige Speicherart
• GC gibt ein Objekt frei falls keine Referenz mehr
auf es zeigt
• GC läuft mit der höchsten Priorität im System
Real-Time Java Specification
28
Speicherverwaltung in RTSJ
RTSJ unterscheidet
3 Speicherarten:
Heap memory:
• Die bisherige Speicherart von JVM.
• Der GC verwaltet die Freigabe
nicht mehr gebrauchten Speichers.
Scoped memory:
• Beschränkte Lebensdauer der
Objekte
• Objekte in diesem
Speicherbereich werden
zusammen freigegeben, wenn
kein einziges mehr durch einen
Echtzeitthread referenziert wird.
Immortal memory:
• Wird von den Threads gemeinsam gebraucht (eine Instanz für JVM)
• GC hat keinen Zugriff
• Objekte werden nicht gelöscht
• Objekte dürfen nur andere Objekte in der Immortal memory oder auf
dem Heap referenzieren.
Real-Time Java Specification
29
MemoryArea
MemoryArea
enter(logic : Runnable) : void
newArray(type : Class, number int) : Object
newInstance(type : Class) : Object
memoryConsumed() : long
memoryRemaining() : long
ImmortalMemory
HeapMemory
ScopedMemory
joinAndEnter(logic : Runnable) : void
VTMemory
Real-Time Java Specification
VTPhysicalMemory
LTMemory
LTPhysicalMemory
30
Physical Memory Areas
Physical Memory Area dient zum Platzieren von Objekten in bestimmten Speicherarten:
• High-speed RAM
• Battery backed RAM
• DMA
• Memory-mapped I/O
PhysicalMemoryManager
• Verwaltet physischen Speicher
• Unterstützt abnehmbare Speicher (z.B. PCMCIA)
• Beinhaltet Methoden zur Einfügung und Entfernung des Speichers
PhysicalMemoryTypeFilter
• Bietet Mittel zur Beschreibung der Eigenschaften eines bestimmten
Speichertyps
Real-Time Java Specification
31
RawMemoryAccess
RawMemoryAccess
• Modelliert einen Bereich physischen Speichers als eine
festgelegte Reihenfolge von Bytes
• Dient nur zur Aufbewahrung bestimmten primitiven Datentypen:
byte,short,int,long oder deren Arrayes
• Kann keine JavaObjekte beinhalten
• Die Daten kann man durch Adressabstände (Offsets) von einer
bestimmten Basisadresse erreichen
• Byteordnung ist einstellbar
RawMemoryAccessFloatAccess
Aufbewahrung von Gleitkommazahlen - float,double
Real-Time Java Specification
32
Speicherverwaltung
SizeEstimator
Hilft bei Schätzung des benötigten Speichers
Kann als Parameter für die MemoryArea Klassen dienen
void reserve(Class c, int n)
fügt n Instanzen von einer Klasse c zur Schätzung hinzu
long getEstimate()
gibt die geschatzte Anzahl von Bytes zurück
MemoryParameters
Legt die SpeicherParameter für die Schedulable-Objekte fest.
public void setAllocationRate(long allocationRate)
public boolean setMaxImmortalIfFeasible(long maximum)
public boolean setMaxMemoryAreaIfFeasible(long maximum)
Real-Time Java Specification
33
Evaluating the Expressive Power of the
Real-Time Specification for Java
A. J. Wellings – University of York
P. Puschner – Technische Universität Wien
Auswertung von Real-Time Specification for Java durch Case Studies:
• An Extensible General Resource Controller
• Atomic Action Support
• Unbounded Computations
Beispiel: Resource Controller
Ein Betriebsmittel wird durch eine kritische Sektion
geschützt. Die Warteschlange der Jobs vor der kritischen
Sektion wird nach Prioritäten geordnet.
Beispiel: Atomic Actions
Gegeben sei eine Reihe von Jobs die nicht unterbrochen
sein sollten. Zu programmieren ist die Möglichkeit der
Wiederherstellung des Zustandes des Systems wenn die
Reihe der Jobs doch unterbrochen worden ist.
Real-Time Java Specification
Beispiel:
Unbounded
Computations
Effektive Nutzung
der freien Zeit
zwischen Jobs
34
Reference Implementation
http://www.timesys.com
• Die erste RTSJ Reference Implementation
• TimeSys Linux RTOS
• JTime
Real-Time Java Specification
35
Quellenangabe
1.
2.
Bollella G., Brosgol B., Furr S., Hardin D., Dibble P., Golsing J., Turnbull
M., "The Real-Time Specification for Java", Addison-Wesley, 2000
Wellings A.J., Puschner P. „Evaluating the Expressive Power of Real-Time
Specification for Java”, Real-Time Systems, 24, 2003
Materialien von:
• Christos Kloukinas, VERIMAG, Grenoble
• David Holmes, DLTeCH Pty Ltd Brisbane, Australia
• András Király, Universität Zürich
ENDE
Real-Time Java Specification
36
Herunterladen