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