Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Un système d'exploitation temps réel (en anglais RTOS pour Real-Time Operating System)
dans lequel l’exactitude des applications ne dépend pas seulement du résultat mais aussi du
temps auquel ce résultat est produit. Si les contraintes temporelles de l’application ne sont pas
respectées, on parle de défaillance du système ». Ces contraintes temporelles peuvent être de
deux types :
▪ Contraintes temporelles relatives ou lâches (temps réel mou : soft real-time) : les fautes
temporelles sont tolérables (ex. : jeux vidéo, applications multimédia, téléphonie
mobile…) ;
▪ Contraintes temporelles strictes ou dures (temps réel dur : hard real-time) : les fautes
temporelles ne sont pas tolérables (ex. : avionique, véhicules spatiaux, automobile,
transport ferroviaire…).
Le système d'exploitation est composé d'un ensemble de logiciels permettant de gérer les
interactions avec le matériel. Parmi cet ensemble de logiciels on distingue généralement les
éléments suivants :
Un processus peut être défini comme étant une instance de programme qui est en train d’être
exécutée sur un ou plusieurs processeurs sous le contrôle d’un système d’exploitation1. Un
processus comprend donc un ensemble d’instructions pour le processeur, mais aussi des
données qui sont stockées en mémoire et un contexte. Le contexte d'un processus est l'ensemble
des données qui permettent de reprendre l'exécution d'un processus qui a été interrompu.
L'exécution d’un programme d'application implique la création d'un processus par le noyau du
système d'exploitation qui alloue l'espace mémoire et d'autres ressources, établit une priorité
pour le processus dans les systèmes multitâches, charge le code binaire du programme en
mémoire et lance l'exécution du programme d'application, qui interagit ensuite avec l'utilisateur
1
https://sites.uclouvain.be/SystInfo/notes/Theorie/html/Threads/processus.html (26/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
et avec les périphériques matériels. Lorsqu'un processus est terminé, toutes les ressources
réutilisables sont libérées et renvoyées au système d'exploitation.
Un processus travaille et gère, pendant le quantum de temps qui lui est alloué, des ressources
et exécute des actions sur et avec ces ressources. Un thread ou tâche constitue la partie
exécution d'un processus alliée à un minimum de variables qui sont propres au thread. Un
processus peut comporter plusieurs threads multitâches. Les threads situés dans un même
processus partagent les mêmes variables générales de données et les autres ressources allouées
au processus englobant2. Les threads dans le même processus partagent le même espace
d'adressage, alors que les différents processus ne le partagent pas. Les threads partagent
également des variables globales et statiques, des descripteurs de fichiers, une zone de code et
un Tas (en anglais heap). Cela permet aux threads de lire et d'écrire dans les mêmes structures
de données et variables et facilite également la communication entre les threads. Ainsi, les
threads utilisent beaucoup moins de ressources que les processus. Cependant, chaque thread du
même processus a son propre statut, son compteur de programme, ses registres et sa pile (en
anglais stack), comme l'illustre la figure 2.
2
https://rmdiscala.developpez.com/cours/LesChapitres.html/Cours1/Chap1.6.htm (26/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Un thread est la plus petite unité de calcul gérée indépendamment par l’ordonnanceur (en
anglais Scheduler). Dans les RTOS, le terme "tâches" est souvent utilisé pour les threads ou les
processus à un seul thread.
Le système d'exploitation est chargé de gérer l'espace mémoire alloué à chaque application et,
le cas échéant, à chaque usager. En cas d'insuffisance de mémoire physique, le système
d'exploitation peut créer une zone mémoire sur le disque dur, appelée « mémoire virtuelle ». La
mémoire virtuelle permet de faire fonctionner des applications nécessitant plus de mémoire qu'il
n'y a de mémoire vive disponible sur le système. En contrepartie cette mémoire est beaucoup
plus lente.
Une interruption est un signal provenant d'un dispositif relié à un ordinateur ou d'un processus
en cours d'exécution dans l'ordinateur, indiquant un événement qui nécessite une réponse
immédiate. Le processeur réagit en suspendant son activité en cours, en sauvegardant son état
et en exécutant une fonction appelée gestionnaire d'interruption (interrupt handler) (également
appelée routine de service d'interruption, ISR) pour traiter l'événement.
Une table nommée vecteur d’interruption, contient l’adresse de début du traitement logiciel à
exécuter pour chaque interruption. Ce traitement logiciel est exécuté dans le contexte du noyau
(en utilisant sa pile, et en interrompant le programme en cours d’exécution) ou bien avec une
pile spécifique aux traitements d’interruptions. La table contient aussi un bit par interruption
signifiant si une interruption a eu lieu.
Multitâche
Chaque tâche a un contexte, c'est-à-dire les données indiquant son état d'exécution et stockées
dans le bloc de contrôle de la tâche (en anglais Task Control Block TCB), contenant diverses
informations pertinentes pour l'exécution de la tâche. Lorsqu'un ordonnanceur décide de sortir
une tâche du CPU, son contexte doit être stocké ; lorsque la tâche est sélectionnée pour être
exécutée à nouveau, le contexte de la tâche est restauré afin que la tâche puisse être exécutée à
partir du dernier point interrompu.
Un fichier est l’unité de stockage logique mise à la disposition des utilisateurs pour
l’enregistrement de leurs données : c’est l’unité d’allocation. Le système de gestion de fichiers
(SGF) est la partie la plus visible d’un système d’exploitation qui se charge de gérer le stockage
et la manipulation de fichiers (sur une unité de stockage : partition, disque, CD, disquette).
Un SGF a pour principal rôle de gérer les fichiers et d’offrir les primitives pour manipuler ces
fichiers. Lorsqu'un fichier est créé, le système de fichiers alloue un espace initial pour les
données. Des allocations-supplémentaires ultérieures sont effectuées lorsque la taille du fichier
augmente. Lorsqu'un fichier est supprimé ou que sa taille est réduite, l'espace ainsi libéré est
considéré comme disponible pour d'autres fichiers. Ainsi, des zones de tailles différentes sont
alternativement exploitées et non exploitées.
Lorsqu'un fichier est créé et qu'il n'y a pas de zone d'espace contiguë disponible pour son
allocation initiale, l'espace doit être alloué par fragments. Étant donné que les fichiers ont
tendance à changer de taille au fil du temps et que les utilisateurs savent rarement à l'avance
quelle sera la taille de leurs fichiers, il est logique d'adopter des systèmes d'allocation d'espace
de stockage non contiguë. La figure 4 illustre le schéma de stockage des fichiers par blocs.
L'adresse initiale de stockage d'un fichier est identifiée par son nom de fichier.
En règle générale, les fichiers d'un ordinateur sont organisés en répertoires, qui constituent un
système hiérarchique de structure arborescente. Un système de fichiers stocke généralement les
informations comptables nécessaires pour chaque dossier, y compris la taille des données
contenues dans le dossier, la date de la dernière modification du dossier, son identifiant de
propriétaire et son identifiant de groupe, ainsi que ses autorisations d'accès.
Le contrôle d'accès aux fichiers peut être réalisé à l'aide d'une matrice bidimensionnelle qui
répertorie tous les utilisateurs et tous les fichiers du système. L'entrée à l'index (𝑖, 𝑗) de la
matrice précise si l'utilisateur i est autorisé à accéder au fichier j. Dans un système qui compte
un grand nombre d'utilisateurs et qui contient un grand nombre de fichiers, cette matrice serait
très grande et très éparse.
Dans les E/S mappées en mémoire (en anglais memory-mapped I/O), chaque dispositif d'E/S
occupe certains emplacements dans l'espace d'adresse E/S. La communication entre le dispositif
d'entrée/sortie et le processeur est activée par des localisations physiques de la mémoire dans
l'espace d'adressage d'entrée/sortie. En lisant ou en écrivant à ces adresses, le processeur reçoit
des informations ou envoie des commandes aux dispositifs d'entrée/sortie.
systèmes matériels utilisent DMA, y compris lecteur de disque contrôleurs, cartes graphiques,
cartes réseau et les cartes son3.
Bien qu'un système d'exploitation généraliste fournisse un ensemble de services riches qui sont
également assurés par des systèmes temps réel, il prend un espace trop important et contient
trop de fonctions qui peuvent ne pas être nécessaires pour une application temps réel spécifique.
De plus, il n'est pas configurable, et l'incertitude temporelle inhérente n'offre aucune garantie
quant au temps de réponse du système. Par conséquent, un système d’exploitation généraliste
ne peut pas être approprié pour les systèmes embarqués temps réel.
Comme l'illustre la figure 5, un RTOS contient généralement un noyau en temps réel et d'autres
services de niveau supérieur tels que la gestion de fichiers, les piles de protocoles (Une pile de
protocoles est une mise en œuvre particulière d'un ensemble de protocoles de communication
réseau), une interface graphique utilisateur (en anglais GUI pour Graphical User Interface) et
d'autres composants. La plupart des autres services tournent autour des périphériques
d'entrée/sortie.
3
https://fr.qaz.wiki/wiki/Direct_memory_access (27/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Un noyau temps réel est un logiciel qui gère le temps et les ressources d'un microprocesseur ou
d'un microcontrôleur et fournit des services indispensables tels que l’ordonnancement des
tâches et la gestion des interruptions. Une application temps réel étant par définition un système
multitâche, le rôle essentiel du noyau temps réel est donc de gérer l’enchaînement et la
concurrence des tâches en optimisant l’occupation de l’unité centrale du système informatique.
Les principales fonctions d’un noyau temps réel peuvent être scindées en trois groupes :
1. gestion des entrées/sorties (gestion des interruptions, gestion des interfaces d’entrées/sorties,
gestion des réseaux de communications…) ;
3. relations entre les tâches (synchronisation, communication, accès à une ressource critique en
exclusion mutuelle, gestion du temps…).
La figure 6 montre la structure générale d'un micro-noyau. Dans les systèmes embarqués, Un
Board Support Package (BSP) est un ensemble de logiciels utilisés pour démarrer et faire
fonctionner le système embarqué. C’est le logiciel essentiel nécessaire pour travailler avec une
carte. Le BSP comprend des programmes d’amorçage de bas niveau (également appelés « first
stage bootloader »), un programme d’amorçage ou « bootloader » (généralement la deuxième
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Dans le reste de cette section, nous présentons certains des services temps réel les plus
importants qui sont spécifiés dans POSIX 1.b pour les noyaux RTOS.
Horloge et Timers
La plupart des systèmes embarqués doivent être capables de mesurer le temps qui s'écoule. La
longueur de la durée est représentée par le nombre de ticks système dans la plupart des noyaux
RTOS. La notion de tick permet de gérer le temps, les tâches ou processus ne peuvent être
réveillés que sur des ticks, c’est le cas par exemple des exécutifs VxWorks.
4
https://openest.io/2019/12/30/ (28/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
finement le temps, et sa résolution peut approcher la micro seconde. Il n’est pas concevable de
traiter une interruption à chaque micro seconde. La stratégie généralement utilisée consiste à
utiliser un ou plusieurs circuits programmables spécialisés dans la gestion du temps. Ces circuits
peuvent être programmés de sorte à :
– déclencher une interruption à une certaine date, ce qui permet typiquement à une tâche de se
réveiller périodiquement, avec une résolution temporelle importante ;
– déclencher une interruption au bout d’un certain temps, ce qui permet typiquement à une tâche
de s’endormir pendant un certain temps, ou bien de surveiller la durée d’un traitement par chien
de garde : le traitement est lancé parallèlement au décompte d’une horloge, ce qui permettra le
cas échéant d’effectuer une action spécifique au cas où le traitement prendrait un temps plus
élevé que prévu.
Les systèmes d’exploitation temps réel se basent donc sur les horloges pour proposer l’une des
deux méthodes suivantes de gestion du temps :
– Noyau dirigé par le temps : seule la notion de tick permet de gérer le temps, les tâches ou
processus ne peuvent être réveillés que sur des ticks, c’est le cas par exemple des exécutifs
VxWorks et RTEMS.
– Noyau dirigé par les événements : les horloges sont programmables à leur granularité la
plus fine, et il est possible de réveiller une tâche ou un processus de façon très fine, c’est le cas
par exemple des systèmes d’exploitation de type POSIX et OSEK/VDX.
Ordonnancement de processus
Les tâches temps réel ont des délais, qu'elles soient souples ou dures, toutes les tâches ne sont
pas égales en termes d'urgence d'exécution. Les tâches dont les délais sont plus courts devraient
être programmées pour être exécutées plus tôt que celles dont les délais sont plus longs. C'est
pourquoi les tâches sont généralement classées par ordre de priorité dans un RTOS. De plus, si
une tâche de priorité plus élevée est lancée alors que le processeur est en train de s'occuper
d'une tâche de priorité plus faible, le RTOS doit suspendre temporairement la tâche de priorité
plus faible et programmer immédiatement l'exécution de la tâche de priorité plus élevée sur le
processeur, afin de s'assurer que la tâche de priorité plus élevée est exécutée avant son échéance.
Ce processus est appelé préemption.
La stratégie utilisée pour choisir parmi les processus prêts le prochain processus à exécuter
s’appelle l’ordonnancement. L’ordonnancement consiste simplement à ordonner les processus
par priorité. Le dispatcher se charge de placer le contexte du processus le plus prioritaire sur le
processeur. Il existe plusieurs stratégies d’ordonnancement spécifiques pour le temps réel qui
seront abordées par la suite.
Comme le montre la figure 7, La commutation de contexte est réalisée par une routine
spécifique du système d’exploitation appelée dispatcher. Souvent, dans les microprocesseurs,
le dispatcher est implémenté de façon matérielle. Le dispatcher se charge de placer le contexte
du processus le plus prioritaire sur le processeur. Il existe plusieurs stratégies
d’ordonnancement spécifiques pour le temps réel qui seront abordées par la suite. Le dispatcher
doit être aussi rapide que possible, puisqu'il est invoqué à chaque changement de tâche. Pendant
les commutations de contexte, le processeur est pratiquement inactif pendant une fraction de
temps ; les changements de contexte inutiles doivent donc être évités.
L’ordonnancement des tâches pour les applications temps réel est généralement basée sur les
priorités et préemptive. On peut citer comme exemples l'ordonnancement selon l’algorithme «
échéance proche = préparation en premier » (en anglais Earliest Deadline First ou EDF) et
l’algorithme à priorité fixe (en anglais Rate Monotonic ou RM).
Les algorithmes de planification qui ne prennent pas en compte les priorités des tâches, tels que
Premier Entré Premier Sorti (en anglais First-In-First-Out ou FIFO) et le Round-robin, ne sont
pas appropriés pour les systèmes en temps réel.
Dans un RTOS, une tâche ne peut pas appeler une autre tâche. Au lieu de cela, les tâches
échangent des informations par le biais du passage de messages ou du partage de la mémoire et
coordonner leur exécution et l'accès aux données partagées en utilisant des signaux temps réel,
des mutex, ou les objets sémaphores.
Les signaux temps réel sont des signaux asynchrones avec données caractérisés par un numéro.
Un tel signal peut arriver à un processus suite à l’appel de la fonction kill (envoi de signal,
comme son nom ne l’indique pas), ou raise (envoi de signal à soi-même) ou bien la fin d’une
horloge (délai programmé, ou date programmée), ou bien encore événement envoyé à la suite
d’une interruption matérielle…
La spécificité des signaux temps réel par rapport aux signaux non temps réel est qu’un signal
émis est forcément reçu (grâce à un mécanisme de files de signaux), qu’ils supportent la notion
de priorité, et qu’ils fonctionnent sur un mode hiérarchisé : le traitement d’un signal asynchrone
peut être interrompu par le traitement d’un signal plus prioritaire (sauf si le signal est
explicitement masqué). De plus, il est possible d’associer une valeur à un signal temps réel.
Un processus peut masquer ou démasquer chaque signal temps réel. Typiquement, un processus
utilisant les signaux temps réel commence par masquer l’ensemble des signaux (fonction
sigemptyset), puis à définir une action pour chacun des signaux qu’il souhaite traiter (fonction
sigaction). Le traitement a lieu soit par l’appel d’une fonction exécutée dans le contexte initial
du processus (préemption du traitement en cours), soit par la création d’une tâche qui exécutera
une fonction dans son contexte propre. Il est possible d’attendre explicitement un ou plusieurs
signaux (fonction sigwait).
Les sémaphores
Les sémaphores sont des compteurs utilisés pour contrôler l'accès aux ressources partagées
entre les processus ou les threads. La valeur d'un sémaphore est le nombre d'unités de la
ressource qui sont actuellement disponibles. Il existe deux opérations de base sur les
sémaphores. La première consiste à incrémenter le compteur de façon atomique. L'autre
consiste à attendre que le compteur soit non nul et à le décrémenter atomiquement. Un
sémaphore ne suit que le nombre de ressources disponibles ; il ne suit pas quelles sont les
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Passage de messages
En plus des signaux et des sémaphores, les tâches peuvent partager des données en envoyant
des messages dans un système organisé de passage de messages. Le passage de messages est
beaucoup plus utile pour le transfert d'informations. Il peut également être utilisé uniquement
pour la synchronisation. Le passage de messages coexiste souvent avec la communication entre
mémoires partagées. Le contenu d'un message peut être tout ce qui est mutuellement
compréhensible par les deux parties en communication. Deux opérations de base sont l'envoi et
la réception.
Le passage des messages peut être direct ou indirect. Dans le cas du passage direct de
messages, chaque processus souhaitant communiquer doit explicitement nommer le destinataire
ou l'expéditeur de la communication. Dans le passage indirect des messages, les messages sont
envoyés et reçus à partir de boîtes aux lettres. Deux processus ne peuvent communiquer de cette
manière que s'ils ont une boîte aux lettres partagée.
Mémoire partagée
La mémoire partagée est une méthode qu'un RTOS utilise pour mapper l'espace physique
commun en un espace virtuel indépendant spécifique à un processus. La mémoire partagée est
généralement utilisée pour partager des informations (ressources) entre différents processus ou
threads. L'accès à la mémoire partagée doit être exclusif. Il est donc nécessaire d'utiliser des
mutex ou des sémaphores pour protéger la zone de mémoire. Le segment de code d'une tâche
qui accède aux données partagées est appelé section critique. La figure 8 montre comment deux
tâches partagent une zone de mémoire.
Un effet secondaire de l'utilisation de la mémoire partagée est qu'elle peut provoquer une
inversion de priorité, une situation dans laquelle une tâche de faible priorité est en cours
d'exécution alors qu'une tâche de haute priorité est en attente. Plus de détails sur l'inversion de
priorité seront abordés par la suite.
Il existe deux types de synchronisation des E/S : les E/S synchrones et les E/S asynchrones.
Dans le cas des E/S synchrones, lorsqu'une tâche utilisateur demande au noyau d'effectuer une
opération d'E/S et que la demande est acceptée, le système attend que l'opération soit terminée
avant de pouvoir traiter d'autres tâches. L'E/S synchrone est désirable lorsque l'opération d'E/S
est rapide. Elle est également facile à implémenter.
Les E / S asynchrones (également les E / S non séquentielles) sont une forme de traitement
d’entrée / sortie qui permet à d'autres traitements de se poursuivre avant la fin de la
transmission. En E/S asynchrone, après qu'une tâche demande une opération d'E/S, pendant que
cette tâche attend que l'E/S soit terminée, d'autres tâches qui ne dépendent pas des résultats de
l'E/S seront ordonnancées pour être exécutées. En parallèle, les tâches qui dépendent de
l'achèvement des E/S sont bloquées. Les entrées/sorties asynchrones sont utilisées pour
améliorer le débit, la latence et/ou la réactivité (throughput, latency, and/or responsiveness).
Afin d’éviter les indéterminismes liés à l’utilisation de la mémoire virtuelle, la norme POSIX.1b
définit le concept de mémoire bloquée. Il est possible, à l’aide des fonctions mlock et mlockall
de forcer toute ou partie de la mémoire d’un processus à résider en mémoire centrale. La
mémoire bloquée ne peut pas faire l’objet de swap.
LynxOS RTOS
LynxOS est un système d'exploitation temps réel, propriétaire et de style Unix de la société
LynuxWorks pour systèmes embarqués. Parfois appelé tout simplement « Lynx », LynxOS est
conforme au standard POSIX et offre une compatibilité avec Linux. LynxOS s'emploie surtout
dans des systèmes embarqués tels que les logiciels critiques dans l'aviation, le militaire, la
fabrication industrielle, et dans les communications5.
OSE
OSE est un acronyme pour Operating System Embedded (le système embarqué). Il s'agit d'un
système d'exploitation embarqué temps réel créé par une société suédoise ENEA AB active
dans le secteur des technologies de l'information (TI).
OSE utilise des événements (des signaux nommés en raison des antécédents télécoms d'ENEA)
sous la forme de messages transmis vers et depuis les processus du système. Les messages sont
stockés dans une file d'attente attachée à chaque processus. Un mécanisme de gestion de lien
permet aux signaux d'être transmis entre les processus sur des machines séparées, sur une
variété de transports. Le mécanisme de signalisation OSE a formé la base d'un projet de
conception de noyau inter-processus open source appelé LINX. La famille Enea OSE de RTOS
comprend 3 OS : OSE pour les processeurs ARM, PowerPC et MIPS, OSEck pour divers DSP
et OSE Epsilon pour les périphériques minimaux, écrits en assemblage pur.
OSE prend en charge de nombreux processeurs, principalement 32 bits comme celles des
familles ARM, PowerPC et MIPS.
QNX
5
https://fr.wikipedia.org/wiki/LynxOS (29/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Le QNX Neutrino RTOS est un système d'exploitation complet et robuste développé par QNX
Software Systems Limited, une filiale de BlackBerry. Les produits QNX sont conçus pour des
systèmes embarqués fonctionnant sur diverses plateformes, notamment ARM et x86.
En tant que système d'exploitation basé sur un micro-noyau, QNX est basé sur l'idée de faire
fonctionner presque tout le noyau du système d'exploitation sous la forme d'un certain nombre
de petites tâches, appelées serveurs. Cela diffère du fonctionnement du noyau monolithique (en
anglais monolithic kernel) classique, dans lequel le noyau du système d'exploitation est un
programme unique, très volumineux, composé d'un grand nombre de composants dotés de
fonctions spéciales. Dans le cas de QNX, l'utilisation d'un micro-noyau permet aux
développeurs pour désactiver toute fonctionnalité dont ils n'ont pas besoin devoir modifier le
système d'exploitation lui-même ; au lieu de cela, ces serveurs ne fonctionneront tout
simplement pas.
La tablette BlackBerry PlayBook conçue par BlackBerry utilise une version de QNX comme
système d'exploitation primaire. La gamme d'appareils BlackBerry fonctionnant avec l'OS
BlackBerry 10 est également basée sur QNX.
VxWorks
VxWorks est l’exécutif temps réel le plus répandu sur le marché. Dans ses versions 5.x, il
implémente une grande partie des interfaces POSIX 1003.1b et 1003.1c. VxWorks est un
système d'exploitation temps réel multitâche, généralement utilisé dans les systèmes
embarqués. Ce système d'exploitation propriétaire, développé par la firme Wind River (acquise
par Intel en 2009), est principalement employé par la recherche et l'industrie (aéronautique,
automobile, transport, télécommunication), mais également dans de nombreux systèmes de
communication d'entreprise (IP PBX Mitel ICP de Mitel Networks, Nortel Communication
Servers 10001)6.
6
https://fr.wikipedia.org/wiki/VxWorks (29/11/2020)
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021
Ce système peut gérer plusieurs cartes mères, chacune possédant à son tour des slots d'extension
afin d'y ajouter des interfaces de toutes sortes (sondes de températures, réseau, écran, cartes
d'entrées/sorties).
Les langages utilisés avec ce système d'exploitation sont le C, le C++ et l'Ada (AdaCore, qui
développe le GNAT Pro, a basé le tasking Ada sur VxWorks pour différentes cibles).
FreeRTOS
Développé en partenariat avec les principales sociétés de puces du monde sur une période de
15 ans, et désormais téléchargé toutes les 175 secondes, FreeRTOS est un système
d’exploitation embarqué multitâches temps réel préemptif supporte actuellement 35
architectures. Il est aujourd’hui parmi les plus utilisés dans le marché des systèmes
d'exploitation temps réel. FreeRTOS est construit en mettant l'accent sur la fiabilité et la facilité
d'utilisation.
FreeRTOS est un projet open source. Vous pouvez télécharger le code source, apporter des
modifications ou des améliorations. Les domaines d'applications sont assez larges, car les
principaux avantages de FreeRTOS sont l’exécution temps réel, un code source ouvert et une
taille très faible. Il est donc utilisé principalement pour les systèmes embarqués qui ont des
contraintes d'espace pour le code, mais aussi pour des systèmes de traitement vidéo et des
applications réseau qui ont des contraintes "temps réel".
Références
LI, Qing et YAO, Caroline. Real-time concepts for embedded systems. CRC Press, 2003.
WANG, Jiacun. Real-time embedded systems. John Wiley & Sons, 2017.