Vous êtes sur la page 1sur 20

Système Temps Réel 2020/2021

Systèmes d'exploitation temps réel

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…).

Fonctions principales d’un système d'exploitation

Un système informatique moderne comprend un ou plusieurs processeurs, de la mémoire


principale, des disques, un clavier, un écran, des interfaces réseau et autre périphériques d’E/S.
Ecrire un programme qui prennent en compte tous ces composants et les utilisent correctement,
est une tache extrêmement difficile. Pour cette raison, les ordinateurs sont équipés d’une couche
logicielle appelée système d’exploitation (SE) dont le rôle est de gérer tous les périphériques
et de fournir aux programmes utilisateur une interface simplifiée avec le hardware. La place
du système d’exploitation (SE) au sein d’un ordinateur et illustrée a la figure 1.

Figure 1. La place du système d’exploitation (SE) au sein d’un ordinateur.

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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 :

▪ Le noyau (en anglais kernel) représentant les fonctions fondamentales du système


d'exploitation telles que la gestion de la mémoire, des processus, des fichiers, des
entrées-sorties principales, et des fonctionnalités de communication. Le noyau d'un
système d'exploitation fonctionne toujours en mode système (en anglais system mode)
dit aussi mode superviseur ou mode noyau, tandis que les autres parties et toutes les
applications fonctionnent en mode utilisateur.
▪ L'interface programme utilisateur (en anglais shell ou GUI) et le logiciel de plus bas
niveau du mode utilisateur, il permet la communication avec le système d'exploitation
par l'intermédiaire d'un langage de commandes, afin de permettre à l'utilisateur de
piloter les périphériques en ignorant tous des caractéristiques du matériel qu'il utilise,
de la gestion des adresses physiques, etc.
▪ Le système de fichiers (en anglais « file system », noté FS), permettant d'enregistrer les
fichiers dans une arborescence.
Les rôles du système d'exploitation

Les rôles du système d’exploitation sont divers :

Gestion des processus

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.

Figure 2. (a) Processus à un seul thread ; (b) Processus à multi thread.

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.

Gestion de la mémoire vive

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.

Gestion des interruptions

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

Le comportement concurrent des événements et grandeurs physiques externes amène à décrire


l’environnement comme un système fortement parallèle. Le multitâche fait référence à la
capacité d'un système d'exploitation qui prend en charge plusieurs programmes indépendants
fonctionnant sur le même ordinateur. Il est principalement réalisé par le biais du partage du
temps, ce qui signifie que chaque programme utilise une partie du temps de l'ordinateur pour
s'exécuter. La manière de partager le temps des processeurs entre plusieurs tâches est assurée
par les ordonnanceurs (en anglais Schedulers), qui suivent des algorithmes d'ordonnancement
pour décider quand exécuter telle ou telle tâche sur tel ou tel processeur.
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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.

Le processus de stockage et de restauration du contexte d'une tâche lors d'un changement de


tâche est appelé changement de contexte, qui est illustré à la figure 3.

Figure 3. Changement de contexte entre les tâches A et B.

L'optimisation du changement de contexte est l'une des tâches de la conception du système


d'exploitation. C'est notamment le cas pour la conception des RTOS.

Système de gestion de fichiers

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).

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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.

Figure 4. Le système de stockage des fichiers par blocs.

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 système de fichiers fournit également un ensemble de commandes pour lire et écrire le


contenu d'un fichier, pour définir la position de lecture/écriture du fichier, pour définir et utiliser
la protection pour changer de propriétaire, pour lister les fichiers dans un répertoire et pour
supprimer un fichier.
Université Mohamed El Bachir El Ibrahimi Département d’Electronique
Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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.

Gestion des E/S

Les ordinateurs modernes interagissent avec différents dispositifs d'entrée/sortie. Claviers,


souris, imprimantes, lecteurs de disque, lecteurs USB, moniteurs, adaptateurs de réseau, et les
systèmes audio sont parmi les plus courants. L'un des objectifs d'un système d'exploitation est
de cacher les particularités du matériel d'entrée/sortie à l'utilisateur.

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.

La plupart des systèmes utilisent des contrôleurs de périphériques. Un contrôleur de


