La Spécification Java pour le Temps Réel

Documents pareils
Plan. Java et le temps réel. Bertrand Dupouy ENST. Rappels sur les systèmes temps réel

Java et le temps réel

Java Temps Reel. par la pratique. 2009/2010

Synchro et Threads Java TM

Un ordonnanceur stupide

Threads. Threads. USTL routier 1

Programmer en JAVA. par Tama

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP1 : Initiation à Java et Eclipse

Applications Embarquées Critiques

Java Licence Professionnelle CISII,

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

INITIATION AU LANGAGE JAVA

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Corrigé des exercices sur les références

Introduction : les processus. Introduction : les threads. Plan

Ordonnancement temps réel

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Initiation à JAVA et à la programmation objet.

Package Java.util Classe générique

Programmation Objet Java Correction

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction aux systèmes temps réel. Iulian Ober IRIT

Langage Java. Classe de première SI

La JVM. La machine virtuelle Java. La JVM. La JVM

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Notion de thread (1/2)

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programme Compte bancaire (code)

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Auto-évaluation Programmation en Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TD2 Programmation concurrentielle

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction à la programmation concurrente

Plan du cours. Historique du langage Nouveautés de Java 7

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LOG4430 : Architecture logicielle et conception avancée

Développement Logiciel

as Architecture des Systèmes d Information

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Objets et Programmation. origine des langages orientés-objet

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java DataBaseConnectivity

Flux de données Lecture/Ecriture Fichiers

Une introduction à la technologie EJB (2/3)

Exécutif temps réel Pierre-Yves Duval (cppm)

Projet de programmation (IK3) : TP n 1 Correction

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Héritage presque multiple en Java (1/2)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Java Licence Professionnelle CISII,

TD3: tableaux avancées, première classe et chaînes

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Derrière toi Une machine virtuelle!

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TD/TP PAC - Programmation n 3

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

PROGRAMMATION PAR OBJETS

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Problèmes liés à la concurrence

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Introduction aux systèmes temps réel. Iulian Ober IRIT

Remote Method Invocation Les classes implémentant Serializable

INF 321 : mémento de la syntaxe de Java

Utilisation d objets : String et ArrayList

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

Généralités sur le Langage Java et éléments syntaxiques.

Java 1.5 : principales nouveautés

Chapitre I Notions de base et outils de travail

Une introduction à Java

Projet Active Object

Applet pour visualiser les variables «automate» notifiées

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Remote Method Invocation (RMI)

Design patterns. Design patterns - définition. Design patterns - avantages

Cours de Systèmes d Exploitation

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Génie Logiciel avec Ada. 4 février 2013

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Programmation par les Objets en Java

ACTIVITÉ DE PROGRAMMATION

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Introduction au langage Java

Bases Java - Eclipse / Netbeans

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Programmation Par Objets

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Transcription:

ETR 2007 Nantes, 6 Septembre 2007

Outline Outline Introduction Ordonnanceurs la classe Scheduler Flexibilité PriorityScheduler Faisabilité Entités Ordonnançables Les RealtimeThreads Les AsyncEventHandlers Paramètres SchedulingParameters ReleaseParameters PeriodicParameters SporadicParameters Temps et Timers Les ProcessingGroupParameters Mémoire Mémoire Immortelle et Mémoire Scope Détection des Fautes Fautes Périodiques Fautes Sporadiques Ressources Partagées Protocoles d Accès et Moniteurs Résultats RI 1.0.1 (PIP) Résultats Jtime (PIP) Conclusion

Spécification de propriétés temporelles pour Java Historique 1998: Appel à spécification: JSR-1 1999: 1 er Draft 2002: RTSJ 1.0 approuvée par JCP 2005: RTSJ 1.0.1 2006: RTSJ 1.0.2 RI(Timesys), JamaïcaVM(Aicas), jrate(sourceforge), Mackinac(Sun), Apogee Aphelion JRE (LynxOs), Websphere RealTime (IBM).

