Vous êtes sur la page 1sur 39

Etat de lart de Java temps rel

Ecole dt Temps Rel Nancy 2005


Marc richard-Foy

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 1

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 2

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 3

Concepts de la concurrence Java (2)


Un moniteur peut tre considr comme un objet
o chacune de ses oprations sexcute en
exclusion mutuelle
Verrou

Interface procdurale

Etat encapsul

Les variables de conditions expriment une


contrainte sur lordre dexcution des oprations

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 4

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<count; j++){
System.out.println(j);
}
}
public static void main( String[] args ){
MyApp ma =
new MyApp( Integer.parseInt(args[0]) );
ma.start();
System.out.println("Finished with main");
}
}
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 5

Les threads exemple (2)


Thread dans la JVM
Invoke MyApp.main

MyApp ma = new MyApp(...);

Thread dans lapplication


ma.start();

Implicite

System.out.println("...");

ma.run();

System.out.println(j);

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 6

Exclusion mutuelle - exemple


public 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 7

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 8

Communication asynchrone - Exemple(2)


public synchronized void put(int item)
throws InterruptedException {
while (count == size) wait();
last = (last + 1) % size ; // % is modulus
count++;
buffer[last] = item;
notifyAll();
};
public synchronized int get()
throws InterruptedException {
while (count == 0) wait();
first = (first + 1) % size ; // % is modulus
count--;
notifyAll();
return buffer[first];
};
}
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 9

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 10

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 11

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 12

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 13

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 sousclasse
Les mthodes appeles via les interfaces ne peuvent pas tre
synchronized

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 14

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 15

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 16

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 17

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 18

Exemple avec volatile


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 !
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 19

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 20

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 21

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 22

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 23

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 24

Etat des threads Java


Non-Existing
create thread object
New
start
synchronized
block/method
Blocked

Runnable
notify sleep
run method
wait notifyAll join notify
exits
park unpark
wait notifyAll
join interrupt
parkUntil unpark
parkNanos interrupt
Waiting
Timed_Waiting
Non-Existing

destroy

Terminated

garbage collected
and finalization (thread termination)
Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 25

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 26

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 27

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 28

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 29

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 30

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 31

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 32

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 33

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 34

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 35

Systmes critiques - Modes dexcution

Initialisation

Mise sous tension


Dmarrage

Mission

Mode Oprationnel

Terminaison

Rcupration
Redmarrage

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 36

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 37

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 38

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

Le langage Java - Copyright 2004 - AONIX. Tous droits rservs. Page 39