FR 2702577 A1 19940916 FR 9302812 A 19930311 Procédé pour contrôler l'exécution correcte d'un programme d'ordinateur multitâche L'invention porte sur un procédé pour contrôler l'exécution correcte d'un programme d'ordinateur multitâche par un ou des processeurs dans lequel les tâches du programme émettent des messages et sont exécutées en réponse à la prise en compte de tels messages, les messages incluant chacun une estampille temporelle. L'exécution d'un programme multitâche est correcte si les quatre conditions suivantes sont satisfaites (le ou les processeurs étant non défaillants). ) Chaque tâche émet un ou plusieurs messages en réponse à la prise en compte d'un ou plusieurs autres messages dans un délai inférieur au délai imposé au moment15 de la conception du programme. 2 ) Tout message émis par une tâche est correctement transmis à la ou aux tâches destinatrices de ce message. 3) Tout message émis par une tâche a une valeur correcte. 4 ) Les tâches, d'une part, prennent en compte les messages qui leurs sont destinés dans un ordre chronologique fixé au moment de la conception du programme, et d'autre part, sont exécutées selon un ordre chronologique fixé aussi au moment de la conception du programme Par la suite, on25 considérera que l'exécution normale du programme détermine un graphe acyclique dont les sommets sont les tâches et les arcs les flots de messages entre les tâches. Pour contrôler que la première condition est satisfaite, il est connu de propager les estampilles temporelles dans les tâches au travers des messages et comparer dans chaque tâche l'estampille de chaque message à un instant local donné par une horloge. Pour contrôler que la seconde condition est satisfaite, il est connu d'utiliser des codes détecteur d'erreur par exemple du type CRC. Pour contrôler que la troisième condition est satisfaite, il est connu de répliquer les tâches du programme et d'exploiter des techniques de vote majoritaire. L'objet de l'invention est d'apporter une solution pour contrôler que la quatrième condition est satisfaite. Cette condition n'est pas satisfaite lorsque, par exemple, des messages sont perdus ou dupliqués ou encore omis par les tâches Un procédé pour contrôler que cette quatrième condition est satisfaite par un programme d'ordinateur10 multitâche est connu du document IEEE, 1991, "Logical Time in Distributed Computing Systems", Colin Fidge Dans ce procédé connu, chaque tâche émettrice d'un message élabore une clef d'exécution associée à ce message et qui identifie un relation de dépendance causale pour ce message laquelle15 est définie par l'ordre chronologique d'exécution des tâches et l'ordre chronologique de prise en compte des messages par ces tâches ayant conduit à l'émission de ce message par cette tâche émettrice Chaque clef d'exécution est constituée d'une liste de compteurs, un compteur pour chaque20 tâche du programme, formant un vecteur temporel A chaque fois qu'une tâche émet un message pour une tâche destinatrice, elle incrémente dans son vecteur temporel le compteur qui lui correspond et transmet une copie de ce vecteur temporel à la tâche destinatrice La tâche25 destinatrice met à jour son propre vecteur temporel en prenant, pour chaque compteur, la plus grande des valeurs de ce compteur entre son vecteur temporel et le vecteur temporel reçu Un problème qui se pose dans ce procédé connu est que les clefs d'exécution ont des tailles en nombre de30 bits très importantes, ce nombre étant linéairement dépendant du nombre de tâches constituant le programme (un compteur pour chaque tâche) Il s'ensuit que le transfert des clefs d'exécution entre tâches émettrices de messages et tâches réceptrices de tels messages consomme beaucoup de35 temps et pénalise, le cas échéant, l'exécution temps réel du programme d'ordinateur Par ailleurs, dans ce procédé connu, il n'a pas été envisagé de contrôler automatiquement l'exécution correcte d'un programme d'ordinateur multitâche pendant son exploitation opérationnelle Ce procédé est en fait utilisé en premier lieu pour le déverminage hors ligne5 d'un programme d'ordinateur multitâche. L'invention a pour but de remédier à ces inconvénients A cet effet, l'invention a pour objet un procédé pour contrôler l'exécution correcte d'un programme d'ordinateur multitâche, caractérisé en ce que chaque clef10 d'exécution est élaborée par combinaison bit à bit de mots binaires contenant chacun la représentation binaire d'un identificateur de tâche ou d'un identificateur de message ou d'une estampille temporelle de message, les bits de chaque mot binaire ayant préalablement été permutés circulairement15 avec des ampleurs différentes pour chaque mot. La taille en bits d'une telle clef d'exécution dépend donc uniquement du nombre de bit nécessaires pour la représentation binaire d'un identificateur de tâche ou d'un identificateur de message ou d'une estampille temporelle20 auquel s'ajoute, éventuellement, le nombre de bits utilisés pour la permutation circulaire de plus grande ampleur. La combinaison bit à bit est de préférence un OU exclusif bit à bit. Si le programme d'ordinateur multitâche commande un équipement industriel, par exemple un équipement ferroviaire, une erreur d'exécution du programme multitâche peut avoir de graves conséquences Il est donc utile, voire nécessaire, de contrôler l'exécution correcte d'un tel programme d'ordinateur pendant son exploitation de manière30 qu'en cas d'occurrence d'une erreur d'exécution, une alarme puisse être émise et une commande restrictive produite pour l'équipement commandé A cet effet, selon un autre aspect de l'invention, une au moins desdites tâches émet un ou plusieurs de tels messages en réponse à la prise en compte35 d'au moins un message d'entrée, une comparaison entre la clef d'exécution élaborée en dernier lieu par une tâche du programme et une clef de référence élaborée à partir dudit message d'entrée étant effectuée, sur la base de laquelle une erreur d'exécution peut être détectée. Un mode de réalisation de l'invention est maintenant décrit en détail en référence aux dessins. La figure 1 représente schématiquement l'architecture d'une installation de traitement de données pour la mise en oeuvre du procédé selon l'invention. La figure 2 représente schématiquement des tâches d'un programme d'ordinateur multitâche communiquant entre elles par des messages. La figure 3 est un diagramme temporel dans lequel apparaît l'ordre d'exécution des tâches du programme représentées à la figure 2 et l'ordre de prise en compte des15 messages par ces tâches. La figure 4 a représente schématiquement un graphe d'exécution d'un programme d'ordinateur multitâche. La figure 4 b illustre la façon dont est élaborée une clef d'exécution de référence sous la forme d'une chaîne de causalité. La figure 5 illustre la façon dont est élaborée une clef d'exécution par une tâche émettrice d'un message. Sur la figure 1, l'architecture de l'installation de traitement de données prévue pour mettre en oeuvre le procédé selon l'invention est constituée d'une part d'un ou plusieurs processeurs 1,1 ',1 " chargés d'exécuter chacun une ou plusieurs tâches d'un programme multitâche à contrôler tel que celui 10 représenté figure 2, d'autre part, d'un organe d'entrée 3 et d'un organe de sortie 4 sains sur30 défaillance communiquant entre eux par une liaison spécialisée 5 et avec les processeurs par un bus 2 De tels organes d'entrée ou de sortie peuvent être vus comme des processeurs particuliers programmés pour accomplir les fonctions suivantes Pour chaque signal de données E destiné35 au programme à contrôler, l'organe d'entrée 3 forme un message d'entrée incluant une estampille temporelle et le communique en parallèle au programme et à l'organe de sortie 4 Comme décrit par la suite, pendant l'exécution du programme par les processeurs, les tâches élaborent des clefs d'exécution à chaque fois qu'elles émettent un 5 message En parallèle, l'organe de sortie calcule une clef d'exécution de référence à partir du message d'entrée fournie par l'organe d'entrée Sur la base d'une comparaison de la dernière clef d'exécution élaborée par une tâche du programme avec la clef d'exécution de référence, l'organe de10 sortie 4 détecte la présence ou l'absence d'une erreur d'exécution et fournit une sortie S adaptée au résultat de la comparaison. Sur la figure 2, un exemple simple de programme d'ordinateur multitâche 10 est représenté Il comporte 6 tâches 13 référencées Pa,Pb,Pc,Pd,Pe,Pf émettrices de messages internes 12 référencés r 2,r 3,r 4,r 5,r 6,r 8,r 9 Les tâches Fa et Pe reçoivent respectivement des messages d'entrée il désignés par rl,r 7 En réponse au message ri, la tâche Pa, lorsqu'elle est exécutée, émet les messages r 2 et20 r 3 En réponse au message r 7, la tâche Pe, lorsqu'elle est exécutée, émet le message r 8 Les tâches Pb,Pc,Pd,Pf sont exécutées en réponse à la prise d'un ou de plusieurs messages internes et la tâche Pf, exécutée en dernier, émet le message de sortie r 9.25 Sur la figure 3, le diagramme illustre l'ordre chronologique normal d'exécution des tâches 13 du programme et l'ordre chronologique normal de prise en compte des messages d'entrée 1 i ou messages internes 12 par les tâches. Dans cet exemple, la tâche Pe prend en compte le message r 730 avant que la tâche Fa prenne en compte le message ri Par ailleurs la tâche Pf émet le message r 9 quand elle peut prendre en compte les messages r 6 et r 8 résultant de la prise en compte des messages r 7 et rn par les tâches Pe et Pa. Le procédé d'élaboration des clefs d'exécution par les tâches est maintenant décrit en prenant l'exemple du programme 10 de la figure 2. 1 Cas des tâches Pa et Pe. Les tâches Pa et Pe prennent chacune en compte un message d'entrée il fourni par l'organe d'entrée 3 Chaque message d'entrée inclut au moins un identificateur de message, une estampille temporelle et des données. L'identificateur de message est classiquement le nom10 symbolique du message défini au moment de la conception du programme L'estampille temporelle est classiquement une date système affectée par l'organe d'entrée au message d'entrée Si plusieurs messages d'entrée sont fournis par l'organe d'entrée avec des identificateurs de message15 identiques, ils ont forcément des estampilles de valeurs différentes Par ailleurs chaque tâche dispose d'un identificateur de tâche et de l'identificateur de chaque message interne qu'elle émet L'identificateur de tâche est le nom symbolique de la tâche défini au moment de la20 conception du programme De la même façon, l'identificateur de message interne est le nom symbolique du message interne défini au moment de la conception du programme En réponse à la prise en compte du message ri, la tâche Pa, en s'exécutant, récupère l'identificateur de message et25 l'estampille temporelle du message ri Elle élabore une clef d'exécution associée au message interne r 2 de la façon suivante Les représentations binaires de l'identificateur du message ri, de l'estampille temporelle attachée au message ri, l'identificateur de tâche de la tâche Pa,30 l'identificateur du message r 2 sont placées respectivement dans des registres mémoire ayant chacun une longueur de B bits Une permutation circulaire est appliquée sur les bits de chaque registre mémoire avec une ampleur prise parmi une liste d'ampleurs différentes préenregistrée accessible par35 la tâche Pa Les permutations effectuées sur les différents registres mémoire ont des ampleurs différentes prises dans la liste d'ampleurs Cette liste d'ampleurs peut consistée dans une liste de valeurs entières ordonnées par ordre croissant et commençant par la valeur 1, du type 1,2,3 etc Après permutation, les valeurs des registres mémoire sont additionnées bit à bit sans retenue pour obtenir une signature d'exécution Sex(r 2) sous forme d'un mot binaire de B bits La clef d'exécution Cex(r 2) associée au message r 2 est constituée de la signature d'exécution Sex(r 2) calculée et d'un compteur de contribution de tâche10 Nex(r 2) Pour la clef d'exécution du message r 2, la valeur du compteur Nex(r 2) est fixée à 1 car elle ne dépend d'aucune autre tâche ayant été exécutée avant elle. La tâche Pa élabore aussi une clef d'exécution Cex(r 3) associée au message r 3 de façon similaire comme pour le message r 2, la représentation symbolique du message r 2 étant remplacée par la représentation symbolique du message r 3 La valeur du compteur Nex(r 3) est aussi fixée à 1. De façon similaire, la tâche Pe, lorsqu'elle est exécutée, élabore une clef d'exécution Cex(r 8) pour le message r 8 comme décrit ci-dessus la valeur du compteur Nex(r 8) est fixée à 1. Les clefs d'exécution élaborées par les tâches Fa et Pe sont transmises avec les messages r 2,r 3,r 8 aux tâches réceptrices de ces messages c'est-à-dire que la clef25 d'exécution Cex(r 2) est transmise à la tâche Pb, la clef d'exécution Cex(r 3) est transmise à la tâche Pc et la clef d'exécution Cex(r 8) est transmise à la tâche Pf. 2- Cas des tâches Pb,Pc,Pd Chacune des ces tâches prend en compte un message interne qui est émis par une tâche et reçoit par conséquent une clef d'exécution associée au message qu'elle prend en compte Ces tâches dépendent d'une tâche ayant été exécutée avant elles. La tâche Pb récupère de la clef d'exécution Cex(r 2) la signature Sex(r 2) et le compteur Nex(r 2) et du message r 2, l'identificateur et l'estampille temporelle de ce message. L'estampille temporelle du message r 2 est identique à celle du message ri car le message r 2 est dérivé directement du message ri La tâche Pb élabore une clef d'exécution Cex(r 4) pour le message r 4 de la façon suivante Les représentations5 binaires de l'identificateur du message r 2, de l'estampille temporelle associée au message r 2, de l'identificateur de tâche de la tâche Pb, de l'identificateur du message r 4 sont placées respectivement dans des registres mémoire ayant chacun une longueur de B bits Une permutation circulaire10 est appliquée sur les bits de chaque registre mémoire avec une ampleur prise parmi la même liste d'ampleurs que pour la tâche Pa Après permutation, les valeurs des registres mémoire sont additionnées bit à bit pour obtenir une signature partielle d'exécution S Pex(r 4) sous forme d'un mot15 binaire de B bits Une permutation circulaire est appliquée sur les bits de S Pex(r 4) avec une ampleur égale à Nex(r 2). Après permutation des bits, les valeurs de Sex(r 2) et S Pex(r 4) sont additionnées bit à bit sans retenue pour obtenir une signature d'exécution Sex(r 4) sous forme d'un20 mot binaire de B bits La clef d'exécution Cex(r 4) associée au message r 4 est constituée de Sex(r 4) et d'un compteur Nex(r 4) dont la valeur est égale à Nex(r 2)+ 1. De façon similaire la tâche Pc élabore une clef d'exécution Cex(r 5). Pour élaborer la clef d'exécution associée au message r 6, la tâche Pd récupère d'abord des clefs d'exécution Cex(r 4) et Cex(r 5) donc les signatures d'exécution Sex(r 4) et Sex(r 5), les compteurs Nex(r 4) et Nex(r 5) Elle récupère ensuite des messages r 4 et r 5 leur identificateur de message30 et leur estampille temporelle L'estampille temporelle des messages r 4 et r 5 est identique à celle du message rn. La tâche Pd élabore, lorsqu'elle s'exécute, une clef d'exécution Cex(r 6) pour le message r 6 de la façon suivante. Les représentations binaires de l'identificateur du message35 r 5, de l'estampille temporelle associée au message r 5, de l'identificateur du message r 4, de l'estampille du message r 4, de l'identificateur de tâche de la tâche Pd, de l'identificateur du message r 6 sont placées respectivement dans des registres mémoire ayant chacun une longueur de B bits Une permutation circulaire est appliquée sur les bits 5 de chaque registre mémoire avec une ampleur prise parmi la même liste d'ampleurs que pour la tâche Pa Après permutation, les valeurs des registres mémoire sont additionnées bit à bit sans retenue pour obtenir une signature partielle d'exécution S Pex(r 6) sous forme d'un mot10 binaire de B bits Une permutation circulaire est appliquée sur les bits de Sex(r 5) avec une ampleur égale à Nex(r 4), sur les bits de S Pex(r 6) avec une ampleur égale à Nex(r 4)+Nex(r 5) Après permutation des bits, les valeurs de Sex(r 5), Sex(r 4) et S Pex(r 6) sont additionnées bit à bit15 sans retenue pour obtenir une signature d'exécution Sex(r 6) sous forme d'un mot binaire de B bits La clef d'exécution Cex(r 6) associée au message r 6 est constituée de Sex(r 6) et d'un compteur Nex(r 6) dont la valeur est égale à Nex(r 4)+Nex(r 5)+ 1.20 Pour élaborer la clef d'exécution associée au message r 9, la tâche Pf récupère d'abord des clefs d'exécution Cex(r 6) et Cex(r 8) donc les signatures d'exécution Sex(r 6) et Sex(r 8), les compteurs Nex(r 6) et Nex(r 8) Elle récupère ensuite des messages r 6 et r 8 leur identificateur de message25 et leur estampille temporelle L'estampille temporelle du message r 6 est identique à celle du message rn et l'estampille temporelle du message r 8 est identique à celle du message r 7. La tâche Pf élabore, lorsqu'elle s'exécute, une clef d'exécution Cex(r 9) pour le message r 9 de la façon suivante. Les représentations binaires de l'identificateur du message r 8, de l'estampille temporelle associée au message r 8, de l'identificateur du message r 6, de l'estampille du message r 6, de l'identificateur de tâche de la tâche Pf, de35 l'identificateur du message r 9 sont placées respectivement dans des registres mémoire ayant chacun une longueur de B bits Une permutation circulaire est appliquée sur les bits de chaque registre mémoire avec une ampleur prise parmi la même liste d'ampleurs que pour la tâche Fa ou la tâche Pe. Après permutation, les valeurs des registres mémoire sont5 additionnées bit à bit sans retenue pour obtenir une signature partielle d'exécution S Pex(r 9) sous forme d'un mot binaire de B bits Une permutation circulaire est appliquée sur les bits de Sex(r 8) avec une ampleur égale à Nex(r 6), sur les bits de S Pex(r 9) avec une ampleur égale à10 Nex(r 8)+Nex(r 6) Après permutation des bits, les valeurs de Sex(r 8), Sex(r 6) et S Pex(r 9) sont additionnées bit à bit sans retenue pour obtenir une signature d'exécution Sex(r 9) sous forme d'un mot binaire de B bits La clef d'exécution Cex(r 9) associée au message r 9 est constituée de Sex(r 9) et15 d'un compteur Nex(r 9) dont la valeur est égale à Nex(r 8)+Nex(r 6)+ 1 la clef d'exécution Cex(r 9) est transmise à l'organe de sortie 4. Par ailleurs, une clef d'exécution de référence Cref(r 9) est élaborée par l'organe de sortie 4 à partir des messages d'entrée rn et r 2 en répétant le processus décrit ci-dessus pour le graphe d'exécution normale du programme 10 de sorte qu'une erreur d'exécution peut être détectée par comparaison de la clef d'exécution de référence Cref(r 9) avec la clef d'exécution Cex(r 9) Dans le cas o, pendant25 l'exploitation du programme 10, plusieurs messages ri et plusieurs messages correspondant r 7 sont émis et qu'un message rn par exemple est omis par la tâche Pa, certains messages r 6 et r 7 pris en compte par la tâche Pf auront des estampilles temporelles différentes Il en résultera qu'une30 erreur d'exécution sera détectée par l'organe de sortie 4. Le graphe d'exécution normale du programme 10 peut facilement être obtenu par analyse syntaxique (par exemple au moment de la compilation) du code source du programme 10 duquel sont extraits les noms symboliques des messages35 d'entrée, des messages internes, des tâches et la relation de dépendance causale du message r 9 Sur la figure 4 a, un il graphe d'exécution normale d'un programme multitâche est représenté Sur cette figure, le programme comporte 3 tâches T 1,T 2,T 3 référencées 13 Les tâches T 1,T 2 reçoivent en parallèle un message d'entrée il dont l'identificateur est 5 désigné par le symbole e Les tâches T 1 et T 2 émettent respectivement, en réponse au message d'entrée 11, les messages internes 12 dont les identificateurs sont désignés par les symboles a et b La tâche T 3, émet en réponse aux messages internes 12, deux messages internes dont les10 identificateurs sont désignés par les symboles c et d A partir de ce graphe d'exécution, des chaînes de causalité pour chaque message interne émis par une tâche peuvent être construites automatiquement La figure 4 b montre différentes chaînes de causalité 41,42,45,46 élaborée pour les messages15 a,b,c,d Si les symboles Tl T 2,T 3 désignent les identificateurs des tâches T 1,T 2,T 3 et les symboles 0 (e),O(a),O(b) (ici O (a)=O(b)=O(e)) désignent les estampilles temporelles attribuées aux messages e,a,b, chaque chaîne de causalité comporte l'ensemble des éléments,20 représentés symboliquement, qui sont utilisés par une tâche pour élaborer un signature d'exécution Ainsi, la chaîne de causalité 41 correspond à Sex(a), la chaîne 42 à Sex(b), la chaîne 45 à Sex(c) et la chaîne 46 à Sex(d) Dans les chaînes Sex(c) et Sex(d) apparaissent aussi les signatures25 partielles S Pex(c) et Spex(d) référencées 44,43 L'organe de sortie est donc agencé pour élaborer de telles chaînes de causalité dans lesquelles les valeurs des estampilles des messages sont mis à jour en fonction des messages d'entrée fournis par l'organe d'entrée et ensuite combiner les30 éléments (symboles) des chaînes de causalité pour obtenir une clef d'exécution de référence correspondant à une valeur d' estampille. Le procédé selon l'invention est maintenant décrit de façon générale en référence aux figures 5 et 6. Par la suite les définitions suivantes sont utilisées. B est un entier indiquant le nombre de bits nécessaires à la représentation binaire d'une signature d'exécution. Pk est la fonction permutation circulaire d'ampleur k bits dans un mot de B bits r est un entier indiquant le nombre de bits nécessaires à la représentation binaire d'un symbole que ce soit un identificateur de message, de tâche ou une estampille temporelle.10 nmax est un entier égal au nombre maximal de messages qu'une tâche prend en compte. s est une suite d'entiers naturels représentant des décalages de bits tels que r + maxj{s(i)}≤B, s(i) étant le ième élément de la liste, l'indice pour cette suite allant15 de 1 à 2 (l+ nmax). e symbolise la fonction logique OU exclusif "bit à bit". Une tâche T sur la figure 5 reçoit en entrée et prend en compte N premiers messages il, in et émet m seconds messages 1, om Elle possède un identificateur de tâche désigné par le symbole T. Lorsque la tâche T est exécutée, elle récupère en parallèle aux N premiers messages, N clefs d'exécution Cex(il), Cex(in) Si ij est un message d'entrée, alors par25 construction Cex(ij) a tous ses bits à 0. Des clefs d'exécution Cex(il), Cex(in), elle récupère N compteurs de contribution de tâche Nex(il), Nex(in) et N signatures d'exécution Sex(il), Sex(in) Des N premiers messages pris en compte,30 elle récupère N identificateurs de messages il, in et n estampilles temporelles de message O (il), O(in). Pour chaque second message Ok, la tâche T élabore une clef d'exécution Cex(ok) de la façon suivante. Elle élabore d'abord une signature partielle S Pex(oj) à partir de la relation suivante: S Pex(Ok)= '9 j=l,nlPs( 2 j-1)(ij)E Ps( 2 j)(O(ij))l Ps( 2 n+l)(T) 0 Ps( 2 n+ 2)( O k) Elle élabore ensuite une signature d'exécution Sex(ok) à partir de la relation suivante: Sex(ok)= ij=l,nlP Ep=l,j-l Nex(ip)(Sex(ii))l P Ep=l,n Nex(ip)(S Pex(Ok)) La clef d'exécution Cex(ok) pour le message ok est constituée de Sex(ok) et d'un compteur Nex(ok) dont la valeur est égale à Ej=l,n Nex(ij) + 1. Il est entendu que toutes les tâches d'un programme dont l'exécution est contrôlée exploitent la même liste s d'entiers naturels pour les permutations. L'organe de sortie 4 est agencé pour exploiter la même suite d'entiers naturels que les tâches de sorte que si le programme multitâche s'exécute normalement, la clef de20 référence élaborée par l'organe de sortie est identique à la clef d'exécution élaborée en dernier lieu par une tâche pour un ou des messages d'entrée Par ailleurs, l'organe de sortie est agencé pour mettre à jour la valeur de la clef d'exécution de référence Cref en fonction de nouveaux25 messages d'entrée pris en compte par les tâches à des instants différents de sorte que le contrôle est effectué durant tout le temps que le programme contrôlé est exploité. REVENDICATIONS 1) Un procédé pour contrôler l'exécution correcte d'un programme d'ordinateur multitâche ( 10) par un ou des processeurs ( 1,1 ',1 ") dans lequel les tâches (Pa,Pb,Pc,Pd,Pe,Pf,T 1,T 2,T 3,T) du programme émettent des messages (r 2,r 3,r 4,r 5,r 6,r 8,r 9,abcdok) et sont exécutées en réponse à la prise en compte de tels messages, chaque message incluant une estampille temporelle10 (O(a),O(b),O(ij)), chaque tâche émettrice d'un message élaborant une clef d'exécution (Cex(ok)) associée à ce message et qui identifie une relation de dépendance causale du message définie par l'ordre chronologique d'exécution des tâches et l'ordre chronologique de prise en compte des15 messages par ces tâches ayant conduit à l'émission de ce message par cette tâche émettrice, caractérisé en ce que chaque clef d'exécution (Cex(ok)) est élaborée par combinaison (@) bit à bit de mots binaires contenant chacun la représentation binaire d'un identificateur de tâche ou20 d'un identificateur de message ou d'une estampille temporelle de message, les bits de chaque mot binaire ayant préalablement été permutés circulairement (Po) avec des ampleurs différentes (s( 2 j-1),s( 2 j),s( 2 n+ 1),s( 2 n+ 2)) pour chaque mot.25 2) Le procédé selon la revendication 1, dans lequel chaque tâche (T) réceptrice d'un premier message (ij) et émettrice d'un second message ( O k) élabore pour ce second message une clef d'exécution (Cex(ok)) en combinant bit à bit après permutation circulaire avec des ampleurs différentes, un mot binaire contenant la représentation binaire de l'identificateur du premier message (ij), un mot binaire contenant la représentation binaire de l'estampille temporelle (O(ij)) attachée au premier message, un mot35 binaire contenant la représentation binaire de l'identificateur de cette tâche (T), un mot binaire contenant la représentation binaire de l'identificateur du second message ( O k). 3) Le procédé selon la revendication 2, dans lequel certaines tâches reçoivent une clef d'exécution (Cex(ij)) en parallèle avec un premier message (ij) et émettent un second message ( O k), chacune (T) de ces certaines tâches élaborant une clef d'exécution (Cex(ok)) pour ce second message en combinant bit à bit après permutation circulaire avec des10 premières ampleurs différentes (s( 2 j-1), s( 2 j), s( 2 n+ 1), s( 2 n+ 2)) un mot binaire contenant la représentation binaire de l'identificateur du premier message (ij), un mot binaire contenant la représentation binaire de l'estampille temporelle (O(ij)) attachée au premier message, un mot15 binaire contenant la représentation binaire de l'identificateur de cette tâche (T), un mot binaire contenant la représentation binaire de l'identificateur du second message ( O k) pour obtenir un mot binaire résultant et en combinant bit à bit après permutation circulaire avec des20 secondes ampleurs différentes (Nl, Nn), le mot binaire résultant avec la clef d'exécution reçue en parallèle avec le premier message. 4) Le procédé selon l'une des revendications 3, dans lequel les premières ampleurs de permutation circulaire sont données par une suite de valeurs entières détenue par chaque tâche. ) Le procédé selon les revendications 3 ou 4, dans lequel les secondes ampleurs de permutation circulaire sont données par un compteur faisant partie de la clef d'exécution reçue en parallèle avec le premier message 6) Le procédé selon l'une des revendications 1 à 5, dans lequel ladite combinaison bit à bit est un OU exclusif bit à bit. 7) Le procédé selon l'un des revendications précédentes, dans lequel une (Pa,Pe,T 1,T 2) au moins desdites tâches émet un ou plusieurs de tels messages en réponse à la 5 prise en compte d'au moins un message d'entrée (rl,r 2,e), une comparaison entre la clef d'exécution élaborée en dernier lieu par une tâche du programme et une clef de référence élaborée à partir dudit message d'entrée étant effectuée, sur la base de laquelle une erreur d'exécution10 peut être détectée.