périphérique est principalement une interface. Le système d'exploitation communique avec le
périphérique d'entrée/sortie par l'intermédiaire du contrôleur de périphérique. Presque tous les
contrôleurs de périphériques ont la possibilité d'accès direct à la mémoire (en anglais Direct
Memory Access DMA), ce qui signifie qu'ils peuvent accéder directement à la mémoire du
système, sans l'intervention du processeur. Cela libère le processeur du fardeau du transfert de
données depuis et vers les dispositifs d'entrée/sortie. Sans DMA, lorsque la CPU utilise une
entrée / sortie programmée, elle est généralement entièrement occupée pendant toute la durée
de l'opération de lecture ou d'écriture, et n'est donc pas disponible pour effectuer d'autres
travaux. Avec DMA, le CPU lance d'abord le transfert, puis il effectue d'autres opérations
pendant que le transfert est en cours, et il reçoit finalement une interruption du contrôleur DMA
(DMAC) lorsque l'opération est terminée. Cette fonction est utile à tout moment lorsque le
processeur ne peut pas suivre le taux de transfert de données, ou lorsque le processeur doit
effectuer un travail en attendant un transfert de données d'E / S relativement lent. De nombreux

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

systèmes matériels utilisent DMA, y compris lecteur de disque contrôleurs, cartes graphiques,
cartes réseau et les cartes son3.

Caractéristiques des noyaux RTOS

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.

La conception d'un RTOS doit répondre à trois exigences essentielles :

Premièrement, le comportement temporel du système d'exploitation doit être prévisible. Pour


tous les services fournis par l'OS, la borne supérieure du temps d'exécution doit être connue.
Certains de ces services comprennent les appels au SE et la gestion des interruptions.

Deuxièmement, le système d'exploitation doit être capable de faire la gestion du temps et


l’ordonnancement. En effet l’ordonnancement va déterminer les caractéristiques temporelles et
être le garant du respect des contraintes de temps imposées à l’exécution de l’application.

Troisièmement, le système d'exploitation doit être rapide. Par exemple, le temps de


changement de contexte doit être court.

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

Figure 5. Une vue globale du RTOS.

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…) ;

2. ordonnancement des tâches (orchestration du fonctionnement normal, surveillance,


changements de mode, traitement des surcharges…) ;

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

étape du processus d’amorçage), un système d’exploitation et les pilotes compatibles pour ce


système d’exploitation spécifique4.

Figure 6. Structure d'un micro-noyau.

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.

En effet, typiquement, l’horloge est programmée de sorte à déclencher une interruption


périodiquement. Cette interruption, traitée comme toutes les autres, voit son traitement aboutir
à l’exécution de l’ordonnanceur, qui évalue les priorités des tâches et appelle le dispatcher.
Celui-ci rétablit alors le contexte de la tâche la plus prioritaire. Un exécutif temps réel gère

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 périodiquement une interruption, typiquement, ce type de programmation est


utilisé par l’exécutif pour déclencher périodiquement l’ordonnanceur. Plusieurs exécutifs
qualifient la période ainsi utilisée de tick : le noyau prend la main à chaque tick ;

– 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

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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.

Figure 7. Ordonnancement des priorités.

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.

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

Communication entre les tâches et partage de ressources

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.

Signaux temps réel

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

ressources disponibles. Un sémaphore binaire fonctionne de manière similaire à un mutex, qui


est utilisé dans le cas où une ressource ne peut être utilisée que par une seule tâche au maximum
à chaque instant.

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.

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

Figure 8. Mémoire partagée et section critique.

E/S asynchrones et asynchrones

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).

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

La figure 9 illustre l'idée d'E/S synchrones et d'E/S asynchrones.

Figure 9. d'E/S synchrones et d'E/S asynchrones.

Bloquer une plage en mémoire

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.

Exemples de systèmes d'exploitation temps réel

LynxOS RTOS

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

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".

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia
Système Temps Réel 2020/2021

Références

Prof. Yann Thoma, INTRODUCTION À LA PROGRAMMATION TEMPS RÉEL,2010.

COTTET, Francis et GROLLEAU, Emmanuel. Systèmes temps réel de contrôle-commande:


conception et implémentation. Dunod, 2005.

LI, Qing et YAO, Caroline. Real-time concepts for embedded systems. CRC Press, 2003.

WANG, Jiacun. Real-time embedded systems. John Wiley & Sons, 2017.

Université Mohamed El Bachir El Ibrahimi Département d’Electronique


Dr. SID AHMED Soumia

Vous aimerez peut-être aussi