Java Temps Réel
RTSJ
Spécifications
Informations :
- Site internet : http://www.rtsj.org
- Version : 1.1 (2005)
- Version : 2.0 (à venir)
Compatibilité :
- Basé sur Java SE
- Pas de restriction à une version de Java
- Les applications java « classiques » fonctionnent sur une JVM RTSJ
- Pas d’extension syntaxique
- Pas de prérequis sur le matériel
Apport de Java RTS :
- Un nouveau « package » : javax.realtime
- 3 interfaces
- 47 classes
- 13 exceptions
- 4 erreurs
Threads
Deux nouvelles classes de threads :
- Realtime
- NoHeapRealtime
- Ne peut accéder au TAS (Heap)
- Ne peut donc pas être préempté par le GC (en théorie)
Attention, il faut éviter qu'un NoHeapRealtimeThread puisse être bloqué par un autre thread qui peut être bloqué par le ramasse-miettes.
Ordonnancement
- Un seul ordonnancement est obligatoirement :
- Préemptif
- 28 niveaux de priorités fixes
- Gestion FIFO à l’intérieur une même priorité
- Pas de changement de priorité
- RTSJ fournit de quoi construire des ordonnanceurs RMS, EDF.
- La faisabilité de l'ordonnancement est calculable
- Un Objet Schedulable peut-être ordonnancé
Gestion de la mémoire
- Problème du ramasse-miettes traditionnel :
- Le GC peut être exécuté n’importe quand
- Le GC peut durer un « certain » temps
- Le GC ne peut pas être préempté
- Le GC préempte n’importe quel thread
- Solutions :
- Avoir un ramasse-miette temps-réel
- Utiliser des mémoires de portée (solution RTSJ)
Exemples comparatifs d’allocation :
-
malloc / free
- new / Garbage Collector
- ScopedMemory (RTSJ)
Tableau récapitulatif des objets accessible depuis un type de mémoire :