Proposition pour la CFSE - JXOS

publicité
JXOS/RTSJ
Thierry Baldo
06/12/2004
Résumé
raliste".
Une application est composée de plusieurs domaines. Chaque domaine peut être vu comme
une JVM (Java Virtual Machine) indépendante.
Les domaines sont donc isolés les uns des
autres, mais ils peuvent communiquer entre eux
via des portails (Portals). Le mécanisme de portail est comparable au mécanisme de RMI (Remote Method Invocation). Un domaine particulier, le domaine zéro (DomainZero), est le seul
domaine qui propose des portails en C ; tous
les autres domaines sont exclusivement écrits en
Java.
Lors de la création de l’exécutif JXOS, une
compilation native est effectuée vers x86 (ou
ARM4). La chaîne de compilation est :
– compilation du noyau (C et assembleur)
– compilation des composants Java (vers du
Bytecode)
– compilation native du Bytecode
Le résultat de la chaîne de compilation est
alors copiable sur disquette, sur disque dur. Le
code peut être téléchargé via TFTP (Trivial File
Transfer Protocol). Un moniteur de débogage
est disponible via une ligne série.
Ce document présente l’implémentation des spécifications RTSJ (R EAL T IME S PECIFICATION FOR JAVA) sur
le système d’exploitation JXOS.
Après une rapide introduction, un chapitre présente
JXOS, un second présente les alternatives actuelles de
RTSJ, un troisième décrit l’implémentation de RTSJ.
1
Introduction
Dans le cadre d’une unité de valeur au CNAM
(C ONSERVATOIRE NATIONAL DES A RTS ET
M ÉTIERS), j’ai été amené à effectuer un début
d’implémentation de RTSJ (R EAL -T IME S PE CIFICATION FOR JAVA ) sur un noyau en Java,
JXOS.
2
2.1
JXOS
Présentation
JXOS est un système d’exploitation en Java,
distribué sous GPL (Gnu Public Licence). Il est
composé d’un noyau (core) écrit en C et en assembleur (x86) qui gère les opérations de basniveau (commutation de tâches, interruptions,
etc.) et de composants (components) écrits en
2.2 Comparaison avec un Système d’exploiJava. L’environnement de développement est Litation classique
nux.
Dans JXOS il n’y a pas de passage du mode
JXOS a été créé dans l’optique "exécutif d’exploitation" et non "système d’exploitation géné- utilisateur au mode privilégié. Tout le code
1
– elle ne semble pas très maintenue
– elle existe uniquement pour Linux/x86
– elle compile le Bytecode en code natif
s’exécute en mode privilégié. Ce mode de fonctionnement s’appuie sur la vérification et la robustesse du Bytecode. Un composant Java ne
peut pas effectuer d’opérations privilégiées sans
passer par le noyau. C’est celui-ci qui effectue les opérations privilégiées. Ce modèle ne
s’eloigne finalement pas tant que cela du modèle
traditionnel : mode utilisateur / mode privilégié.
JXOS utilise un adressage "à plat" (Flat Memory) et non segmenté. Chaque programme
peut, théoriquement, accéder à n’importe quelle
partie de la mémoire. Ce modèle repose aussi
sur la vérification du Bytecode.
JXOS ne gère pas le swapping : tout le code
doit être logeable dans la RAM. JXOS peut
donc tourner sans problème sur un système sans
disque.
Les choix précédents impliquent une plus
grande simplicité et une plus grande rapidité
d’exécution dans les parties bas-niveau du système d’exploitation.
Ainsi JXOS pourrait tourner de manière sécurisée sur des processeurs sans MMU (Memory
Management Unit) ou sans niveau de privilège.
3
Implémentations
RTSJ
existentes
x86
– JavamaicaVM a été créée par la société Ai-
cas
– elle existe pour VxWorks, QNX, Linux,
etc.
– elle tourne sur plusieurs architectures :
x86, ARM, PPC, etc.
– elle semble aboutie et optimisée
Plusieurs autres implémentations existent mais
aucune n’est basée sur un noyau en Java, comme
le but de ce projet.
4
4.1
Implémentation de RTSJ sur
JXOS
Présentation de RTSJ
Une présentation de RTSJ par le même auteur
de ce document est disponible à l’URL suivante
http://jxos.free.fr/JavaTempsReel.pdf.
Après une présentation de l’architecture,
quelques points de l’implémentation seront déde crits.
4.2 Architecture de l’implémentation
Diverses implémentations de RTSJ existent :
L’architecture globale est présentée dans le
– l’implémentation de référence (RI - R EFE RENCE I MPLEMENTATION ) par la société schéma suivant :
TimeSys :
– elle existe uniquement pour Linux/x86
– elle n’est pas optimisée mais elle est complète
– elle n’est pas prévue pour le Temps-Réel
dur
L’implémentation consiste en deux parties :
– jRate est une implémentation libre basée sur
GCC (Gnu Compiler Collection)
– modification du noyau (C / assembleur)
2
– ajout de composants Java (packages ja- 4.6
L’ordonnancement
vax.realtime et jx.realtime)
Les algorithmes d’ordonnancement (à prioriL’idée principale de ce projet est de ne modifer tés fixe, Rate Monotonic, etc.) sont écrits en
que le minimum dans le noyau et ainsi d’avoir Java et sont appelés depuis le noyau via un méle maximum de code dans la partie Java.
canisme de callback. Différents ordonnanceurs
peuvent être configurés et utilisés de manière
hierarchique. Ceci offre une grande souplesse
4.3 Gestion du temps
dans la configuration du système.
Sur PC, le circuit qui gère les interruptions
temporelles et le PIT 8254. Afin d’avoir une 5 Résultats
très grande granularité et une grande souplesse,
celui-ci est programmé en mode oneshot : à
Même si le projet n’en est encore qu’au stade
chaque interruption de l’IRQ 0 (Timer), la pro- de prototype, il est néanmoins utilisable et offre
chaine échéance est calculée et le PIT est re- déjà de bons résultats :
programmée avec la valeur estimée. L’unité de
– réveil d’un thread et commutation de
stockage des échéances et des périodes des ticontexte en 4 microsecondes
mers est le celle du TSC (Time Stamp Coun– 200 ns de déviation moyenne pour un syster) et correspond à l’horloge du système. En
tème périodique
prenant cette horloge système comme référence
temporelle on obtient très peu de déviation dans
6 Liens
le temps ; chaque déviation est corrigée à l’itération suivante.
Real-Time Java Platform Programming (Peter
C. Dibble), Prentice Hall
http://jxos.free.fr : le site de l’auteur de
4.4 Les événements asynchrones
ce document où une version de l’implémentaLes événements asynchrones (AsyncEvent) et tion de RTSJ sur JXOS est disponible
http://www.jxos.org : le site original de
les handlers (AsyncEventHandler, BoundAsynJXOS
cEventHandler) sont implémentées exclusivehttp://www.rtsj.org et http://www.
ment en Java, ainsi que les temporisateurs (Onertj.com
: les sites officiels de RTSJ
ShotTimer et PeriodicTimer).
http://www.timesys.com : l’implémentation de référence (RI)
http://www.aicas.com : implémentation
4.5 La mémoire à portée (Scoped Memory)
JamaicaVM
La mémoire à portée (Scoped Memory) a été
http://www.cs.wustl.edu/~corsaro/
implémentée dans la partie C (noyau). Divers al- jRate : implémentation GPL
gorithmes sont potentiellement utilisables. Actuellement seul le type LTMemory (Linear Time
Memory) est implémenté.
3
Téléchargement