FR 2923039 A1 20090501 FR 0707478 A 20071024 PROCEDE DE GESTION DES PREEMPTIONS DANS UN SYSTEME D'EXPLOITATION EN TEMPS REEL. La présente invention à pour objet un procédé de gestion des préemptions entre plusieurs tâches dans un système d'exploitation en temps réel (RTOS). Il est connu en effet de préempter une tâche par une tâche plus prioritaire afin de permettre à celle-ci d'être achevée avant une échéance qui est fixée, que ce soit dans le cas d'ordonnanceurs à priorité fixes ("fixed priority scheduling" ou FPS) ou dynamiques (priorité à l'échéance la plus proche soit "earliest deadline first" ou EDF), ou bien encore latence minimale (ou "least laxity"). Cependant, la préemption des tâches et plus particulièrement le nombre de ces préemptions a des conséquences parfois importantes sur les performances. En effet, le processeur ne peut être utilisé à son maximum, car chaque préemption entraîne des modifications de l'état des mémoires cache (instructions et données), et ces modifications entraînent à leur tour une augmentation des temps d'exécution des tâches (ce qui fait que les contraintes de temps réel ne sont plus garanties) et la consommation d'énergie augmente en raison des mouvements de données entre les différents niveaux de la hiérarchie des mémoires à chaque préemption et à chaque retour de préemption. Il est donc souhaitable de diminuer le nombre des préemptions. L'article de Radu DOBRIN et Gerhard FOHLER paru dans Real Systems 2004 û Proceedings ECRT 2004 û 16th Euromicro Conference on Real Time Systems, 30 juin û 2 juillet 2004, pages 144 à 152 intitulé "Reducing the Number of Preemptions in Standard Fixed Priority Scheduling", propose un algorithme de préemption à priorités fixes (FPS) en analysant un jeu de tâches ("artifact tasks") ayant des périodes égales au plus petit commun multiple des périodes des deux tâches et ordonnancé par un algorithme de préemption à priorité fixe, puis en calculant le nombre de préemptions susceptible de se produire et impose l'exécution de la tâche préemptante ou des tâches préemptées de sorte qu'il évite une préemption des tâches au cours de leur exécution tout en permettant leur exécution dans le délai prescrit. La technique décrite permet de réduire le nombre de préemptions seulement dans le cas où le taux d'occupation des processeurs est notablement inférieur à 100%. L'article de Sung-Heun Oh et Seung-Min YANG intitulé "A Modified Least-Laxity-First Scheduling for Real-Time Tasks" paru dans Proceedings of the 3th International Conference on Real Time Computing Systems and Applications 1998 (27-29 octobre 1998, pages 31 à 36) propose un algorithme d'ordonnancement LLF (priorité à la latence minimale) pour résoudre un problème d'incompatibilité entre deux tâches en permettant à une des deux tâches de s'exécuter complètement sans préemption. L'algorithme dédié au problème du lien de la latence ("laxity tie") relatif à l'ordonnancement LLT opère en effet pour chaque tâche du jeu de tâches et assigne individuellement à chaque tâche du jeu de tâches une priorité fixe pour un temps de libération calculé dynamiquement, ce qui augmente considérablement la complexité du contrôle des tâches ("TCB"), et augmente les temps d'exécution ce qui conduit à une plus faible disponibilité du processeur pour sa tâche essentielle qui est l'exécution des tâches, sauf à choisir un processeur ayant une plus grande puissance de traitement. L'article de Cécilia EKELIN "Clairvoyant Non-Preemption EDF Scheduling" (18th Euromicro Conference on Real Time Systems ECRTS'06 pages 23-32) propose de retarder l'exécution de certaines tâches en tenant compte de l'arrivée future de nouvelles tâches, mais cette technique s'applique seulement au cas de tâches sans règle de préemption. L'article de Yun WANG et Manas SAKSENA "Scheduling Fixed-Priority Tasks with Preemption Threshold" (Sixth Conference on Real Time Computing Systems and Applications RCTSA'99 pages 328-335) propose un algorithme de réduction des préemptions qui impose de calculer pour chaque tâche des seuils de préemption, d'où une complexité proportionnelle au carré du nombre n des tâches. L'article de Woonseok KIM, Jihong KIM et Sang Lyul MIN publié dans les "Proceedings of the 2004 International Symposium on Low Power Electronics and Design" ISPLED'04, 9-11 août 2004, pages 393 à 398, et intitulé "Preemption-Aware Dynamic Voltage Scaling in Hard Real-Time Systems" analyse l'effet négatif des préemptions sur la consommation électrique du processeur et propose deux solutions. La première solution proposée est une accélération de la cadence de l'horloge pour permettre à une tâche de plus faible priorité de se terminer avant l'arrivée d'une tâche de priorité plus élevée, ce qui impose qu'avant que la tâche de priorité plus élevée n'arrive, le taux d'utilisation du processeur soit notablement inférieur à 100 % pour permettre de rétablir ensuite la cadence de l'horloge, et ceci impose, pour une bonne efficacité, de surdimensionner le processeur. La deuxième solution proposée consiste à prévoir un processeur largement surdimensionné par rapport à sa charge de travail totale et à utiliser une faible fréquence d'horloge de sorte qu'il reste possible de terminer des tâches ayant une faible priorité alors que se présente une tâche de plus haute priorité. II résulte de ce qui précède qu'il n'est pas actuellement connu de technologie qui soit apte à diminuer le nombre de préemptions sans que n'existe un inconvénient associé tenant à la disponibilité et/ou au dimensionnement du processeur. L'idée de base de l'invention est de déterminer pour chaque tâche un intervalle de non préemption pendant lequel la tâche peut rester en exécution alors qu'une tâche plus prioritaire apparaît. L'invention concerne ainsi un procédé de gestion des préemptions entre au moins deux tâches ayant des priorités différentes dans un système d'exploitation en temps réel caractérisé en ce que, lors d'une requête d'exécution d'une tâche ayant une priorité plus élevée que la tâche en cours, l'exécution de la tâche en cours n'est interrompu qu'au bout d'un intervalle de temps calculé pour permettre au moins à la tâche en cours et à la tâche de priorité plus élevé d'être exécutées avant la fin de délais d'exécution qui leur sont assignés. L'intervalle de temps peut être calculé une fois pour toutes pour chaque tâche en tenant compte de l'exécution de toutes les autres tâches pouvant avoir une priorité plus élevée, ou bien de manière dynamique en tenant compte de toutes les autres tâches ayant une priorité plus élevée et pour lesquelles une requête d'exécution est formée. Dans ce cas, l'intervalle de temps de la tâche en cours peut être réactualisé chaque fois qu'est formée une requête d'exécution pour une tâche ayant une priorité plus élevée que la tâche en cours. L'invention concerne également un procédé tel que défini ci-dessus caractérisé en ce que la gestion de la préemption de plusieurs tâches dont les indices i sont choisis de sorte que les tâches sont classées en ordre croissant de priorité d'exécution, l'indice 1 étant affecté à la tâche ayant la priorité d'exécution la plus élevée, et ainsi de suite jusqu'à l'indice p qui est affecté à la tâche dont la priorité d'exécution est la plus faible, l'intervalle de temps NPi de non préemption de la tâche de rang i a pour valeur : NP,, = Min (NPi_, , L'abs ) avec i-, i L'-, = P P- 1 C abs i-1 ù k k=l Pk Pi désignant le délai d'exécution assigné à la tâche T. Ce temps est égal à la période de la tâche dans le cas d'un ordonnancement EDF avec calcul statique des valeurs de NPi, et également RM ("Rate Monotonic") par définition. Dans le cas des ordonnancements EDF avec calcul dynamique des valeurs de NPi, ou bien DM ("Deadline monotonie), Pi peut être égal dans cette équation et dans toutes les équations suivantes à une échéance Di de valeur inférieure ou égale à la période de la tâche. C; désignant la durée d'exécution de la tâche Ti D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description ci-après en liaison avec les dessins dans lesquels : - la figure 1 est un exemple de mise en oeuvre d'un algorithme selon l'invention, - la figure 2 illustre l'accumulation de la latence ou laxité des tâches plus prioritaires que la tâche T en cours, - les figures 3a et 3b sont un exemple de mise en oeuvre dans un système mettant en oeuvre trois tâches dont TI est la plus prioritaire, respectivement avec un algorithme selon l'invention et avec un algorithme "EDF" classique, - et les figures 4 et 5 illustrent le cas de préemptions en chaîne dans le cas d'un algorithme "EDF" classique (Figure 4) et comment un algorithme selon l'invention permet de les éviter (Figure 5) ou d'en diminuer le nombre. On considère à titre d'exemple un système en temps réel dans lequel des tâches en temps réel sont ordonnées selon un schéma d'échéance la plus proche (EDF). Les tâches T sont au nombre de n et sont notée (TI, T2, ...Tn). Ces tâches sont supposées être mutuellement indépendantes. Chaque tâche Ti a son propre délai d'exécution ("deadline") P; qui lui est imposé ainsi qu'une durée d'exécution Ci calculée dans le cas d'exécution le plus défavorable ("worst case execution time" ou WCET). Chaque tâche Ti présente une latence ou laxité L; qui est définie par : L; = P; ù C; Chaque tâche réapparaît de manière cyclique et la kème implémentation de la tâche Ti est notée T;,k. Chaque implémentation k de la tâche T;,k a une date de réveil 15 r;,k = kP; et un délai d'exécution (date d'échéance) d;,k = (k+1)P;. Avec un algorithme EDF, la tâche qui s'exécute est celle qui à l'échéance d la plus proche. L'algorithme est donc basé sur des priorités dynamiques. L'algorithme décrit ci-après se distingue d'un algorithme classique de type "EDF" par l'instant où les préemptions sont réalisées. En 20 effet, l'algorithme permet de savoir si une préemption immédiate est nécessaire ou bien s'il est possible de la retarder et pendant combien de temps. Par convention, les tâches sont triées par ordre de manière ascendante par rapport à leur période P de sorte que quelque soit i, on a P; 25 Condition 2 : la tâche Ti peut être préemptée seulement par une tâche ayant une priorité supérieure et donc une durée d'échéance P; inférieure (dans le cas d'un algorithme EDF ou RM). Forcer une tâche de plus faible priorité à continuer son exécution alors qu'une tâche de plus haute priorité doit être exécutée est une inversion de priorité qui peut provoquer un dépassement de l'échéance fixée pour la tâche de plus haute priorité. Seules des tâches de plus haute priorité peuvent donc préempter des tâches de plus faible priorité. L'algorithme RM ("Rate Monotonic"), préemptif, est basé sur des priorités fixes. Les tâches sont périodiques et de période P;, mais l'échéance n'est pas nécessairement en fin de période. Les tâches sont classées par périodes croissantes et la priorité est allouée en fonction inverse de la période. Dans le cas de l'algorithme "EDF", le critère de priorité est l'échéance absolue d. Si la tâche Ti est préemptée à l'instant n par la tâche Ti prête pour l'instant k, ce qui implique que : rf,n Dans le cas d'un algorithme "EDF", la condition 2 est nécessaire, et pour un algorithme "RM" elle est nécessaire et suffisante. Il en résulte comme corollaire que seules les tâches qui ont un délai d'échéance inférieur à celui de la tâche Ti peuvent dépasser leur échéance en cas d'inversion de priorité au profit de la tâche Ti. Condition 3, : Dans le cas d'un algorithme de type "EDF" donnant la priorité à l'échéance dont le terme est le plus proche, une tâche Ti peut poursuivre son exécution en causant une inversion de priorité pendant un temps NP calculé de manière statique ou dynamique sans qu'aucune autre tâche ne dépasse l'échéance qui lui est assignée. Autrement dit, chaque tâche T; présente deux paramètres principaux qui sont sa durée d'exécution C; dans le cas le plus défavorable et sa période P; qui fixe la durée d'échéance, c'est-à-dire le temps qui reste disponible pour terminer la tâche dans le délai prescrit. La date d'échéance de la tâche n'est assimilée à sa période que dans le cas de l'ordonnancement EDF, si on calcule statiquement les valeurs NP des tâches et de l'ordonnancement RM. Pour les ordonnancements EDF avec calcul dynamique des valeurs de NP; ou bien DM ("Deadline Monotonic"), P; peut être égal à une échéance D; de valeur inférieure ou égale à la période de la tâche. Le troisième paramètre élaboré à partir des deux premiers est la latence ou laxité L. Si une tâche de plus haut niveau de priorité présente une latence suffisante, alors on peut décaler son exécution en retardant la préemption pendant une durée qui est compatible avec le fait que toutes les tâches sont effectuées sans dépassement de leur échéances. Un algorithme logique est représenté à la figure 1. A l'arrivée d'une tâche Ti, si aucune tâche n'est active, on procède de manière classique (par exemple algorithme "EDF"). Si une tâche T; est déjà active, on poursuit la procédure "EDF" si P; La valeur NP; de la durée de non préemption peut être déterminée soit de manière statique, soit de manière dynamique. Une détermination statique est décrite ci-après : La latence L; de la tâche T; définit la durée NP;+1 pendant laquelle une tâche T;+1 de priorité plus faible peut causer une inversion de 35 priorité sans que Ti ne manque son échéance. On a donc : NP2 = L~ La tâche T, qui a la durée d'échéance la plus petite ne peut être préemptée par aucune autre tâche, et que la tâche T2 ne peut être préemptée que par la tâche TI, et ainsi de suite jusqu'à la tâche Tp qui peut être préemptée par les tâches plus prioritaires Tp_I, Pour calculer NP3 pour la tâche T3, on définit une tâche virtuelle utilisée uniquement dans les calculs et dont l'objectif est de modéliser les échéances et les temps d'exécution induits par les tâches plus prioritaires que T3. Cette tâche virtuelle a une latence L abs 2 et un temps d'exécution 10 C abs 2 défini dans le cas le plus défavorable comme étant égal à la somme de C2 et d'un temps d'exécution proportionnel à celui de la tâche TI pour la période égale à la période de cette tâche virtuelle, soit : Cabs =C2 + PZ C, 15 On aura: NP3 = Min(NP2, LabS ) C'est-à-dire que l'on choisit le minimum entre les deux valeurs entre parenthèses. 20 On aura de la même façon : NP4 = Min(NP3 , LabS En effet, la tâche T3 a la durée d'échéance la plus grande parmi les tâches TI, T2, T3 qui peuvent préempter la tâche T4. De manière générale, la tâche Ti peut être préemptée par les 25 tâches (TI, T2, ..., T;_1), qui ont une durée d'échéance inférieure à sa durée P. Si on tient compte de toutes les tâches qui peuvent préempter la tâche Ti, on peut définir une tâche virtuelle TabS dont la laxité correspond à la durée de non péremption NP;. On peut ainsi calculer en remontant depuis TI jusqu'à Ti, toutes les durées de non préemption NP; (i variant de 1 à D. 30 Pour calculer le temps d'exécution le plus défavorable d'une tâche virtuelle, on choisit pour la tâche Ti le cas où toutes les tâches ayant un niveau de priorité plus élevé sont appelées en même temps au cours de l'exécution de la tâche Ti. La tâche virtuelle Tabs présente une période égale à la durée d'échéance P;_1 de la tâche et sa durée d'exécution dans le cas le plus défavorable notée Catis est la somme pondérée des durées d'exécution dans le cas le plus défavorable de toutes les tâches ayant une durée d'échéance inférieure à la durée C; de la tâche Ti. On aura donc : C'-' = P x C abs k=1 Pk Liù1 =Pil -cil abs abs abs La latence L'abs de la tâche Ta'-bis accumule en effet les latences ou laxités de toutes les tâches plus prioritaires que la tâche Ti. La figure 2 montre que la tâche virtuelle Tabs collationne la 15 latence accumulée L'abs de toutes les tâches plus prioritaires que la tâche T; tandis que la durée Pabs de la tâche virtuelle Tabs a une valeur plus élevée que pour chacune des tâches de plus grande priorité que Ti et Catis est le cumul pondéré des temps d'exécution les plus défavorables de ces tâches. Cette latence accumulée donne une plus grande capacité à 20 une tâche donnée de se poursuivre sans que son exécution soit préemptée par une tâche plus prioritaire. On définit alors le temps de non préemption NP; de la tâche Ti : NP1 = Min(NP;_, , L'abs Liù1 = P,-1 x P' ` Ck abs k=1 Pk La formule donnant NP; tient compte de par son mode de calcul de la valeur minimale de la latence des tâches de rang inférieur. Ainsi aucune des tâches ne pourra manquer son échéance. L'algorithme décrit ci-dessus retarde la préemption de la tâche en cours pendant une durée égale à la valeur de NP; pour la tâche en cours Ti. 25 30 On notera que les valeurs possibles de NP peuvent être précalculées et placées dans un tableau donnant ainsi pour chaque tâche la valeur NP. Ce délai est décompté par un compteur et quand ce compteur atteint la valeur 0, il y a préemption de la tâche en cours sauf si bien sûr la tâche en cours s'est terminée avant auquel cas il y a exécution de la nouvelle tâche dès la fin de l'exécution de la tâche en cours et sans préemption. Si pendant l'intervalle de temps NP; de la tâche en cours Ti, d'autres tâches apparaissent, elles seront retardées jusqu'à ce que l'intervalle NP; soit terminé. Ce n'est qu'ensuite que les échéances de ces tâches seront prises en compte. Le calcul de NP prend en compte le cas où toutes les tâches plus prioritaires que la tâche en cours apparaissent simultanément, ce qui assure que dans le pire des cas, toutes les tâches seront menées à bien en respectant leur échéance, quelque soient les tâches susceptibles d'apparaître ultérieurement. Exemple : On prend un modèle simple présentant trois tâches TI, T2, T3. Elles ont été classées par ordre de priorité, en fonction de leur période, TI 20 étant la plus prioritaire, comme indiqué ci-dessous : On a: T~ CI =4 P1 = 10 T2 C2=6 P2 = 21 T3 C3= 9 P3= 33 25 TI ne peut être préemptée T2 ne peut être préemptée que par TI T3 ne peut être préemptée que par TI ou T2. Ona NP3=P2-E P2C; Pi soit 30 NP3=21 - lôx4-6=6,6 NP2=P~ûC~=6 Les figures 3a et 3b sont des chronogrammes montant d'une part (figure 3a) le fonctionnement de l'algorithme selon l'invention et d'autre part (figure 3b) selon un algorithme EDF classique, pour une tâche T2 arrivant aux instants t = 0 et 21 (deux occurrences), une tâche TI arrivant aux instants 3,13, 23 et 33 (4 occurrences), et une tâche T3 arrivant aux instants 0 et 33. A la figure 3a, il n'y a plus de préemption, alors qu'à la figure 3b, on a deux préemptions. En effet, la tâche T2 n'est pas du tout préemptée par la tâche TI qui arrive à l'instant 3 car NP2 = 6 ce qui est supérieur au temps nécessaire à la tâche P2 pour s'achever. La tâche TI commence son exécution à l'instant t = 6 et se termine avant son échéance à t = 10. A l'instant t = 10, la tâche T3 commence son exécution jusqu'à ce que la deuxième occurrence de la tâche Ti apparaissent à l'instant t = 13, mais la préemption de T3 est retardée car NP3 = 6,6, ce qui permet à la tâche T3 de se terminer sans préemption. La deuxième occurrence de la tâche TI est exécutée entre les instants t = 19 et t = 23, et la troisième occurrence de la tâche TI est exécutée entre les instants t = 23 et t = 27. La tâche Ti qui est la plus prioritaire ne pouvant être préemptée, la deuxième occurrence de T2 à l'instant t = 20 est retardée jusqu'à t = 27 quand la tâche TI est terminée, et la deuxième occurrence de la tâche T2 est exécutée entre t = 27 et t = 33. L'algorithme statique décrit ne permet en général pas de supprimer toutes les préemptions, mais seulement d'en diminuer le nombre. Il est possible d'améliorer les performances et de diminuer encore le nombre de préemptions en ajustant de manière dynamique la durée de préemption. Le calcul précédent revient en effet à prendre en compte le fait que toutes les tâches à faible périodicité soient appelées simultanément ce qui est en pratique. Le calcul dynamique vise à ne prendre en compte que les tâches effectivement appelées pour être éxecutées. Si une tâche Tk est appelée et présente une échéance antérieure à celle de la tâche Ti en cours, alors, NP; est calculé et est décrémenté pendant que la tâche Ti se poursuit jusqu' ce que la durée NP; soit écoulée ou que la tâche Ti se termine. Il s'agit donc de recalculer NP; chaque fois qu'une nouvelle tâche appelée a une échéance située avant celle de la tâche en cours, et recommencer la décrémentation de NP; avec la nouvelle valeur et avec ce nouveau point de départ, le calcul de NP; s'effectue en utilisant les équations précédentes, mais en ne tenant compte que des tâches qui sont prêtes à être exécutées et qui ont une échéance absolue antérieure à celle de la tâche Ti Dans ce calcul dynamique, les tâches sélectionnées pour le calcul du paramètre NP1 sont ordonnées en fonction de la valeur de leur 5 échéance absolue d; et non en fonction de la valeur de leur durée d'échéance Pi. Si la tâche Tk est la première à être appelée alors que Ti est exécutée (dk A la figure 4 T6 est préempté par T5, T5 par T4, T4 par T3, T3 par T2 et enfin T2 par TI, soit cinq préemptions en cascade qui sont évitées par l'algorithme selon l'invention (figure 5). On notera que l'introduction de l'algorithme selon l'invention ne modifie pas les conditions de faisabilité des algorithmes classiques qui est, par exemple dans le cas de l'algorithme EDF, que, U étant le taux maximal d'utilisation de processeur : REVENDICATIONS 1. Procédé de gestion des préemptions entre au moins deux tâches ayant des priorités différentes dans un système d'exploitation en temps réel caractérisé en ce que lors d'une requête d'exécution d'une tâche ayant une priorité plus élevé que la tâche en cours, l'exécution de la tâche en cours n'est interrompue qu'au bout d'un intervalle de temps calculé pour permettre au moins à la tâche en cours et à la tâche de priorité plus élevée d'être exécutée avant la fin de délais d'exécution qui leur sont assignés. 2. Procédé selon la revendication 1 caractérisé en ce que ledit intervalle de temps est calculé pour chaque tâche de manière fixe en tenant compte de l'exécution toutes les autres tâches pouvant avoir une priorité plus élevée. 3. Procédé selon la revendication 1 caractérisé en ce que ledit intervalle de temps est déterminé pour la tâche en cours de manière dynamique en tenant compte de toutes les autres tâches ayant une priorité plus élevée et pour lesquelles une requête d'exécution est formée. 4. Procédé selon la revendication 3 caractérisé en ce que ledit intervalle de temps de la tâche en cours est réactualisé chaque fois qu'est formée une requête d'exécution pour une tâche ayant une priorité plus élevée que la tâche en cours. 5. Procédé selon une des revendications précédentes caractérisé en ce que pour la gestion de la préemption de plusieurs tâches dont les indices i sont choisis de sorte que les tâches sont classées en ordre croissant du délai d'exécution, l'indice 1 étant affecté à la tâche ayant le délai d'exécution le plus court, et ainsi de suite jusqu'à l'indice p qui est affecté à la tâche dont le délai d'exécution est le plus long, l'intervalle de temps NPi de non préemption de la tâche de rang i a pour valeur : NPi = Min~NP;_, , L`~bs avec -1 L- =P P xC abs i-1 k k=1 Pk P, désignant le délai d'exécution assigné à la tâche T;C; désignant la durée d'exécution dans le pire cas de la tâche Ti 6. Procédé selon la revendication 5 caractérisé en ce que ledit intervalle de temps NP; est calculé de manière fixe en tenant compte de toutes les autres tâches ayant un délai d'exécution plus court que le temps d'exécution P; de la tâche en cours T; et en ce que la tâche en cours T; ne peut être préemptée que par une tâche ayant un délai d'exécution qui est inférieur à son délai d'exécution P. 7. Procédé selon la revendication 5 caractérisé en ce que ledit intervalle de temps NP; est calculé de manière dynamique en tenant compte de toutes les tâches appelées pour exécution et ayant une échéance absolue antérieure à celle de la tâche en cours Ti et en ce que la tâche en cours ne peut être préemptée que par une tâche ayant une échéance absolue antérieure à son échéance absolue d;.