A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007
Forfatterne Martin Schoeberl Udvikler af JOP processoren Hans Søndergaard Lektor ved Vitus Bering Denmark Bent Thomsen Lektor ved Aalborg Universitet Database og programmerings teknologier Lokale: 3.2.38 Anders P. Ravn Professor ved Aalborg Universitet 2/20
Artiklen Udgivet ved Bidrag Proceedings of the 10th IEEE International Symposium on Object and Component-Oriented Real-Time Distributed Computing Profil til Hard Real-Time systems Er ikke et RTSJ subset Profil til ajile og JOP 3/20
Hvorfor en ny profil? RTSJ Er for generel Mange dynamiske features Ravenscar-Java Subset af RTSJ Fjerner usikre features Stadig for kompleks 4/20
Safety Critical Java Baseret på: JSR-302 specification request DO-178B standard Design mål Nemt framework Simpel program analyse Nemt at implementere på indlejrede systemer Minimal implementations detaljer Skal kunne læres på under en dag 5/20
Oversigt 1 Valg af features/begrænsninger 2 Safety Critical Java 3 Implementation 4 Eksempel 5 Konklusion 6/20
Thread ændringer i forhold til RTSJ Parametre i constructoren til RealtimeThread Scheduling Processing group Hukommelse parametre og områder Initializer thread Skal laves eksplicit i RTSJ Laves i stedet i main metoden i SCJ waitfornextperiod Er fjernet Håndteres af scheduleren 7/20
Release parametre Prioritet ikke nødvendigt Bruger release og deadline tid Bliver prioriteret af scheduleren Schedulability kan verificeres Cost Ikke en del af profilen Skal checkes af et tool offline. 8/20
Et overblik over SC Java profilen Indeholder følgende Periodic threads (PeriodicThread) Sporadic threads (SporadicThread) Runtime systemet (RealtimeSystem) Tidsbegreb (RelativeTime) Hukommelses tilgang 9/20
Klasse struktur af threads RealtimeThread <<abstract>> #run() : boolean #cleanup() : boolean packag public pr PeriodicThread <<abstract>> SporadicThread <<abstract>> +fire() pr MyPeriodicThread MySporadicThread ab pr 10/20 Figure 1. Class structure of the profile with
4 t n o ( Sammenlignet med RJ 11/20 Figure 7. Thread and Handler classes: (left), our SCJ proposal (right) RJ W t b
RealtimeThread public abstract class RealtimeThread { protected RealtimeThread(RelativeTime period, RelativeTime deadline, RelativeTime offset, int memsize) protected RealtimeThread(String event, RelativeTime mininterval, RelativeTime deadline, int memsize) abstract protected boolean run(); protected boolean cleanup() { return true; 12/20
p Eksekveringsforløb i SCJ 13/20 Tilstande Initialized Figure 5. Application states Alle objekter oprettes ThoseLaves three i main states metoden are inspired by the states in a MIDlet, but they Mission are also based on industrial experiences from realtime systems Alle tråde which startes need to shut down in a controlled way. Stop Run returnerer boolean Cleaup kaldt i stedet for run 3.3.1 Shutdown
Implementation af SCJ Implementeret til JOP og ajile Simpel implementation Bruger eksisterende thread implementation API Et nyt API i stedet for subset af RTSJ Bruger object composition Små rene klasser 14/20
Standard libraries Problemer med eksisterende libraries Dynamisk hukommelse allokering Dårlig WCET, fokusere på average Javolution Genbruger hukommelse Fokuserer på WCET, men garanterer ingen WCET Fokuserer på predictability frem for plads forbrug 15/20
Standard libraries Problemer med eksisterende libraries Dynamisk hukommelse allokering Dårlig WCET, fokusere på average Javolution Genbruger hukommelse Fokuserer på WCET, men garanterer ingen WCET Fokuserer på predictability frem for plads forbrug 15/20
Standard libraries Canteen Tilbyder List, Set og Map Tilbyder statisk analyse af WCET Kaster ikke exceptions i mission phase Ingen hukommelses allokering i mission phase Understøtter generics Kompatibel med standard Java interface 16/20
17/20 public class PeriodicSporadic { public static void main(string[] args) { final SporadicThread rte = new SporadicThread("SWEVENT", new RelativeTime(2000, 0)) { protected boolean run() { return true; ; new PeriodicThread(new RelativeTime(1000, 0)) { int counter = 0; protected boolean run() { ++counter; if (counter%2==1) rte.fire(); if (counter==10) RealtimeSystem.stop(); return true; protected boolean cleanup() { return true; ; RealtimeSystem.start();
17/20 public class PeriodicSporadic { public static void main(string[] args) { final SporadicThread rte = new SporadicThread("SWEVENT", new RelativeTime(2000, 0)) { protected boolean run() { return true; ; new PeriodicThread(new RelativeTime(1000, 0)) { int counter = 0; protected boolean run() { ++counter; if (counter%2==1) rte.fire(); if (counter==10) RealtimeSystem.stop(); return true; protected boolean cleanup() { return true; ; RealtimeSystem.start();
17/20 public class PeriodicSporadic { public static void main(string[] args) { final SporadicThread rte = new SporadicThread("SWEVENT", new RelativeTime(2000, 0)) { protected boolean run() { return true; ; new PeriodicThread(new RelativeTime(1000, 0)) { int counter = 0; protected boolean run() { ++counter; if (counter%2==1) rte.fire(); if (counter==10) RealtimeSystem.stop(); return true; protected boolean cleanup() { return true; ; RealtimeSystem.start();
17/20 public class PeriodicSporadic { public static void main(string[] args) { final SporadicThread rte = new SporadicThread("SWEVENT", new RelativeTime(2000, 0)) { protected boolean run() { return true; ; new PeriodicThread(new RelativeTime(1000, 0)) { int counter = 0; protected boolean run() { ++counter; if (counter%2==1) rte.fire(); if (counter==10) RealtimeSystem.stop(); return true; protected boolean cleanup() { return true; ; RealtimeSystem.start();
Hvorfor bruge profilen? Fordele Simpel profil Henvendt til sikkerheds kritiske systemer Object composition pattern Kun applikations specifikke krav Kræver tools til analyse af WCET Scheduling Worst-case memory consumption 18/20
Min mening om artiklen Fordele Nem at læse Ulemper God struktur Simpel og elegant løsning Mangler lidt detaljer om tools JOP og ajile implementation er ikke ens 19/20
Spørgsmål?