# RTX

RTX est une extension temps réel qui transforme Windows en RTOS, développée par IntervalZero.

## Présentation

RTX64 et RTX sont des extensions logicielles temps-réelles à Windows qui permettent à l’utilisateur de bénéficier de toutes les fonctionnalités offertes par Windows (Expérience utilisateur, développement d’interfaces graphiques, connectivité avec le réseau de l’entreprise, base de logiciels existants, etc.) tout en garantissant le déterminisme (assuré par la partie RTX).
RTX64 supporte les systèmes d’exploitation 64-bit et RTX supporte les systèmes d’exploitation 32-bit.
Actuellement en version RTX2016 pour la version 32-bit et RTX64 4.x pour la version 64-bit, le logiciel a suivi l'évolution de l'architecture NT depuis les débuts de NT 3.5
RTX est notamment utilisé dans les domaines de l'automation, des bancs de tests et de la simulation, du Digital Audio, de l'aéronautique, de la mesure de précision, des scanners médicaux, de la production et de la distribution d'électricité, des jeux-vidéo....

## Fonctionnement

RTX64/RTX fonctionne en mode noyau (Ring-0), mais en parallèle du noyau NT. De cette manière, RTX64/RTX n'est pas une encapsulation de Windows, ni un produit dérivé, ni une modification à appliquer. Il n'interfère pas avec le système de base. C'est comme si le système embarqué avait deux centres de décision bien distincts, l'un étant appelé par les APIs standard de Microsoft, l'autre par des fonctions RTX64/RTX spécialement conçues (préfixe "Rt"). La différence étant simplement le comportement déterministe apporté par RTX64/RTX. Un noyau peut planter sans entraîner l'autre dans sa chute.
Ces dispositions parallélisées au noyau NT forment un RTSS : RealTime Sub-System.
L'architecture RTX64/RTX est basée sur les APIs Win32. Les applications temps réelles peuvent être lancées au niveau Ring-3 (mode utilisateur) comme une application normale, moyennant l'appel aux APIs de RTX64/RTX. Elles peuvent également être compilées pour ne fonctionner que sous RTSS en mode noyau (Ring-0). Cette dernière solution est prioritaire sur le noyau NT.

## Détails techniques

* Extension de la HAL (Couche d’abstraction matérielle)
RTX64/RTX s’appuie sur une extension de la HAL de Windows. Celle-ci permet de démarrer et d’initialiser les processeurs dédiés à RTX64/RTX et fourni les timers haute résolution (jusqu’à 1 microseconde) au sous système RTX64/RTX (real-time subsystem : RTSS). Elle fournit également un mécanisme d’isolation des interruptions. Fonctionnalités principales :
* SMP
Tout comme Windows, RTX64 et RTX sont basés sur une architecture SMP (architecture multiprocesseur symétrique). Selon son besoin, l’utilisateur choisit le nombre de processeurs qu’il veut dédier à RTX pour y exécuter ses applications temps-réel (jusqu’à 63 processeurs dédiés à RTX64, et jusqu’à 31 processeurs dédiés à RTX).
L’utilisateur va ensuite répartir ses applications temps réel entre les processeurs dédiés à RTX64/RTX en paramétrant les affinités processeur aux niveaux des threads et des interruptions.
* Gestion des interruptions
RTX64/RTX supporte la gestion des interruptions matérielles par IRQ (line-based) ou par MSI/MSI-X (message signaled interrupt). Les latences d’IST (Interrupt Service Thread) sont inférieures à 10 microsecondes.
* Gestion de la mémoire
Le pool de mémoire déterministe alloué à RTX64/RTX est pris dans la mémoire non-paginée du système. Par exemple, sur Windows 7 la mémoire non-paginée est :
** 32-bit : 1Go à 2Go suivant la configuration
** 64-bit : 75 % de la RAM jusqu’à un maximum de 128Go
* Ordonnancement
Un seul ordonnanceur adresse tous les processeurs temps-réel (architecture SMP). Pour assurer les changements de contextes critiques, l’ordonnanceur utilise des algorithmes préemptifs et à priorité fixe (128 niveaux de priorité) avec des mécanismes de promotion de priorité destinés à éviter le phénomène d’inversion de priorité.
Une transition vers un thread de plus haute priorité s’effectue en un temps inférieur à la microseconde.
* Interaction avec Windows
Séparation d’avec Windows – les processus Windows ne peuvent pas perturber les applications temps-réelles et celles-ci ont la possibilité de continuer à s’exécuter si Windows rencontre un message STOP ou s’arrête.
Communication avec Windows – RTX64/RTX met à disposition des mécanismes de communication inter-processus (IPC) entre les processus temps réels et les processus Windows (processus utilisateurs ou pilotes noyau Windows). La synchronisation se fait via des events, des mutexes, et des sémaphores ; l’échange de données via une mémoire partagée ou une communication socket.
* Développement d’applications RTX
Le développement d’application RTX64/RTX se fait depuis Microsoft Visual Studio en C/C++ avec des APIs dont la syntaxe est similaire à celle de Windows. Les exécutables sous RTX64/RTX sont des « .rtss » et les DLLs des « .rtdll ».
* Communication réseau
La stack réseau temps-réelle RT-TCP/IP supporte TCP/UDP/IP pour IPv4 et IPv6 ; les pilotes RTX64/RTX pour les cartes réseau standard du marché sont fournis avec la stack. (La stack est incluse dans RTX et achetable séparément pour RTX64).