Seminar Real-Time Java Wintersemester 2002/2003 High-Resolution Time Real-Time Threads Matthias Peters 20.02.2003 Seminar: Real-Time Java Matthias Peters Übersicht High-Resolution Time •Motivation •Genauigkeit •Haupt- und Unterklassen Real-Time Threads •Motivation •Features •Erzeugung •Handler 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time Motivation • „Zeit“ bedeutendes Merkmal vieler Realzeit-Systeme • RZ-Systeme benötigen Zeit-Darstellung als – Intervalle – Zeitpunkte – Frequenz und mit – hoher Genauigkeit – grosser Reichweite • Gewöhnliche Java-Zeit nicht ausreichend 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time • Darstellung durch 84 Bit – 64 Bit für Millisekunden-Wert – 32 Bit für Nanosekunden ( d.h. höchste 12 Bit sind Millisekunden) • Reichweite 292 Millionen Jahre • Genauigkeit Nanosekunden 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time • Abstrakte Basis-Klasse – Felder für Milli- und Nanosekunden – Gemeinsame Methoden der Unterklassen • Unterklassen: – AbsoluteTime – RelativeTime – RationalTime (extends RelativeTime) 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time • Klassendiagramm 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time AbsoluteTime Absolute Zeit relativ zu 00:00:00.000 GMT am 1.Januar 1970 Methoden – Rechnen mit relativen Zeiten – Konvertieren von und zu java.util.Date 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time RelativeTime • Zeitspanne, positiv, negativ oder null • Arithmetische Operationen auf den Zeitspannen • Zusätzliche Methoden für Unterklasse RationalTime 20.02.2003 Seminar: Real-Time Java Matthias Peters High-Resolution Time RationalTime extends RelativeTime • Fügt Frequenz hinzu • Bestimmte Anzahl Ausführungen in einer Zeitspanne • Keine zu enge Einschränkung: Betrachtung aufeinanderfolgender Intervalle 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Motivation • gewöhnliche Threads nicht geeignet für RZSysteme – – – – zu wenig Prioritäten möglich unterliegen dem Garbage-Collecting unzureichende Behandlung asynchroner Events unzureichende periodische Benutzbarkeit 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads javax.realtime.RealtimeThread extends java.lang.Thread 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Real-Time Threads haben zusätzliche Features: – – – – – Erweiterte Prioritäten Scoped Memory Dienste für asynchr. unterbrochene Exception Periodisches Scheduling Jedes nicht-periodische Scheduling, das von der Plattform angeboten wird 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Weitere Features (auch bei gewöhnlichen Threads): – Striktes Prioritäten Scheduling – Priority inheritance protocol für wechselseitige Blockierungen 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Erzeugung von Threads import javax.realtime.*; public class Hello1 { public static void main(String [] args){ RealtimeThread rt= new RealtimeThread(){ public void run() { System.out.println("Hello RT world"); } }; rt.start(); } } 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Erzeugter Thread – Erbt Parameter-Werte der Eltern oder – Bekommt default-Werte durch zuständigen Scheduler – Unterschied, ob Erzeuger gewöhnlicher oder Real-Time Thread 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Parameter des Konstruktors • Scheduling Parameter • Release Parameter – periodisch – aperiodisch – sporadisch 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Parameter des Konstruktors • Memory Parameter • Memory area • Prozess-Gruppe • Logic 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Scheduling RTSJ verlangt: – fixed-priority preemtive Scheduler – mindestens 28 versch. Prioritäten 10 non-real-time Prioritäten 20.02.2003 < 28 real-time Prioritäten Seminar: Real-Time Java Matthias Peters Real-Time Threads Optionale Features für periodisches Scheduling: • • • • • 20.02.2003 feasibility analysis deadline aware miss handler overrun-Handler ImportanceParameters Seminar: Real-Time Java Matthias Peters Real-Time Threads Periodischer Thread Release Parameter: • • • • • • 20.02.2003 start period cost deadline missHandler overrunHandler Seminar: Real-Time Java Matthias Peters Real-Time Threads Periodischer Thread Reaktionen bei Overrun oder Miss ohne Handler: – good citizen – desperate outlaw (ignoriert waitForNextPeriod) 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Periodischer Thread Ausnutzen der Feasibility-Analyse – addIfFeasible – setIfFeasible – setMemoryParametersIfFeasible – ... zusätzlich der gleiche Satz ohne Admission Control 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Periodischer Thread mit Handler – Scheduler erkennt Overrun frühzeitig und reagiert – deschedulePeriodic stoppt Thread – OverrunHandler wird aufgerufen und versucht „Fehler“ zu beheben – Thread wird mit schedulePeriodic fortgesetzt 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads OverrunHandler extends AsyncEventHandler – – – – sucht den Grund des Problems kann Kosten des Threads erhöhen benutzt die Feasibility-Analyse terminiert fehlerhafte Threads mittels AIE (asynchronously interrupted exception) 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads MissHandler – ähnlicher Mechanismus, wie der OverrunHandler – reagiert je nach „Härte“ der Realzeit der Thread • wird sofort wieder aktiviert und darf mit seiner Berechnung fortfahren • bekommt AIE und darf in nächster Periode neue Berechnung starten • darf mit aktueller Berechnung in der nächsten Periode fortfahren 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads MissHandler • passiv: keine Anstrengungen, weitere Misses zu verhindern • aggressiv: versucht, Problem zu beheben feuert AIE auf Thread • unterschiedliche Auswirkungen auf die Ausführung anderer Threads 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Interaktion mit normalen Threads • gewöhnliche Threads können ohne Modifikation in der RT-Umgebung laufen • Performance-Probleme bei Interaktion • Priority-Boosting nicht JLS-gerecht 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Übernahme von herkömmlichen Java-Code in RTSJ-Plattform • Realzeit-Möglichkeiten ignorieren und auf RTUmgebung vertrauen • alle langsamen Threads finden und „boosten“ • alle langsamen Threads finden und ein RTUntersystem schaffen mit identischen RT-Threads • alle gewöhnlichen Threads in RT-Threads konvertieren 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Erschaffen und Benutzen eines anderen Schedulers • default : fixed-priority preemptive scheduler • Thread kann beliebigen Scheduler wählen • RTSJ enthält APIs zum Anpassen – dynamischer Prioritäten-Scheduler – beliebiger Scheduler von Betriebssystem oder JVMEntwicklern • Erschaffen komplett neuer Scheduler nicht in RTSJ 20.02.2003 Seminar: Real-Time Java Matthias Peters Real-Time Threads Fazit • Jeder gewöhnliche Thread kann durch einen Real-Time Thread ersetzt werden • RT Threads bieten – funktionierende Prioritäten – periodisches Scheduling – priority boosting 20.02.2003 Seminar: Real-Time Java Matthias Peters