Brevet FR2771828A1 — publié le 19990604

PROCEDE DE SECURISATION D'UN CALCULATEUR La présente invention concerne la sécurisation de calculateurs exécutant simultanément plusieurs tâches indépendantes mettant en oeuvre des fonctions critiques. La réalisation de calculateurs multitâches prenant part à des fonctions critiques pose le problème de la détection et du confinement des défaillances car il est alors, de la plus haute importance pour un utilisateur, d'être averti le plus tôt possible d'un mauvais fonctionnement du calculateur afin de limiter la pollution d'une tâche. Ce problème de la détection et du confinement des défaillances d'un calculateur multitâche a déjà été abordé dans la technique actuelle. Une première solution consiste à doubler le processeur du calculateur à l'aide d'un processeur redondant qui exécute les mêmes tâches aux mêmes moments et à comparer systématiquement les résultats obtenus par les deux processeurs à l'aide d'un circuit logique d'arbitrage apte à déterminer un processeur défaillant. Cette solution, qui permet d'obtenir un haut niveau de sécurité, demeure d'un coût élevé souvent rédhibitoire dans des applications à grand volume. Une deuxième solution consiste à faire un partitionnement temporel en imposant périodiquement au processeur du calculateur de changer l'état d'un registre et en vérifiant à l'aide d'un circuit auxiliaire que les changements d'état du registre ont bien lieu aux instants voulus. C'est la technique des programmes de surveillance connus sous la dénomination anglo-saxonne de "watch dog". Cette solution se heurte au problème de la latence des alarmes car on est dans l'impossibilité de déterminer l'instant précis de début d'un dysfonctionnement antérieur à une défaillance d'un programme "watch dog" Une troisième solution consiste à partitionner à la fois dans le temps, des tâches simultanées étant toujours exécutées par morceaux au cours de courtes périodes de temps successives, et, dans l'espace mémoire, les domaines des tâches ou applications exécutées simultanément par un processeur pour détecter les empiétements des exécutions des tâches les unes sur les autres. Ceci suppose d'une part, I'élaboration, grâce à un circuit d'horloge étalon, d'un contexte dynamique dans lequel la tâche exécutée à un instant donné est identifiée, et d'autre part, la délimitation des domaines mémoire dans lesquels chaque tâche doit être confinée. Le confinement spatial d'une tâche peut être plus ou moins rigoureux. II peut se restreindre à la définition d'un droit à écrire des données dans certaines zones de la mémoire dont les emplacements sont fonction de la tâche licitement en cours d'exécution. En plus de la définition d'un droit à écrire des données, il peut aussi s'étendre à la définition d'un droit à lire des données dans des zones de la mémoire dont les emplacements sont fonction de la tâche licitement en cours d'exécution. II peut enfin s'étendre, en plus de la définition de droits à écrire et lire des données, à la définition d'un droit d'exécuter des instructions fonction de leurs emplacements en mémoire et de la tâche licitement en cours d'exécution. Le confinement spatial nécessite d'associer à la mémoire une table d'adressages licites dont l'encombrement augmente avec la finesse du partitionnement spatial effectué et dont la manipulation devient rapidement compliquée si bien que l'on se contente souvent d'un partitionnement spatial incomplet. La présente invention a pour but d'améliorer la précocité de détection d'un dysfonctionnement dans le cas d'un calculateur multitâche équipé d'un système de détection de défaillance par partitionnement temporel et la probabilité de détection d'un dysfonctionnement dans le cas de l'existence d'un partitionnement spatial plus ou moins élaboré. Elle a pour objet un procédé de sécurisation d'un calculateur multitâche équipé d'un système de détection de défaillance par partitionnement temporel et/ou spatial qui repère à chaque instant la tâche dont l'exécution est licite, consistant à mémoriser les codes binaires d'instruction exécutables par le processeur unique ou multiple du calculateur sous une forme transcodée réversible fonction de leur tâche d'appartenance et à inverser le transcodage au moment de l'appel pour exécution par le processeur de chaque code binaire exécutable au moyen d'une clef d'inversion de transcodage déterminée en fonction de la tâche dont l'exécution est licite au moment de cet appel. En cas d'un dysfonctionnement conduisant à un empiétement de deux tâches distinctes, le transcodage inverse des codes binaires exécutables avec une clef d'inversion de transcodage inadaptée introduit un aléa rendant plus aberrant encore le comportement du processeur et facilitant la détection du dysfonctionnement par le système de détection de défaillance par partionnement temporel et/ou spatial. Avantageusement, les codes binaires d'instruction exécutables par le processeur font appel à un champ de bits redondant disposant d'une capacité de codage d'un nombre d'instructions supérieur à celui des instructions comprises par le processeur, le système de détection de défaillance étant alors équipé d'un circuit de test de la validité des codes d'instruction exécutables appliqués au processeur engendrant une alarme à chaque fois qu'un code d'instruction exécutable résultant des opérations de transcodage et de transcodage inverse ne fait pas partie du jeu des instructions comprises par le processeur. Avantageusement, les codes binaires d'instruction exécutables par le processeur sont complétés en mémoire par ajout d'un champ de bits supplémentaire constituant un invariant perdu lors d'un transcodage, le système de détection de défaillance étant alors équipé d'un circuit de test de l'invariance du champ de bits supplémentaire engendrant une alarme lorsque le champ de bits supplémentaire associé à un code d'instruction exécutable appliqué au processeur a perdu son invariance à la suite des opérations de transcodage et de transcodage inverse. Avantageusement, les opérations de transcodages se manifestent uniquement par des inversions de digits des codes binaires exécutables et les clés de transcodage sont des vecteurs d'inversion valables aussi bien pour un transcodage que pour un transcodage inverse. D'autres caractéristiques et avantages de l'invention ressortiront de la description ci-après d'un mode de réalisation donné à titre d'exemple. Cette description sera faite en regard du dessin dans lequel - une figure 1 représente un schéma synoptique d'un calculateur multitâche pourvu d'un dispositif de sécurisation selon I'invention, - une figure 2 représente le schéma d'un circuit de vérification de parité qui peut faire partie d'un circuit de vérification de cohérence apparaissant dans le schéma de la figure 1, et -une figure 3 représente un schéma possible de réalisation d'un circuit de détermination de vecteur de transcodage inverse apparaissant dans le schéma de la figure 1. Le calculateur représenté dans la figure 1 comporte principalement un processeur 1 mis en communication avec une mémoire 2 par un bus d'adresses et un bus de données. Le processeur 1 peut être simple ou multiple. Aucune hypothèse n'est faite sur son architecture si ce n'est qu'elle permet d'élaborer un signal indiquant si une lecture de la mémoire correspond au chargement d'une instruction (fetch en langage anglo-saxon) ou d'une donnée. La mémoire 2 doit être considérée au sens général, comme un tableau de registres numériques accessibles par des adresses individuelles, et correspondant soit à des cellules mémoire simples, soit à des cellules mémoire servant d'accès à des périphériques spécialisés. Elle renferme à la fois les données et les codes d'instruction exécutables des programmes applicatifs des différentes tâches. Contrairement à l'habitude, les codes d'instruction exécutables n'y sont pas inscrits en clair sous une forme directement compréhensible par le processeur du calculateur mais sont transcodés à l'aide d'une clef de transcodage spécifique de la tâche à laquelle ils se réfèrent. Bien entendu, ceci n'est vrai que pour les sous-programmes d'instructions qui sont spécifiques d'une tâche particulière. Les séquences d'instructions manipulant le numéro des tâches, les routines de traitement d'interruption et les sousprogrammes d'instructions non liés à une tâche particulière tels que ceux réalisant des fonctions de bibliothèque ne sont pas transcodés en mémoire. On cherchera, d'une manière générale, à minimiser l'espace occupé en mémoire par ces catégories d'instructions non transcodées. Outre le processeur 1 et la mémoire 2, on trouve un circuit d'élaboration du contexte applicatif 3, un circuit de détermination des vecteurs de transcodage inverse 4, un circuit de transcodage inverse 5 et un circuit de vérification de cohérence 6. Le circuit d'élaboration du contexte applicatif 3 réalise le partage du temps de calcul du processeur entre les différentes tâches exécutées simultanément par le calculateur. II comporte, comme cela est bien connu, un circuit d'horloge étalon qui répartit, individuellement entre les différentes tâches, des tranches de temps de calcul du processeur 1 au moyen de commandes d'interruption appliquées au microprocesseur 1 et qui délivre au reste du calculateur un signal identifiant la tâche licitement en cours d'exécution. Un tel dispositif est notamment décrit dans la demande de brevet nO 97 01073. Par ailleurs, pour éviter que les différentes tâches exécutées simultanément par le calculateur ne puissent interférer entre elles, ce partitionnement temporel est complété par un partitionnement spatial plus ou moins fin avec une attribution, aux différentes tâches, de droits distincts d'inscription de données dans la mémoire 2, complétés éventuellement par des droits distincts de lecture de données depuis la mémoire 2 et par des droits distincts d'exécution d'instructions provenant de la mémoire 2. Le circuit de détermination du vecteur de transcodage inverse 4 reçoit un signal de repérage de demande d'instruction de la part du processeur 1, un signal d'appartenance d'une instruction à une tâche spécifique de la part du circuit de vérification de cohérence 6 et un signal d'identification de la tâche licitement en cours d'exécution de la part du circuit d'élaboration du contexte applicatif 3. Le signal de repérage d'une demande d'instruction de la part du processeur 1 et le signal d'appartenance d'une instruction à une tâche spécifique servent à le mettre à zéro en présence de données ou d'instructions localisées en mémoire dans des zones non spécifiques d'une tache tandis que le signal d'identification de la tâche licitement en cours d'exécution sert à lui faire choisir le bon vecteur de transcodage inverse. II peut aussi recevoir, comme représenté, une partie du bus d'adresses dans le cas où l'adresse est utilisée dans la détermination du vecteur de transcodage inverse en liaison avec le signal d'identification de la tâche licitement en cours d'exécution. Bien que les opérations de transcodage et de transcodage inverse puissent être quelconques, on suppose dans la suite, par commodité, qu'elles se ramènent à de simples opérations d'inversion de bits. Les clés de transcodage sont alors des vecteurs d'inversion valables aussi bien pour un transcodage direct que pour un transcodage inverse et le circuit de transcodage inverse 5 se réduit, comme représenté, à un banc de portes logiques de type "ou exclusif" intercalé entre la sortie lecture de la mémoire 2 et le bus de données. Le circuit de transcodage 5 permet. soit la transmission telle quelle d'une donnée ou d'un code d'instruction exécutable non spécifique d'une tâche lorsqu'il reçoit du circuit de détermination des vecteurs de transcodage inverse 4 un vecteur d'inversion nul, soit la transmission avec transcodage inverse d'un code d'instruction exécutable provenant d'une zone mémoire spécifique d'une tâche au moyen du vecteur d'inversion non nul fourni par le circuit de détermination des vecteurs de transcodage inverse 4. Deux situations peuvent se présenter lors de la transmission avec transcodage inverse d'un code d'instruction exécutable, soit le vecteur de transcodage inverse est le bon et le code d'instruction exécutable délivré spécifique d'une tâche a toutes les chance d'être celui prévu à l'origine à l'instant considéré pour la tâche licitement en cours d'exécution, soit le vecteur de transcodage inverse n'est pas le bon et le code d'instruction exécutable spécifique d'une tâche est un code aléatoire qui peut être compris ou non du processeur. La première situation est la plus habituelle. Elle se présente à chaque fois que le processeur exécute licitement une tâche. La deuxième situation est plus exceptionnelle. Elle se présente à chaque fois que le processeur exécute illicitement une tâche par suite d'un dysfonctionnement. Au cours de la deuxième situation, I'aléa introduit par un mauvais transcodage inverse élargit la gamme des instructions que le processeur est susceptible d'exécuter et par conséquent augmente les chances d'une violation du partitionnement temporel et/ou spatial susceptible d'être détectée par le circuit de vérification de cohérence 6. Si le partionnement temporel est surveillé par l'exécution répétitive en fond de tâche, d'un sous-programme de type "watch dog" simple, à fenêtre ou plus sophistiqué tel que le "watch dog" à poursuite décrit dans le brevet français FR 2.687.81 0, il y a de grandes chances que l'aléa introduit par un mauvais transcodage inverse d'une instruction, par suite d'un empiétement d'une tâche sur une autre, donne au processeur un comportement erratique le conduisant rapidement à se perdre dans une boucle de calcul d'où il ne ressort pas. Si le partionnement spatial est également surveillé à l'aide d'une vérification plus ou moins fine des droits d'accès en écriture de données, en lecture de données ou en exécution d'instructions, I'aléa introduit par un mauvais transcodage inverse augmente les chances de violation de droits et donc d'une détection rapide d'un dysfonctionnement. Le circuit de vérification de cohérence 6 assure la surveillance du respect du partionnement entre tâches selon les manières habituelles et également selon de nouvelles manières rendues possibles par l'existence du transcodage des instructions. C'est ainsi qu'il comporte, comme à l'habitude, une table de droits d'accès et un circuit logique de vérification de droits d'accès qui adresse la table de droits d'accès en tenant compte de l'adresse émise par le processeur 1 et de l'identification de la tâche licitement en cours d'exécution délivrée par le circuit d'élaboration du contexte applicatif 3, et qui émet une alarme en cas de violation d'un droit d'accès. S'il y a exécution d'un sousprogramme répétitif de "watch dog",il comporte égaiement un circuit logique de test périodique de l'état du registre mémoire ou des états des registres mémoire modifiés par ledit sous-programme émettant une alarme en cas d'un état inattendu du ou des registres mémoire considérés. En plus de ces circuits habituels, le circuit de vérification de cohérence 6 renferme un circuit logique de vérification d'invariants associés, à l'occasion du transcodage, aux instructions exécutables appartenant à des tâches spécifiques. Deux principes peuvent être utilisés pour réaliser un circuit logique de vérification d'invariants. Si le champ de bits utilisé pour les instructions du processeur 1 dispose d'une capacité de codage en nombre d'instructions supérieure au nombre des instructions comprises par le processeur ou si l'on peut se restreindre à un sous-ensemble du jeu d'instructions du processeur, il est possible de détecter l'apparition d'instructions interdites ou sciemment écartées. Cette approche ne nécessite pas un stockage en mémoire de l'instruction exécutable sous une forme redondante mais présente l'inconvénient d'être spécifique d'un processeur ou d'un sousgroupe d'un jeu d'instructions d'un processeur donné. Elle est susceptible d'une optimisation en attribuant des codes de transcodage de manière qu'un transcodage inverse illicite des instructions les plus utilisées aboutissent de façon très probable à un code d'instruction interdit ou sciemment écarté. Si l'on veut s'affranchir des contraintes précédentes, il est préférable de rendre redondant le code issu des instructions stockées en mémoire par l'ajout d'un champ de bit supplémentaire permettant la vérification d'un invariant conservé par un transcodage inverse licite et altéré de manière très probable par un transcodage inverse illicite. Ce champ de bits supplémentaire ajouté à chaque code d'instruction stocké en mémoire n'est pas affecte par le transcodage qui n'intéresse que le code d'instruction lui-même. Un transcodage inverse licite restitue le code d'instruction exact et sa concordance avec l'invariant qui lui est associé peut être vérifiée. A contrario, un transcodage inverse illicite restitue un code d'instruction erroné sans concordance avec l'invariant qui lui-est associé. Dans le cas considéré précédemment, d'un transcodage par inversions de certains bits, un tel invariant peut être obtenu au moyen soit d'un unique bit de parité soit de plusieurs bits de parité assemblés sous la forme d'un code de Hamming. Si l'invariant est un simple bit de parité, en supposant que les transcodages ont été choisis pour entraîner une inversion de 50% des bits d'un code binaire d'instruction, un transcodage inverse illicite restitue un code binaire d'instruction erroné dont la parité est mauvaise avec une probabilité de 0,5. La probabilité de l'apparition d'un viol de parité croissant de façon exponentielle avec le nombre d'exécutions d'instructions erronées, on se retrouve au bout de l'exécution de 10 instructions erronées, avec une probabilité de non détection inférieure à 1 OEE-3. La figure 2 montre le schéma d'un circuit de vérification de parité qui peut faire partie du circuit de vérification de cohérence 6 dans le cas où l'on adopte comme invariant un seul bit de parité. Ce circuit de vérification de parité se compose d'une porte logique de type "ou exclusif''10 à deux entrées, recevant sur l'une de ses entrées le bit de parité stocké en mémoire, et sur l'autre entrée un signal de parité issu d'un circuit de calcul de parité 11 opérant sur le code d'instruction issu du circuit de transcodage inverse 5. Ce schéma se généralise facilement au cas d'un invariant formé de plusieurs bits de parité assemblés sous la forme d'un code de Hamming en remplaçant d'une part, la porte logique de type "ou exclusif" 10 par un banc de portes logiques de type "ou exclusif" dont les sorties sont réunies par une porte logique de type "ou" et d'autre part, le circuit de calcul de parité 11 par un circuit de codage de Hamming. On remarque de plus que ce circuit de vérification de parité peut fonctionner de façon pipelinée, la latence de la détection d'une éventuelle incohérence n'étant pas critique. Le vecteur d'inversion constituant la clé d'un transcodage inverse est obtenu par une fonction booléenne appliquée au signal d'identification de la tâche licitement en cours d'exécution délivré par le circuit d'élaboration du contexte applicatif 3 et à une partie du signal du bus d'adresses. II est possible de ne pas tenir compte du signal du bus d'adresses dans la détermination des vecteurs d'inversion mais cela a l'inconvénient de rendre la détection de l'exécution d'une tâche illicite soit systématique, soit impossible, tout dépendant de la distance paire ou impaire entre deux codes résultant l'un d'un transcodage inverse licite et l'autre d'un transcodage inverse illicite d'une même instruction. II n'est en effet, pas possible de trouver deux ensembles de n codes avec n supérieur à 2 possédant entre eux une distance toujours impaire. Pour contourner cette limitation, il est préférable de choisir une fonction booléenne de définition des vecteurs d'inversion dans laquelle intervienne en plus du signal d'identification de la tâche licitement en cours d'exécution, une seconde variable de contrôle qui rend la détection de l'exécution illicite d'une tâche par violation de parité mieux répartie entre tous les codes possibles pris deux à deux. Pour cela, il convient de faire entrer un ou plusieurs bits de poids faibles de l'adresse dans le processus de détermination des vecteurs d'inversion. II importe de plus que la prise en compte de l'adresse intervienne différemment selon la tâche licitement exécutée. Une manière de déterminer les vecteurs d'inversion avec des codes d'instructions exécutables par le processeur occupant un champ de N bits et avec un nombre de tâches simultanées inférieur ou égal à N, consiste - à adopter des champs de n bits avec n=log2 N pour le signal d'identification de la tâche licitement en cours d'exécution et pour la partie du signal d'adresse prise en compte, - à calculer la somme i modulo n du champ de n bits c correspondant à la valeur du signal d'identification de la tâche licitement en cours d'exécution et du champ de n bits a correspondant à la partie du signal d'adresse prise en compte i=c+a, - à utiliser la somme i obtenue comme une partie d'un vecteur d'inversion. Cette somme i qui occupe un champ de n bits peut être complétée ou non dans le vecteur d'inversion par une partie complémentaire occupant un champ de N-n bits tirée d'une table adressée à l'aide du signal d'identification de la tâche licitement en cours d'exécution. Si le nombre C de tâches simultanées est supérieur à N (log2 C > log2 N), on peut procéder d'une manière analogue à la précédente en posant n = partie entière (log2 C + I) En procédant de la sorte, on s'assure que le nombre d'inversions de bits apporté par un transcodage correspondant à une tâche licitement exécutée est indifféremment pair ou impair et qu'un transcodage inverse illicite fournit un résultat dont la parité est une fonction pseudo-aléatoire équirépartie entre les valeurs 0 et 1 quelles que soient les deux tâches considérées. En complétant le code d'inversion par un champ de N-n bits qui dépendent uniquement du signal d'identification de la tâche licitement en cours d'exécution et qui sont choisis, en l'absence de considérations particulières tenant compte du jeu d'instructions du processeur, de manière qu'ils différent entre eux deux à deux du plus grand nombre de bits possibles, ces bits étant répartis de façon homogène, on a l'assurance que tous les champ d'un code d'instruction exécutable sont concernés par le transcodage. Ainsi, une suite d'instructions exécutables issues d'un transcodage inverse illicite a toutes les chances d'avoir les caractéristiques d'un programme parfaitement incohérent. La figure 3 montre le schéma d'un circuit de détermination de vecteurs d'inversion pour transcodage inverse conforme à ce qui vient d'être exposé. On y distingue un additionneur modulo n 30 à deux entrées, une table de compléments de vecteurs d'inversion 31 et un circuit de composition de vecteurs d'inversion 32. L'additionneur modulo n 30 opère sur un champ de n bits, reçoit sur une première entrées le numéro de la tâche licitement en cours d'exécution codé sur n bits et, sur une deuxième entrée, les n bits de poids faibles de l'adresse du code en mémoire appelé par le processeur et délivre un vecteur d'inversion de n bits. La table de compléments de vecteurs d'inversion 31 est adressée par le numéro de la tâche licitement en cours d'exécution et délivre un complément de vecteur d'inversion occupant un champ de Nn bits. Le circuit de composition de vecteurs d'inversion 32 assure la juxtaposition du champ de n bits de la sortie de l'additionneur modulo n 30 et du champ de N-n bits de la sortie lecture de la table de compléments de vecteurs d'inversion 31 pour former un vecteur d'inversion occupant un champ de N bits. II présente en outre des entrées de forçage à zéro du vecteur d'inversion délivré en cas de lecture en mémoire 2 d'une donnée, d'un code binaire d'instruction affecté d'un bit particulier signalant son indépendance vis à vis des tâches ou encore d'un code binaire d'instruction situé dans une zone de la mémoire 2 non spécifique d'une tâche. REVENDICATIONS 1. Procédé de sécurisation d'un calculateur multitâche équipé d'un système de détection de défaillance par partitionnement temporel et/ou spatial qui repère à chaque instant la tâche dont l'exécution est licite, caractérisé en ce qu'il consiste à mémoriser les codes binaires d'instruction exécutables par le processeur unique ou multiple du calculateur sous une forme transcodée réversible fonction de leur tâche d'appartenance et à inverser le transcodage au moment de l'appel pour exécution par le processeur de chaque code binaire exécutable au moyen d'une clef d'inversion de transcodage déterminée en fonction de la tâche dont l'exécution est licite au moment de cet appel. 2. Procédé selon la revendication 1, caractérisé en ce que l'on utilise, pour les codes binaires d'instruction exécutables par le processeur, un champ de bits ayant une capacité de codage supérieure au nombre des instructions autorisées pour le processeur du calculateur et en ce que l'on prévoit dans le système de détection de défaillance un circuit de test de validité des codes binaires d'instruction exécutables appliqués au processeur après transcodage inverse engendrant une alarme à chaque fois qu'un code binaire d'instruction exécutable appliqué au processeur après transcodage inverse ne fait pas partie du jeu des instructions autorisées pour le processeur. 3. Procédé selon la revendication 1, caractérisé en ce que l'on ajoute aux codes binaires d'instruction exécutables par le processeur alors qu'ils sont stockés en mémoire, un champ de bits supplémentaire constituant un invariant perdu lors d'un transcodage et en ce que l'on prévoit dans le système de détection de défaillance un circuit de test de l'invariance du champ de bit supplémentaire engendrant une alarme lorsque le champ de bits supplémentaire associé à un code binaire d'instruction exécutable appliqué au processeur a perdu son invariance à la suite des opérations de transcodage et de transcodage inverse. 4. Procédé selon la revendication 3, caractérisé en ce que ledit champ de bits supplémentaire renferme un bit de parité. 5. Procédé selon la revendication 3, caractérisé en ce que ledit champ de bit supplémentaire renferme plusieurs bits de parité assemblés sous la forme d'un code de Hamming. 6. Procédé selon la revendication 1, caractérisé en ce que les opérations de transcodage et de transcodage inverse sont des opérations d'inversions de bits. 7. Procédé selon la revendication 6, caractérisé en ce que les opérations d'inversions de bits réalisant les transcodages et les transcodages inverses mettent en oeuvre des vecteurs d'inversions de bits définis à la fois en fonction de la tache dont l'exécution est licite à l'instant considéré et d'une partie de poids faibles de l'adresse du code binaire d'instruction en cours de transcodage direct ou inverse. 8. Procédé selon la revendication 7, appliqué à un calculateur dont le processeur admet des codes binaires d'instructions exécutables occupant un champ de N bits et qui exécute simultanément un nombre de tâches au plus égal à N, caractérisé en ce qu'un vecteur d'inversion pour un code binaire exécutable comporte N bits avec une sous-partition de n bits, n étant égal à log2 N, correspondant à la somme modulo n des n bits de plus faibles poids de l'adresse en mémoire du code binaire exécutable considéré et du signal d'identification de la tâche licitement en cours d'exécution exprimé par un nombre binaire occupant un champ de n bits. 9. Procédé selon la revendication 7, appliqué à un calculateur dont le processeur admet des codes binaires d'instruction occupant un champ de N bits et qui exécute simultanément un nombre de tâches C supérieur à N, caractérisé en ce qu'un vecteur d'inversion pour un code binaire exécutable comporte N bits avec une sous-partition de n bits, n étant égal à la partie entière de (log2 C+1), correspondant à la somme modulo n des n bits de plus faibles poids de l'adresse en mémoire du code binaire exécutable considéré et du signal d'identification de la tâche licitement en cours d'exécution exprimé par un nombre binaire occupant un champ de n bits.