Apport du temps réel à Java: choix de l Ordonnanceur et plusieurs types d Entités Ordonnançables(EO); Propriétés temporelles modèles d activation, échéance, plus de contrôle affectation de ressources, interruptions asynchrone, choix du type de mémoire. Déterminisme analyse de faisabilité. Apport de Java pour le temps réel : Simplicité et Portabilité (WORA WOCRAM)

Ordonnanceurs - la classe Scheduler un Ordonnanceur à Priorités Fixes est obligatoire classe PriorityScheduler, un minimum de 28 niveaux de priorité, Pri > 10 Entités Ordonnançables Prio <= 10 Threads Java il peut exister d autres classes Scheduler EDFScheduler; Scheduler Scheduler.getDefaultScheduler(); void Scheduler.setDefaultScheduler(Scheduler s); String Scheduler.getPolicyName(); public static void main(string [] args){ Scheduler.setDefaultScheduler(PriorityScheduler.instance());

Ordonnanceurs - Flexibilité Trois grandes approches pour l intégration d un ordonnanceur Le système propose un mécanisme pour insérer (plugger) un nouvel ordonnanceur ordonnanceur pluggable, [Corba Dynamic Scheduling]. Le système notifie l application lors de chaque évènement nécessitant une décision d ordonnancement, l application décide quel thread doit s exécuter et en informe l ordonnanceur ordonnanceur applicatif, [Posix Realtime extension]. L implantation (JVM) peut proposer differents ordonnanceurs (nécessite une modification du système (JVM) ordonnanceur dépendant de l implantation, [Ada 95][RTSJ]. RTSJ a adopté la troisième approche soit la moins portable. Lire [Zerzelidis & Wellings JTRES 2006] pour une approche flexible basée sur un PriorityScheduler.

PriorityScheduler Ce qui est dit: support de la préemption support de la notion de priorité de base (fixée par l application) et de priorité active l ordonnanceur considère la priorité active. Cette dernière est modifiable à tout moment par l application ou par le système (synchronisations) 28 niveaux de priorité au minimum (RI : 11 RTthreads <11 Threads). support des PriorityInheritance et Priority Ceiling Emulation pour les objets moniteurs. Une entité bloquée est placée en queue de sa file de priorité lorsqu elle redevient éligible. Idem pour un thread appelant a méthode yield(). Ce qui n est pas dit: La position de replacement d une entité préemptée dans sa file de priorité n est pas spécifiée (tête de file recommandée). La politique d ordonnancement des entités dans une même file de priorité n est pas spécifiée (Fifo; RR; autre).

Analyse de Faisabilité le rôle essentiel de la classe Scheduler est de fournir des méthodes pour l analyse de faisabilité admission d une nouvelle entité dans le système RealtimeThread, AsyncEventHandler ajout ou retrait de la liste des objets ordonnançables: sans condition de faisabilité boolean Scheduler.addToFeasibility(); boolean Scheduler.removeFromFeasibility(); modification des paramètres sous condition de faisabilité boolean Scheduler.setIfFeasibility(); pour tester la faisabilité du système boolean Scheduler.IsFeasibility();

Analyse de Faisabilité on peut avoir besoin des les surcharger (analyse insuffisante, ou méthodes non synchronisées (pas obligatoire) (pb si admission dynamique). on peut surcharger Scheduler (portée tous les Scheduler) ou PriorityScheduler; Schedulable (portée tous les Schedulable (RealtimeThread, AsynEventHandler et futurs) ou une classe de Schedulable (RealtimeThreads);

EO = instances de Classes implantant Schedulable (classe abstraite) Runnable Schedulable Thread RealtimeThread AsyncEventHandler NoHeapRealtimeThread BoundAsyncEventHandler

Les RealtimeThreads import javax.realtime.*; public class LaPlusSimple { public static void main (String [] args){ RealtimeThread lps = new RealtimeThread(){ public void run () { System.out.println ("hello from LaPlusSimple"); ; lps.start(); s assurer que la classe lanceur est bien un RealtimeThread (modif entre les implantations RI1.0.1 et RI1.0.2). pour être sur: public class LaPlusSimple extends RealtimeThread

Les AsyncEventHandlers AsyncEventHandler aeh=new AsyncEventHandler(){ public void handleasyncevent(){ System.out.println("hello from laplussimpleaperiodic"); ; AsyncEvent ae = new AsyncEvent(); ae.addhandler(aeh); ae.fire(); On peut associer plusieurs AEH à un même évènement; On peut associer un même AEH à un plusieurs évènements ; Dans ce cas on en pas capable d indentifier la source de l évènement -> Surcharger AEH pour enregistrer les références des AE -> Ajouter une condition de déclanchement (metaevènements)

Paramètres des des entités ordonnançables: les classes de paramètres Les paramètres d ordonnancement: classe SchedulingParameters Les paramètres d activation: classe ReleaseParameters Les paramètres de groupe: classe ProcessingGroupParameters Les paramètres mémoire: classe MemoryParameters Classes applicables à toutes les EO

SchedulingParameters SchedulingParameters PriorityParameters ImportanceParameters public class PasTropDur { public static void main (String [] args){ RealtimeThread ptd = new RealtimeThread(new PriorityParameters(prio)){ public void run () { System.out.println ("hello from PasTropDur"); ; ptd.start();

SchedulingParameters public class launch2 extends realtimethread{ public launch2 (int prio){ super(new PriorityParameters(prio)); public void run(){ customrealtimethread t1=new customrealtimethread(12); customrealtimethread t2=new customrealtimethread(13); t1.start(); try{ Thread.sleep(100); catch (InterruptedException e){ t2.start(); for (long indice=0; indice < 100; indice++){ System.out.println("Compteur: t1.c="t1.c+"-t2.c="+t2.c); try{ Thread.sleep(30); catch(interruptedexception e){

SchedulingParameters public static void main(string [] args){ launch2 l2 = new launch2(15); l2.start(); class customrealtimethread extends RealtimeThread{ public int c = 0; public customrealtimethread(int prio){ super(new PriorityParameters(prio)); public void run(){ for(long k=0;k<1000000;k++){c++; //incrémente k jusqu à 1000000. [root@florance]#./tjvm -Djava.class.path=:/home/sm/coursjtr launch2 Compteur : t1.c=0 - t2.c=0 Compteur : t1.c=121628 - t2.c=0 Compteur : t1.c=254435 - t2.c=0 Compteur : t1.c=387245 - t2.c=0 Compteur : t1.c=387245 - t2.c=121628 Compteur : t1.c=387245 - t2.c=254435 Compteur : t1.c=387245 - t2.c=3737414 Compteur : t1.c=387245 - t2.c=6681064 Compteur : t1.c=387245 - t2.c=1000000 Compteur : t1.c=502966 - t2.c=1000000 Compteur : t1.c=548906 - t2.c=1000000

ReleaseParameters ReleaseParameters PeriodicParameters AperiodicParameters SporadicParameters éléments communs: coût; échéance relative; handlers. Dans la future version: BlockingTerm (pour les synchros)

ReleaseParameters import javax.realtime.*; public class SimplePeriodic { public static void main (String [] args){ RealtimeThread spt = new RealtimeThread( new PriorityParameter(15), new PeriodicParameters( null,//démarrage immédiat new RelativeTime(7000,0),//période new RelativeTime(2000,0),//cout new RelativeTime(7000,0),//échéance null,//overrunhandler null)//deadlinemissedhandler ){ public void run () { do { System.out.println ("hello from SimplePeriodic!"); while (waitfornextperiod()) ; spt.start();

ReleaseParameters AsyncEventHandler aeh=new AsyncEventHandler( new PriorityParameters(20), new SporadicParameters( new RelativeTime(4000,0), //mininterarrival new RelativeTime(1000,0), //cost new RelativeTime(2000,0), //deadline null, null); ) public void handleasyncevent(){ System.out.println("hello from laplussimplesporadic"); ; AsyncEvent ae = new AsyncEvent(); ae.addhandler(aeh); ae.fire();

Temps et Timers Comparable HighResolutionTime AbsoluteTime RelativeTime RationalTime Figure: diagramme de classes temps RationalTime prévue pour définir une fréquence a été dépréciée en version 1.0.1

Temps et Timers import javax.realtime.*; public class TOneShot{ static boolean stop=false; public static void main(string [] args){ AsyncEventHandler handler = new AsyncEventHandler() { public void handleasyncevent(){ stop = true; ; OneShotTimer timer = new OneShotTimer( new RelativeTime(10000, 0), mise à feu dans 10 secondes handler); timer.start(); while (!stop){ System.out.println ("..."); try{ Thread.sleep(1000); catch (Exception e){ System.exit(0);

Temps et Timers import javax.realtime.*; public class TPeriodique{ public static void main(string [] args){ AsyncEventHandler handler = new AsyncEventHandler(){ public void handleasyncevent(){ System.out.println("hip"); ; PeriodicTimer timer = new PeriodicTimer( null, // d\ emarrage imm\ ediat new relativetime(1000,0)//r\ eveil toutes les secondes handler); timer.start(); try{ Thread.sleep(10000);//attente de 10 secondes catch (Exception e){ timer.removehandler(handler); System.out.println("hourra"); System.exit(0);

Les ProcessingGroupParameters Les paramètres de groupe: classe ProcessingGroupParameters Similaire à des ReleaseParameters partagés par plusieurs entités schedulables. un coût partagé correspond à un budget alloué à un ensemble d objets Schedulable une période correspond à la période de renouvellement du budget. une échéance Deadline, des handlers Permettent de définir un serveur de tâches à un niveau logique (tâches apériodiques). -> Comment choisir une politique de service des apériodique (ps,ss, ds) -> A.F. les mêmes méthodes pour toutes les EO. Design de l AF limitée. -> Le mécanisme de Cost Enforcement étant optionnel les PGP sont diificilement utilisables(portables). -> Création d un nouvelle EO: classe abstraite TaskServer et classes dérivées PollingServer, DeferrableServer, Sproradicserver... TaskServer aura sa propre A.F.

Mémoire MemoryArea HeapMemory ImmortalMemory ScopedMemory ImmortalPhysicalMemory VTMemory LTMemory VTPhysicalMemory LTPhysicalMemory ScopedPhysicalMemory PhysicalMemoryManager RawMemoryAccess PhysicalMemoryTypeFilter SizeEstimator RawMemoryFloatAccess RTSj introduit la notion de régions Deux régions principales: Mémoire Immortelle (1) et Mémoire

Mémoire public abstract class MemoryArea{ protected MemoryArea(long size); protected MemoryArea(long size, Runnable logic); public void enter(); la mémoire est associée à l entité ord courante pour la dur public static MemoryArea getmemoryarea (Object o); public long memoryconsumed(); public long memoryremaining(); public long size(); enter(): la mémoire est associée à l EO courante pour la durée de sa méthode logic.run(); getmemoryarea(): retourne la référence de la mémoire associée à l objet o; memoryconsumed(): retourne le nbre de bytes utilisés dans la région; memoryremaining(): retourne le nbre de bytes libres dans la région size(): retourne la taille de la région.

Mémoire un objet peut être affecté dans une de ces zone de manière implicite (règles): public class MaClasse{ public Object o1 = new Object(); public static Objet o2 = new Object(); static{ Object o3 = new Objet(); Dans l exemple précédent, l objet o1 est alloué dans la heap memory, les objets o2 et o3 sont alloués dans l immortal memory.

Mémoire explicite: on utilise un objet de type MemoryParameters lors de la création d une EO: toutes les allocations du RTthread ou de l AEH sont faites dans la région choisie. explicite: une EO (Runnable) décide d entrer dans une région (immortelle ou scope). Toutes les allocations sont faites dans cette région ImmortalMemory.instance().enter(new Runnable){ public void run(){ // toute allocation dans run() est faite dans la mémoire immortelle );

Mémoire Immortelle et Mémoire Scope Mémoire Immortelle: Les objets ne sont jamais détruits. Le programmeur doit y créer des objets réutilisables Mémoire Scope: Contrairement à la précédente les objets créés en mémoire scope ont une durée de vie limitée à la durée de vie de la mémoire scope. La mémoire Scope est détruite lorsqu elle n est plus utilisée: lorsqu il n y a plus aucun Runnable associé à la scope.

Mémoire Immortelle et Mémoire Scope Mémoire Immortelle: Les objets ne sont jamais détruits. Le programmeur doit y créer des objets réutilisables Mémoire Scope: Contrairement à la précédente les objets créés en mémoire scope ont une durée de vie limitée à la durée de vie de la mémoire scope. La mémoire Scope est détruite lorsqu elle n est plus utilisée: lorsqu il n y a plus aucun Runnable associé à la scope. LTMemory: Le temps d allocation est linéaire en la taille de l objet créé (hors exécution du constructeur). VTMemory: Le temps d allocation est variable comme dans le tas mais plus rapide que dans le cas de la LTMemory.

Fautes Sporadiques Handler de dépassement de cout: CostOverrun (AsyncEventHandler): Facultatif Handler de dépassement d échéance DeadlineMiss (AsyncEventHandler): Obligatoire en cas de CostOverrun l EP est immédiatement rendue inéligible. en cas de DeadlineMiss l EP sera inéligible pour sa date de prochaine activation. Si un handler de dépassement est appelé alors l objet ne sera rendu inéligible qu en fin d instance courante (waitfornextperiod() sauf si le handler le rend à nouveau éligible (rescheduleperiodic()). La valeur de retour de waitfornextperiod() est true si aucun dépassement n a eu lieu lors de la précédente instance, false dans le cas contraire.

A chaque appel de la méthode fire() du gestionnaire d évènements, la tâche sporadique s active. En cas de non respect de la période minimale d un AsyncEventHandler plusieurs dispositions sont prévues par RTSJ. en ignorer l activation, déclancher une exception, le précédent évènement dans la file est remplacé, l évènement est sauvegardé. Ces différentes solutions sont représentées par la variable MitViolationBehavior (Minimum Les valeurs de comportement sont: MitViolationIgnore, MitViolationExcept, MitViolationReplace, MitViolationSave. L accès à la valeur courante est possible via getmitviolationbehavior(), elle est modifiable grâce à la méthode setmitviolationbehavior().

Dans la conception d un système il est réaliste d envisager que les applications partagent des ressources et que le respect de la cohérence de ces dernières impose un accès exclusif. En Java la directive synchronized permet de déclarer que l accès à une classe, à une méthode ou à un bloc d instructions est contrôlé par un objet moniteur. Le problème typique lié à l utilisation d objets moniteurs est l inversion de priorité non bornée. Le problème intervient lorsqu une tâche est bloquée pour une durée indéterminée par une tâche de priorité inférieure avec laquelle elle ne partage aucune ressource. solution protocole garantissant contre les inversions de priorités non bornées dans le moniteur de l objet partagé.

Protocoles d Accès et Moniteurs MonitorControl PriorityInheritance PriorityCeilingEmulation Figure: diagramme de classes Moniteurs

Protocoles d Accès et Moniteurs Blocage Direct Blocage Indirect t1 Priorité Haute demande (SC1) 000000 111111 000000 111111 accès (SC1) libération (SC1) 111000000 111111 000 111 000000 111111 2 4 6 7 11 t2 Priorité Moyenne 000000 111111 5 11 t3 Basse Priorité 000000 111111000 000000 111111 000000 111111 7 demande (SC1) instant d Héritage 00 11 00 11 exécution normale utilisation de la ressource inversion de priorité utilisation de la ressource en priorité élevée Figure: le protocole PIP

Protocoles d Accès et Moniteurs import javax.realtime.*; public class Inversion extends RealtimeThread { public static void main(string[] args){ SimpleDepThread t1 = new SimpleDepThread(); t1.setname("tau1"); SimpleThread t2 = new SimpleThread(); t1.setname("tau2"); SimpleDepThread t3 = new SimpleDepThread(); t1.setname("tau3"); t3.start(); sleep(0.5); // on attend 500 ms pour etre sur que t3 est entr\ e en sc1 t1.start(); // on démarre t1 t2.start();,//puis t2 public class Ressource{ public static synchronized void acces(){ System.out.println((RealtimeThread.currentThread()).getname()+"accède à RES1 for (k=0 ; k<31120000 ; k++); //occupation pendant une seconde (à adapter) System.out.println((RealtimeThread.currentThread()).getname()+"libère RES1")

Protocoles d Accès et Moniteurs public class SimpleThread extends RealtimeThread { public SimpleThread() public void run (){ System.out.println("début de"+(realtimethread.currentthread()).getname()); if for (k=0 ; k<31120000 ; k++); //exécution pendant une seconde System.out.println("fin de"+(realtimethread.currentthread()).getname()); public class SimpleDepThread extends RealtimeThread { public SimpleDepThread() public void run (){ System.out.println("début de"+(realtimethread.currentthread()).getname()); Ressource.acces(); System.out.println("fin de"+(realtimethread.currentthread()).getname());

Protocoles d Accès et Moniteurs monitorcontroljavax.realtime.priorityinheritance@13ee78 t3 : debut de instance 0 t3 : instance 01sec thread3enter RES-1 t31sec t1 : debut de instance 0 t1 : instance 01sec t32sec t33sec t2 : debut de instance 0 t2 : instance 01sec t2 : instance 02sec t2 : instance 03sec t2 : fin de instance 0 t34sec t35sec thread3leaves RES-1 thread1enter RES-1 t11sec t12sec t13sec t14sec t15sec thread1leaves RES-1

Protocoles d Accès et Moniteurs monitorcontroljavax.realtime.priorityinheritance@7b0c1c t3 : debut de instance 0 t3 : instance 01sec thread3enter RES-1 t31sec t1 : debut de instance 0 t1 : instance 01sec t32sec t33sec t34sec t35sec thread3leaves RES-1 thread1enter RES-1 t11sec t12sec t13sec t14sec t15sec thread1leaves RES-1 t1 : instance 01sec t1 : fin de instance 0 t2 : debut de instance 0 t2 : instance 01sec t2 : instance 02sec

Protocoles d Accès et Moniteurs t1 Priorité Haute 111000 111000000 111111 000 111 2 4 6 7 11 t2 Priorité Moyenne 000 111 000 111 000 111 000 111 000000 111111 000000 111111 5 11 000000 111111000 111000 111000 t3 Basse Priorité 000000 111111000 111000 111000 000000 111111 000000 111111 7 t1 t3 t4 t5 t6 t7 t0 t2 t8 t9 t10 00 11 00 11 00 00 00 11 00 11 00 11 11 11 exécution normale utilisation de SC1 inversion de priorité utilisation de la ressource SC2 00 11

Protocoles d Accès et Moniteurs Object res1 = new Object(); MonitorControl policy = res1.getmonitorcontrolpolicy(); PriorityCeilingEmulation pce = new PriorityCeilingEmulation(20); int ceiling = pce.getdefaultceiling(); MonitorControl.setMonitorControl(res1,pce);

RTSJ est une avancée concrète malgré sa jeunesse Des améliorations attendues dans la prochaines version (ex: BlockingTerm dans les ReleaseParameters) Permettre d appliquer un modèle d activation apériodique ou sporadique à des objets de type RealtimeThread en spécifiant des méthodes waitfornextrelease() et release()). transport d inforamation entre AsyncEvent et AsyncEventHAndler Support des dernières versions JAva 1.5 et 1.6 Attente forte de la version distribuée (DRTSJ)