etat de l’art de java temps réel java
DESCRIPTION
Etat de l’Art de Java Temps Réel JavaTRANSCRIPT
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 1
Etat de lart de Java temps relEcole dt Temps Rel Nancy 2005
Marc richard-Foy
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 2
Plan
1. Concepts et exemples de la concurrence Java 2. Critique du modle de la concurrence Java 3. Lapport Java 5 4. La spcification Temps rel RTSJ 5. La spcification SCJ 6. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 3
Concepts de la concurrence Java (1)
Il y a de nombreuses faons de supporter la programmation concurrente : API pour la gestion explicite de processus concurrents Mots cl ddis dans le langage (ex: task en Ada) Intgration dans la Programmation Oriente Objet avec par
exemple la notion dobjets actifs Java adopte lapproche des objets actifs pour
reprsenter les threads. Communication et synchronisation des threads
De nombreuses techniques : variables partages, passage de messages
Java adopte la notion de moniteur aussi bien pour les mcanismes dexclusion mutuelle que de communication asynchrone.
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 4
Concepts de la concurrence Java (2)
Un moniteur peut tre considr comme un objet o chacune de ses oprations sexcute en exclusion mutuelle
Etat encapsulInterface procdurale
Verrou
Les variables de conditions expriment une contrainte sur lordre dexcution des oprations
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 5
Les threads exemple (1)/* Programme qui compte jusqu une valeur passe en
argument de la ligne de commande. Chaque valeur de comptage est affiche lcran par le thread qui effectue le comptage tandis que le thread Main affiche un message indiquant quil a termin. */
public class MyApp extends Thread{public final int count;public MyApp(int count){ this.count = count; }public void run(){
for (int j=0; j
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 6
Les threads exemple (2)
Thread dans la JVM
Thread dans lapplication
Invoke MyApp.main
MyApp ma = new MyApp(...);
ma.start(); ma.run();
System.out.println("..."); System.out.println(j);
Implicite
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 7
Exclusion mutuelle - exemplepublic class Coordinate {
public Coordinate(int initX, int initY) {x = initX;y = initY;
}public synchronized void update(int newX,
int newY) {x = newX;y = newY;
}public synchronized void display() {System.out.println(x);System.out.println(y);
}private int x, y;
}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 8
Communication asynchrone - Exemple(1)
public class BoundedBuffer {private int buffer[];private int first;private int last;private int count = 0;private int size;
public BoundedBuffer(int length) {size = length;buffer = new int[size];last = 0;first = 0;
};
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 9
Communication asynchrone - Exemple(2)public synchronized void put(int item)
throws InterruptedException {while (count == size) wait();last = (last + 1) % size ; // % is moduluscount++;buffer[last] = item;notifyAll();
};public synchronized int get()
throws InterruptedException {while (count == 0) wait();first = (first + 1) % size ; // % is moduluscount--;notifyAll();return buffer[first];
};}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 10
Plan
1. Concepts et exemples de la concurrence Java 2. Critique du modle de la concurrence Java 3. Lapport Java 5 4. La spcification Temps rel RTSJ 5. La spcification SCJ 6. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 11
Points forts du modle de la concurrence Java
Modle simple et directement support par le langage Ceci limite potentiellement les erreurs qui surviennent
en interfaant les RTOS Le contrle du typage fort et de la syntaxe du langage
donne quelques protections Par exemple il nest pas possible doublier la fin dun
bloc synchronized La portabilit des programmes est amliore cause
du modle de la concurrence indpendamment de lOS sous-jacent
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 12
Faiblesses (1)
Mcanisme de priorit des threads insuffisant
Programmation de processus priodiques limits par labsence de mcanismes dattente sur des temps absolus
Le traitement des vnements asynchrones ncessitent un thread ddi
Transfert de contrle asynchrone : Ne pas utiliser les mthodes stop(), suspend() et resume() sous risque dinterblocage ou dincohrence
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 13
Faiblesses (2) wait/notify
Lappel de moniteurs imbriqus peut conduire des interblocages car le verrou du moniteur englobant nest pas relch quand le thread attend sur un wait du moniteur imbriqu.
Seulement une file dattente wait set par objet versus par condition associe lobjet
Origine du rveil dun thread excutant wait() : notify()/notifyAll(), interrupt() ou time-out ?
Pas de prfrence donne aux threads qui continuent aprs un notify sur ceux qui accdent au verrou du moniteur pour la premire fois
Lidiome while (!condition) {obj.wait()}est fondamental
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 14
Faiblesses (2) -synchronized
Il nest pas vident de dterminer quand des appels imbriqus un moniteur peuvent tre effectus : Les mthodes dans une classe ntant pas dclares synchronized peuvent nanmoins contenir des instructions synchronized;
Les mthodes dans une classe ntant pas dclares synchronized peuvent tre surcharges par une mthode synchronized;
Une mthode non synchronized peut le devenir en tant appele depuis une construction synchronized dune sous-classe
Les mthodes appeles via les interfaces ne peuvent pas tre synchronized
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 15
Faiblesses (3) synchronized
Impossible de faire machine arrire dans une tentative de prise de verrou, dabandonner aprs un dlai ou une interruption
Impossible de personnaliser la smantique du verrou en ce qui concerne la r-entrance, lquit ou les accs en lecture versus criture.
Pas de contrle daccs pour la synchronisation. Toute mthode peut effectuer synchronized(obj) pour tout objet accessible
Impossibilit dobtenir un verrou dans une mthode et de le relcher dans une autre (structure en bloc)
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 16
Plan
1. Concepts et exemples de la concurrence Java 2. Critique du modle de la concurrence Java 3. Lapport Java 5 4. La spcification Temps rel RTSJ 5. La spcification SCJ 6. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 17
Modle Mmoire Java (1)
Le modle mmoire java (JMM) comprend: Une mmoire principale partages entre tous les threads Une mmoire locale propre chaque thread similaire un cache
Le modle dfinit les conditions ncessaires et suffisantes qui permettent de savoir que les critures mmoire des autres threads sont visibles par le thread courant et inversement que les critures par le thread courant sont visibles par les autres threads.
Les r-ordonnancements des instructions par les compilateurs ou processeurs sont le souci principal
http://www.cs.umd.edu/users/pugh/java/memoryModel
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 18
Modle Mmoire Java (2)
Java 1.5 a rvis la smantique des mots cl final, volatile et synchronized pour assurer quun programme correctement synchronis sexcute correctement sur tout type darchitecture matrielle
La synchronisation reprsente plus quune simple exclusion mutuelle : En sortie dun bloc synchronized le cache du thread courant
est sauv dans la mmoire partage A lentre dun bloc synchronized les variables locales du
thread courant sont recharges depuis la mmoire partage
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 19
class VolatileExample {int x= 0;volatile boolean v = false;public void writer() {
x=42;v= true;
}public void reader() {
if (v == true) {// si on utilise x on a la garantie de voir 42{
{}
Ce qui est visible par le thread A quand il crit le champ volatile le devient par le thread B quand il lit ce mme champ !
Exemple avec volatile
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 20
Mcanisme tendu de verrou
package java.util.concurrent.locks;public interface Lock {
public void lock(); // Attendre dobtenir le verrou.
public Condition newCondition();// Crer une variable de condition// utiliser avec le verrou.
public void unlock();
}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 21
Les variables de condition
package java.util.concurrent.locks;public interface Condition {
public void await() throws InterruptedException;
// Relche atomiquement le verrou associ// et met le thread courant en attente.
public void signal();// Rveil un thread en attente du verrou.public void signalAll();// Rveil tous les threads en attente// du verrou.
}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 22
Utilitaires de gestion de la concurrence (1)
Le paquetage java.util.concurrent fournit un ensemble trs riche et complet de classes et interfaces pour le dveloppement dapplications concurrentes
Locks (Lock, ReadWriteLock et Condition) time-out possible, interrupt possible, conditions multiples par verrou, pas la structure en rgion, personalit de laccs au verrou (read/write), quit possible dans le mcanisme dattente, respecte le modle mmoire Java
Atomicit java.util.concurrent.atomic
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 23
Utilitaires de gestion de la concurrence (2)
Thread-safe collections Interfaces Queue et BlockingQueue
Task Scheduling Framework Squencer et contrler des tches asynchrones Soumission dans un thread ou un pool de thread Interfaces Callable, Future et Executor
Synchronizers Semaphore et Mutex CyclicBarrier CountDownLatch (compte rebours) Exchanger (rendezvous)
Rsolution du temps la nanoseconde pour toutes les mthodes avec timeout
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 24
Classe LockSupport
La classe LockSupport fournit les mcanismes de base pour le support des verrous :package java.util.concurrent.locks;public class LockSupport {
public static void park()public static void parkNanos(long nanos)public static void parkUntil(long deadline)public static void unpark(Thread thread)
} Semblable au smaphore binaire Utiliser park/unpark au lieu des mthodes
dconseilles Thread.suspend et Thread.resume Briques de base pour les implementeurs qui souhaitent
dvelopper leurs propres classes Locks.
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 25
Etat des threads Java
start
create thread object
run method exits
garbage collectedand finalization
synchronizedblock/method
(thread termination)
destroywait
parkjoin
notifynotifyAll
unpark interrupt
sleepjoin
waitparkUntilparkNanos
notifynotifyAllunpark
interrupt
Non-Existing
New
Runnable
Blocked
Waiting
Timed_WaitingTerminated
Non-Existing
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 26
Plan
1. Concepts et exemples de la concurrence Java 2. Critique du modle de la concurrence Java 3. Lapport Java 5 4. La spcification Temps rel RTSJ 5. La spcification SCJ 6. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 27
RTSJ principes directeurs
Compatibilit arrire avec les programmes java non temps rel
Support du principe Write Once, Run Anywhere mais pas au dtriment du dterminisme
Supporter ltat de lart actuel tout en tant ouvert des volutions
Donner la priorit au dterminisme dans la conception Pas dextension syntaxique du langage Donner des degrs de libert aux implmentations
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 28
Amliorations temps rel
RTSJ amliore la programmation temps rel Java dans les domaines suivants : Gestion mmoire Horloge et gestion du temps
Ordonnancement et objets schedulable
Threads temps rel
Gestion des vnemenst asynchrones et timers
Trasnfert de contrle asynchrone
Synchronisation et partage de ressource
Accs la mmoire physique
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 29
Modle mmoire RTSJ
HeapMemory : cest le tas mmoire Java classique.
ImmortalMemory : cest une zone mmoire partage entre toutes les threads. Les objets allous dans cette zone ne sont jamais collects par le Garbage Collector et ne sont librs que lorsque le programme se termine.
ScopedMemory : cest une zone pour les objets qui ont une dure de vie bien dfinie. Un compteur de rfrences associ chaque ScopedMemory permet de conserver la trace de combien dentits temps rel sont un moment donn en train dutiliser cette rgion mmoire.
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 30
ScopedMemory - exemple
import javax.realtime.*; public class Region {
LTMemory locale; class Action implements Runnable {
public void run() {// Tous les objets allous dans cette// mthode run() ont la porte de// lexcution de cette mthode : ils// seront librs en sortant de la mthode. ... }
}static public void main(String [] args){
locale = new LTMemory(8*1024, 8*1024); Action action = new Action(); // Pendant lexcution de la mthode run()// associe largument action les objets// seront allous dans la rgion locale.locale.enter(action);
}}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 31
Gestion du temps
La classe abstraite HighResolutionTime dfinit le temps avec une prcision de la nanoseconde
Les classes AbsoluteTime, RelativeTime et RationalTime permettent de manipuler des temps absolus (dates) ou des intervalles de temps (dures)
Ces temps sont relatifs des horloges. Plusieurs types dhorloge sont possibles au sein dun mme programme
RTSJ fournit toujours une horloge temps rel associ un temps croissance monotone
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 32
Objets Schedulable
RTSJ gnralise les entits schedulable du thread jusqu la notion dobjets Schedulable
Un objet Schedulable implmente linterface Schedulable
Chaque objet Schedulable indique ses exigences: Dchance (quand il doit tre lligible), Mmoire (ex: taux dallocation sur la heap), Ordonnancement (priorit)
Linterface Schedulable est implmente par les classes: RealTimeThread et NoHeapRealTimeThread qui
tendent la classe Thread pour le temps rel AsyncEventHandler pour le traitement dvnements
asynchrones (handlers dinterruptions par exemple)
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 33
Thread priodiques
public class Periodic extends RealtimeThread{public Periodic(
PriorityParameters PP, PeriodicParameters P) { super(pp, p); };
public void run(){boolean noProblems = true;while(noProblems) {
// Code excuter chaque priode...noProblems = waitForNextPeriod();
}// Echance manque...
}}
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 34
Priority Inversion control in RTSJ
Linversion de priorit peut survenir quand un objet schedulable est bloqu en attente de ressource
Pour limiter la dure du temps de blocage RTSJ impose que : Toutes les files dattente du systme soient gres par ordre de
priorit FIFO pour les objets schedulable de mme priorit dans la mme
file De mme les files associes lappel de la mthode wait() de la
classe Object doivent tre aussi ordonnes par priorit Par dfaut le protocole dhritage de priorit est appliqu aux
objets schedulable bloqus en attente de ressource Le protocole dhritage priorit plafond (PCP) peut tre associ
une ressource de faon programmatique
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 35
Plan
1. Concepts et exemples de la concurrence Java 2. Critique du modle de la concurrence Java 3. Lapport Java 5 4. La spcification Temps rel RTSJ 5. La spcification SCJ 6. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 36
Systmes critiques - Modes dexcution
Initialisation
Mission
Terminaison
Mise sous tensionDmarrage
RcuprationRedmarrage
Mode Oprationnel
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 37
Modle de concurrence SCJ
Lordonnancement est premptif par priorit fixe, Seuls les objets Schedulable globaux sont
supports, ReleaseParameter soit priodiques soit
sporadiques, Chaque traitement dvnement asynchrone
sexcute dans un thread ddi, Les dpassements dchance sont dtects, Le partage de ressource se fait laide de
mthodes synchronized (non blocantes), Linversion de priorit est contrle par le PCP
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 38
Plan
1. Concepts de la concurrence Java 2. Exemples illustrant le modle de la concurrence Java 3. Critique du modle de la concurrence Java 4. Lapport Java 5 : le JSR 133 5. Lapport Java 5 : le JSR 166 6. La spcification Temps rel RTSJ 7. La spcification SCJ 8. Conclusion
-
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 39
Conclusion
Java 1.5 augmente significativement les capacits de la programmation concurrente,
Le RTSJ version 1.0.1 est stable,
Le SCJ a t soumis comme JSR The Open Group est le chef de file
Discussions en cours sur le type dannotations pour lanalyse temps rel et le modle mmoire (rgions imbriques)
Une voie intressante : les systmes temps rel architecture neutre