Brevet FR2989488A1 — publié le 20131018

Dispositif pour générer une signature à l'exécution d'une tâche de programme et méthode de comparaison de flots d'exécution La présente invention concerne un dispositif pour générer une signature à l'exécution d'une tâche de programme et une méthode de comparaison de flots d'exécution. Elle s'applique notamment à la détection 5 d'erreurs dans l'exécution de programmes d'ordinateurs. Les exécutions de programmes par des systèmes électroniques sur puce peuvent être perturbés par des erreurs matérielles d'usures ou ponctuelles, par exemple des inversions de bits, aussi appelés « bit-flip ». 1 0 Afin de détecter et de localiser ces défaillances, l'exécution d'une tâche peut être dupliquée une ou plusieurs fois sur une ou plusieurs unités d'exécution et leurs résultats comparés pour détecter une incohérence. Des mécanismes de vote majoritaire peuvent également permettre de résister aux erreurs. Par la suite, on appellera « flot d'exécution » une suite de valeurs, 15 comprenant adresses et données, transmise sur un bus reliant une unité de calcul à un module mémoire lors de l'exécution d'une tâche logicielle sur une puce comprenant ladite unité de calcul. On entend par « unité d'exécution » ou « unité de calcul » ou « coeur » un dispositif de calcul permettant d'exécuter des instructions de programmes, par exemple un 20 microprocesseur. Une première technique connue pour dupliquer un flot d'exécution de manière synchrone est celle du « lockstep » en permettant la redondance d'exécution. Cette technique requiert l'utilisation d'une pluralité de processeurs synchronisés à quelques cycles d'intervalle, exécutant 25 parallèlement la même séquence d'instructions et comparant les résultats intermédiaires de l'exécution de toutes ces instructions. Toutefois, cette technique est complexe et coûteuse à mettre en oeuvre notamment à cause de l'emploi de plusieurs processeurs. Selon une autre technique, la duplication peut également se faire 30 de manière asynchrone, en exécutant une tâche plusieurs fois et en comparant les résultats produits par toutes les tâches. Cette technique présuppose un environnement d'exécution où les tâches s'exécutent de manière déterministe et disposent des mêmes entrées. La duplication d'un 2 9894 88 2 flot d'exécution peut être effectuée séquentiellement sur une seule unité d'exécution ou parallèlement sur plusieurs unités d'exécution. La technique de duplication asynchrone permet d'économiser l'emploi d'un processeur en mode « lockstep » en ne dupliquant les flots d'exécution que pour les parties de code critiques où une vérification est nécessaire. Cependant, cette technique ne permet pas de détecter les cas dans lesquels une erreur intermédiaire dans l'exécution n'a pas altéré les résultats. En outre, si le flot d'exécution produit un grand nombre de résultats, le temps de comparaison peut excessivement s'allonger. D'autres techniques visent à calculer une signature numérique à partir des valeurs chargées dans le registre instruction de l'unité de calcul avant décodage de ces valeurs par l'unité d'exécution. Par exemple, dans la méthode proposée dans la demande de brevet internationale publiée sous le numéro W02009152511, des signatures pré calculées sont insérées dans le code par un logiciel de génération de code. Au cours de l'exécution du code, ces signatures pré-calculées sont comparées à des signatures calculées à partir du registre instruction. Cette méthode nécessite donc l'instrumentation du code exécutable généré. Elle permet la détection d'une défaillance dans la séquence d'instructions exécutée, mais ne permet pas d'identifier une erreur sur les données produites ou consommées. Une autre méthode divulguée dans la demande de brevet américain publiée sous le numéro US20070174750 propose d'instrumenter le code pour générer des signatures de blocs de code. Ensuite, à la fin de l'exécution d'un bloc, un registre de signature est mis à jour avec la signature du bloc suivant. Au démarrage de l'exécution du bloc suivant, le registre de signature est comparé avec la signature du bloc. Cette méthode permet la détection de certaines défaillances comme des défauts d'intégrité, mais ne permet pas la comparaison de flots d'exécution. De plus, elle ne permet pas non plus de détecter une erreur dans les flots de données. D'autres méthodes telles que celles divulguées dans les demandes de brevet américains US20020116662 et US20020073357 exploitent des architectures multi-coeurs en dupliquant un processus sur plusieurs coeurs de calcul. A certains points de synchronisation, les signatures sont comparées automatiquement par un mécanisme matériel. Les résultats des processus peuvent alors être validés et écrits en mémoire. Toutefois, ces méthodes nécessitent obligatoirement la duplication du processus sur au moins deux coeurs séparés, ce qui empêche la possibilité de comparer des flots sur une machine comportant une seule unité d'exécution. Un but de l'invention est de proposer une méthode de comparaison des flots d'exécution rapide, requérant peu de mémoire, pouvant tenir compte à la fois des données et des instructions de la tâche exécutée, détectant des erreurs n'ayant entrainé aucune altération dans les 1 0 résultats produits par la tâche exécutée, et pouvant être mise en oeuvre sur un système ne comportant qu'une seule unité de calcul ou plusieurs unités de calcul sans avoir à ajouter de mécanisme de synchronisation spécifique entre les unités de calcul. A cet effet, l'invention a pour objet un dispositif pour générer au moins une signature au cours de l'exécution d'une tâche de 15 programme sur un système de calcul, au moins un flot de valeurs transitant par bus entre une mémoire et une unité de calcul dudit système pendant l'exécution de ladite tâche, le dispositif étant caractérisé en ce qu'il comprend des moyens configurés pour observer au moins plusieurs desdites valeurs au cours de ladite exécution et pour calculer et mémoriser une signature à partir 20 des valeurs observées. Le dispositif selon l'invention permet ainsi de générer une signature de l'exécution d'une tâche. Cette signature peut ensuite servir à vérifier l'intégrité d'une exécution ou à comparer plusieurs exécution de la même tâche, par exemple. Selon un mode de réalisation du dispositif selon l'invention, lesdits 25 moyens comprennent au moins un premier générateur de signature configuré pour observer les valeurs correspondant à des instructions à exécuter sur ladite unité de calcul, et au moins un deuxième générateur de signature configuré pour observer les valeurs correspondant à des données et des adresses de données produites et/ou lues par ladite tâche, chacun 30 desdits générateurs étant apte à calculer et à mémoriser une signature à partir des valeurs qu'il a observées. La séparation des observations en fonction du type de valeur observé permet de générer une signature différente en fonction du type de valeurs observées et ensuite de localiser plus précisément une éventuelle erreur. Selon un mode de réalisation du dispositif selon l'invention, lesdits moyens comprennent au moins un premier générateur de signature configuré pour observer les valeurs transitant lors des accès en lecture à la mémoire et pour ignorer les valeurs transitant lors des accès en écriture, et au moins un deuxième générateur de signature configuré pour observer les valeurs transitant lors des accès en écriture à la mémoire et pour ignorer les valeurs transitant lors des accès en lecture. Selon un mode de réalisation du dispositif selon l'invention, lesdits moyens comprennent au moins un premier générateur de signature configuré pour observer les valeurs correspondant à des adresses de données, et au moins un deuxième générateur de signature configuré pour observer les valeurs correspondant à des données. La tâche peut être exécutée par un système d'exploitation préemptif, le dispositif comprenant des moyens d'activation configurés pour transmettre un signal d'inhibition à au moins un générateur de signature lorsque ladite exécution de tâche est interrompue par ledit système d'exploitation, ledit générateur étant configuré pour ne pas autoriser de modification de la signature mémorisée après avoir reçu ledit signal d'inhibition. Ce mode de réalisation permet ainsi de ne pas modifier la signature en cas d'interruption de la tâche à observer et présente donc notamment l'avantage de pouvoir être mis en oeuvre sur un système de calcul préemptif sans altérer le processus de génération des signatures. Avantageusement, lesdits moyens d'activation sont configurés pour transmettre un signal d'activation au dit générateur de signature lorsque l'exécution de ladite tâche interrompue est reprise, ledit générateur étant configuré pour autoriser la modification de la signature mémorisée après avoir reçu ledit signal d'activation. Ainsi, ce mode de réalisation permet de reprendre le calcul de la signature comme si l'exécution de la tâche n'avait pas été interrompue. Les moyens d'activation peuvent être configurés pour recevoir l'adresse de l'instruction en cours d'exécution, ledit module d'activation étant configuré pour émettre un signal d'inhibition en fonction du résultat d'un test déterminant si ladite adresse est ou non comprise dans une ou plusieurs plages d'adresses prédéfinies. Selon un premier mode de fonctionnement possible, le signal d'inhibition est émis lorsque l'adresse est dans l'une des plages d'adresses prédéfinies. Selon un autre mode de fonctionnement, le signal d'inhibition est émis lorsque l'adresse n'est dans aucune des plages d'adresses prédéfinies. L'invention a également pour objet un système de calcul comprenant le dispositif tel que décrit plus haut pour comparer l'exécution par un système d'exploitation préemptif d'au moins deux tâches de programme dupliquées sur la même unité de calcul ou sur des unités de calculs différentes, les routines d'interruption de tâche du système d'exploitation étant configurées pour sauvegarder dans le contexte de la tâche préemptée la valeur de signature mémorisée par le dispositif. Dans ce cas, les routines de restauration de tâches sont également configurées pour pouvoir relire la valeur de signature sauvegardée dans le contexte. Par exemple, si le dispositif mémorise la valeur de signature dans un registre, alors les routines d'interruption sont configurées pour pouvoir lire ce registre et sauvegarder la valeur de ce registre dans le contexte de la tâche. Cela permet de reprendre l'exécution de la tâche en conservant la valeur de la signature qui avait été calculée. Lorsque des plages d'adresses sont prédéfinies pour l'inhibition d'un générateur de signature, ces plages d'adresses peuvent être avantageusement choisies en fonction de la ou des zones de mémoire dans lesquelles sont enregistrées les routines d'interruptions du système d'exploitation pour que le test d'inclusion d'adresse effectué par le module d'activation entraîne l'émission d'un signal d'inhibition lorsqu'une routine d'interruption est exécutée. Par exemple, si un signal d'inhibition est émis lorsque l'adresse de l'instruction exécutée est incluse dans une plage d'adresses, alors les plages d'adresses sont choisies de manière à inclure la ou les zones de mémoire enregistrant les routines d'interruption. En outre, les routines d'interruption de tâche du système d'exploitation peuvent être configurées pour sauvegarder dans le contexte de la tâche préemptée lesdites plages d'adresses prédéfinies. Ce mode de réalisation permet ainsi de générer des signatures pour des tâches exécutées concurremment, chaque tâche étant par exemple associée à son propre jeu de plages d'adresses. L'invention a également pour objet une méthode de comparaison 35 de flots d'exécution d'instructions sur un système de calcul, la méthode comprenant une première exécution d'une séquence d'instructions sur un jeu de données et au moins une deuxième exécution de ladite séquence d'instructions sur le même jeu de données, chacune desdites exécutions produisant des transmissions de valeurs sur un ou plusieurs bus reliant une mémoire à une unité de calcul du système de calcul, caractérisé en ce que des moyens matériels compris dans le système calculent une première signature qui est fonction de la suite de valeurs transmises lors de la première exécution et une deuxième signature qui est fonction de la suite de valeurs transmises lors de la deuxième exécution, ladite méthode comprenant à des points prédéfinis et identiques de chacune desdites exécutions une étape de comparaison entre lesdites signatures. La méthode de comparaison permet ainsi de détecter une anomalie dans l'exécution de la tâche à différents stades de son exécution. Avantageusement, le calcul de signature est cumulatif, les moyens 15 matériels de calcul de signature déterminant la valeur d'une signature en fonction d'une valeur précédente de ladite signature et de la valeur courante observée transitant sur le bus. Selon une mise en oeuvre de la méthode selon l'invention, chaque signature calculée est mémorisée dans un registre, la méthode comprenant 20 une étape d'initialisation dudit registre à une valeur identique avant chaque exécution de la séquence d'instructions. Lorsque le système de calcul est préemptif, lors de l'exécution d'une tâche sur un processeur de calcul, on peut interdire de modifier la valeur de la signature dès que le processeur passe en mode privilégié. Par 25 exemple, un signal d'inhibition est émis par le processeur vers un générateur de signature. Selon une mise en oeuvre de la méthode selon l'invention, si les signatures comparées ne sont pas identiques, alors on exécute la séquence d'instructions de nouveau sur le même jeu de données, on calcule une 30 nouvelle signature sur ladite nouvelle exécution et on compare ladite nouvelle signature avec les signatures précédentes. Le dispositif selon l'invention permet de vérifier que la ou les unités de calcul exécutent les mêmes instructions sur les mêmes données 35 pour produire les mêmes résultats. Il permet de comparer des flots d'exécution de manière asynchrone, en calculant en continu une signature des flots d'exécution. Parmi les avantages de ce dispositif, on peut noter qu'il n'est pas nécessaire de stocker les résultats issus de chaque exécution, qu'il réduit le temps classiquement requis pour comparer des résultats en comparant seulement des signatures. En outre, les flots d'exécution pour lesquels se sont produites des erreurs intermédiaires n'entraînant pas de différence de résultat produisent néanmoins une signature différente, permettant ainsi la détection de ces erreurs. Un autre avantage du dispositif selon l'invention est que la comparaison étant plus rapide qu'avec les systèmes asynchrones classiques, la comparaison peut être faite plus souvent, permettant de détecter les erreurs plus rapidement et de les localiser. D'autres caractéristiques apparaîtront à la lecture de la description 15 détaillée donnée à titre d'exemple et non limitative qui suit faite en regard de dessins annexés qui représentent : - la figure 1, un mode de réalisation d'un dispositif de comparaison de flots selon l'invention ; - la figure 2, un mode de réalisation d'un générateur de signature 20 compris dans un dispositif selon l'invention ; - la figure 3, un synoptique illustrant une méthode de comparaison de flots d'exécution selon l'invention, - la figure 4, un schéma illustrant des moyens de conversion d'adresse utilisé par le dispositif selon l'invention. 25 La figure 1 présente un mode de réalisation d'un dispositif de comparaison de flots selon l'invention. Le dispositif permet de générer une ou plusieurs signatures à partir de l'exécution d'une tâche de programme. Cette exécution peut être dupliquée sur une autre unité de calcul ou 30 séquentiellement sur la même unité de calcul, de sorte que les signatures générées lors de ces exécutions puissent être comparées afin de détecter une éventuelle anomalie d'exécution. Les données fournies en entrée de la tâche ainsi que les environnements d'exécutions doivent généralement être les mêmes pour chaque duplication pour que l'exécution soit déterministe. 2 9894 88 8 Le dispositif 100 comprend une ou plusieurs unités de calcul 101 reliées par bus à un ou plusieurs modules de mémoire 121 afin d'exécuter les instructions d'une tâche de programme. Il comprend également des moyens pour générer des signatures numériques en fonction des 5 informations transitant entre la mémoire 121 et les unités de calcul. Dans l'exemple de la figure 1, le dispositif 100 comprend une seule unité de calcul, laquelle est un microprocesseur 101, un seul module mémoire 121 et un seul bus système transportant trois types de flots d'exécution 111, 112, 113. Un premier flot 111, appelé « flot instructions » 111 comprend les 10 instructions transportées entre le module mémoire 121 et le microprocesseur 101. Un deuxième flot de « données produites » 112 comprend les données transmises du microprocesseur 101 vers le module mémoire 121 et un troisième flot 113 de « données consommées » comprend les données transmises du module mémoire 121 vers le microprocesseur 101. Les deuxième et troisième flots 112, 113 correspondent respectivement aux données produites par le programme en cours d'exécution et les données consommées par ce même programme. Physiquement, ces flots peuvent être multiplexés sur un ou plusieurs bus. Le dispositif selon l'invention comprend en outre des moyens 131, 132, 133, 134, 135 configurés pour observer un flot d'exécution et générer une signature à partir des observations de ce flot, étant entendu qu'une signature peut être considérée comme un nombre dont la valeur dépend des valeurs observées dans ce flot d'exécution. La signature caractérise donc la suite de valeurs observées dans le flot d'exécution. Dans l'exemple, un premier générateur 131 de signature est associé au flot d'instructions 111, un deuxième générateur 132 et un troisième générateur 133 sont associés au flot de données produites 112, un quatrième générateur 134 et un cinquième générateur 135 sont associés au flot de données consommées 113. Les deuxième et quatrième générateurs 132, 134 permettent de générer chacun une signature à partir des adresses transportées dans les flots de données 112, 113 et les troisième et cinquième générateurs 133, 135 permettent de générer chacun une signature à partir des valeurs des données transportées dans les flots de données 112, 113. L'emploi de deux générateurs de signature pour chaque flot de données permet de générer, d'une part, des signatures propres aux 2 9894 88 9 adresses, et d'autre part des signatures propres aux données elles-mêmes. Cette distinction permet de localiser d'éventuelles défaillances avec une plus grande précision - autrement dit elle permet de déterminer si une défaillance provient d'une erreur dans l'adressage ou d'une erreur dans les 5 données. Selon un autre mode de réalisation du dispositif selon l'invention, un nombre inférieur de générateurs de signature est utilisé. Par exemple, un générateur de signature commun à l'adressage et aux données est utilisé pour chacun des flots de données 112, 113, voire un seul générateur de 10 signature peut être employé conjointement pour les trois flots 111, 112, 113. Selon encore un autre mode de réalisation, un nombre plus élevé de générateurs de signature est employé, afin d'affiner la détection de défaillances. Selon encore un autre mode de réalisation, un ou plusieurs flots ne sont pas surveillés : par exemple, le flot des instructions n'est pas 15 surveillé. Un générateur est une partie d'un système sur puce (parfois désigné par le sigle anglo-saxon SoC pour « System on Chip »), par exemple un circuit de type ASIC (Application Specific Integrated Circuit) ou FPGA (Field-Programmable Gate Array) connecté sur un bus, et dont la circuiterie 20 est configurée pour recevoir les valeurs transportées par le bus et de générer une signature à partir de ces valeurs. Avantageusement, les générateurs sont configurés pour que les signatures générées lors de différentes exécutions du même programme soient identiques, uniquement lorsque les données et les instructions sont 25 observées par les générateurs dans le même ordre. Aussi, préférentiellement, les valeurs du flot instructions 111 sont observées de manière à éviter de subir des accès non déterministes en mémoire, notamment à cause des mécanismes de cache. Par exemple, les valeurs transitant sur ce flot 111 sont capturées en entrée du registre instruction. 30 De même, les flots de données 112, 113 sont observés entre le microprocesseur 101 et le module mémoire 121, de manière à éviter que les mécanismes de caches et de mémoire tampon pouvant être présents dans le module mémoire 121 ne modifie la séquence des accès initiés par le microprocesseur 101. Ainsi, l'ordre des données observées qui sont 35 produites et consommées par le programme est invariable d'une exécution 2 9894 88 10 du programme à l'autre. Ce mode de réalisation permet de détecter les erreurs d'inversion. Selon un deuxième mode de réalisation, les générateurs de signature sont configurés pour être insensible à l'ordre dans lequel sont 5 reçues les valeurs du flot de données. Dans ce cas, le calcul des signatures est commutatif. Ce deuxième mode de réalisation peut être employé lorsqu'aucun moyen ne permet de préserver un ordre identique des valeurs transmises dans le flot de données. Selon d'autres modes de réalisation possibles, le dispositif 10 comprend plusieurs unités de calcul, modules mémoires et bus. Le dispositif peut se conformer aux architectures d'ordinateur de type Von Neumann, dans lesquelles les instructions d'un programme sont enregistrées et transportées sur des supports communs à ceux correspondant aux données de ce programme, ou aux architectures de type Harvard, dans lesquelles les 15 instructions et les données sont séparées. La figure 2 présente un mode de réalisation d'un générateur de signature compris dans un dispositif selon l'invention. Plusieurs mises en oeuvre sont possibles selon les fonctionnalités offertes par l'unité de calcul 20 utilisée pour exécuter la tâche de programme. Ainsi, le dispositif peut par exemple mettre en oeuvre des moyens spécifiques pour désactiver le générateur 220 de signature lorsque l'unité de calcul entre dans un mode particulier (les processeurs offrent généralement un mode utilisateur et un mode privilégié). 25 Selon un premier mode de réalisation du dispositif selon l'invention, la désactivation du générateur est assurée directement par les processeurs, lesquels sont configurés pour transmettre directement un signal d'inhibition au générateur 220 de signature lorsqu'ils passent en mode privilégié (parfois aussi appelé mode superviseur ou « kernel mode » selon la 30 terminologie anglo-saxonne). Lorsque la tâche est préemptée ou lorsqu'une interruption est activée, le processeur passe automatiquement en mode privilégié et émet un signal d'inhibition, de manière à figer la signature produite par le générateur 220. Le générateur 220 de signature de la figure 2, qui peut par 35 exemple être l'un des générateurs 131, 132, 133, 134, 135 de la figure 1, peut être commandé par un module d'activation 210. Ce module d'activation 210 permet de désactiver et d'activer le générateur 220 en fonction, par exemple, d'une adresse 211 qui lui est fournie en entrée. Le générateur 220 permet de déterminer une signature en fonction au moins d'une valeur 221 qui lui est fournie en entrée, cette valeur pouvant être une donnée ou une adresse, par exemple. Le générateur 220 comprend des moyens de mémorisation 224 d'une signature, par exemple un registre 224. Avantageusement, le calcul de la signature est cumulatif ; autrement dit, celui-ci est effectué en fonction de la valeur précédente de la signature, de sorte qu'une signature est calculée à la fois en fonction de la valeur 221 d'entrée et en fonction de la valeur de signature courante. Un calcul de type contrôle de redondance cyclique, plus communément désigné par le sigle CRC, peut être effectué pour générer une signature. Ainsi, la valeur de la signature mémorisée par le registre 224 est mise à jour à chaque nouvelle valeur 221 issue du flot observé. Dans l'exemple, le module d'activation 210 comprend des premiers moyens de mémorisation 214 et des deuxièmes moyens de mémorisation 215, par exemple des registres 214, 215, afin d'enregistrer une plage d'adresses. La borne haute de la plage est enregistrée par le premier registre 214 et la borne basse de la plage est enregistrée par le deuxième registre 215. L'adresse 211 qu'il reçoit en entrée est l'adresse de la donnée ou de l'instruction qui est transportée dans le flot d'exécution. Selon un premier mode de fonctionnement possible du module d'activation 210, la plage d'adresses est considérée comme une plage d'adresses interdites. Lorsque l'adresse 211 fournie en entrée du module d'activation 210 est comprise dans la plage d'adresses enregistrée par les registres 214, 215, alors le module d'activation 210 transmet un signal d'inhibition 212 au générateur 220. Sur réception de ce signal d'inhibition 212, le générateur 220 passe dans un mode dans lequel il ne modifie pas la signature enregistrée par son registre 224. La valeur de signature est donc figée tant qu'un signal d'activation n'est pas transmis au générateur 220. Lorsque l'adresse 211 fournie en entrée du module d'activation 210 est exclue de la plage d'adresses enregistrée par les registres 214, 215, alors le module d'activation 210 transmet un signal d'activation 213 au générateur 220 et la signature peut de nouveau être modifiée. Avantageusement, le registre 224 d'enregistrement de la signature est accessible en lecture et en écriture par l'unité de calcul. L'accès en lecture permet de sauvegarder la valeur de la signature en cas, par exemple, de préemption de la tâche par le système d'exploitation. L'accès en écriture au registre permet de réécrire la valeur sauvegardée de la signature, notamment en cas de reprise de l'exécution d'une tâche interrompue. Selon un mode de réalisation, le registre 224 peut également être réinitialisé par un signal issu d'une unité d'exécution. Afin de permettre au dispositif selon l'invention de fonctionner dans un environnement préemptif, le registre 224 de mémorisation de la signature fait partie du contexte d'exécution d'une tâche. Pour cela, la routine d'interruption exécutée lors de la préemption d'une tâche est modifiée pour inclure une sauvegarde de ce registre 224. La routine de restauration d'une tâche est également exécutée. Le registre 224 est donc accessible par le programme et peut être sauvegardé et restauré par le système d'exploitation, notamment en cas de préemption de la tâche de ce programme. L'exécution de ces routines d'interruption et de restauration ne doivent pas elles-mêmes modifier la valeur de la signature enregistrée, avant d'avoir sauvegardé cette signature dans le cas d'une interruption, ou après l'avoir restauré dans le cas d'une restauration de tâche. Pour cela, les plages d'adresses du module d'activation sont configurées pour inhiber le générateur de signature lorsque ces routines sont exécutées (par exemple, les routines sont placées dans une zone mémoire incluse dans la zone d'inhibition du générateur). Plus généralement, le code et les données du système d'exploitation sont agencées de manière à ce que l'exécution du système d'exploitation ne modifie pas la valeur du registre de signature, au moins entre les moments où la tâche est exécutée et celui où le registre de signature est lu/restauré. Optionnellement, les routines d'interruption et de restauration de tâche du système d'exploitation sont configurées pour que les registres 214, 215 de mémorisation des plages d'adresses soient également sauvegardés dans le contexte de la tâche préemptée. Placer le code et les données d'une application de manière contiguë dans la mémoire n'est pas aisé, notamment à cause de la présence de bibliothèques de fonctions partagées. Aussi, le fait de considérer une 35 plage d'adresses d'inhibition plutôt qu'une plage d'adresses d'activation permet d'éviter de devoir placer le code et les données d'une application dans cette plage. En outre, afin que l'exécution du système d'exploitation ne modifie pas la valeur de la signature enregistrée par le registre 224, le code et les données du système d'exploitation sont avantageusement placés dans la plage d'adresse spécifiée par les registres 214, 215, placer le code et les données de gestion des interruptions du système d'exploitation de sauvegarde de contexte de manière contiguë étant relativement aisé. De plus, les registres 214, 215 sont paramétrés à l'initialisation, sans qu'il soit besoin de les remodifier par la suite. Selon un autre mode de réalisation du module d'activation 210, la plage d'adresses enregistrée par le module d'activation est considérée comme une plage d'adresses autorisées, définissant ainsi une fenêtre d'observation de la mémoire. En d'autres termes, un signal d'activation 213 est transmis au module de calcul 220 lorsque l'adresse 211 fournie en entrée du module d'activation 210 est comprise dans la plage d'adresses et un signal d'inhibition 212 lui est transmis lorsque ladite adresse 211 est exclue de cette même plage. Ainsi le générateur de signature peut être activé que pour certaines tâches nécessitant une duplication de sûreté. Selon un mode de réalisation du module d'activation, celui-ci comprend, au lieu d'une seule paire de registres 214, 215, une pluralité de paires de registres afin de définir une pluralité de plages d'adresses d'activation ou de désactivation. Par exemple, plusieurs plages d'adresses interdites sont définies de sorte que si l'adresse 211 fournie en entrée est comprise dans l'une de ces plages, alors un signal d'inhibition 212 est émis. Avantageusement, seuls deux modules d'activation 210 sont employés pour commander les générateurs de signature d'un dispositif selon l'invention, un premier étant dédié à la commande d'un générateur de signature lié au flot d'instructions 111 (cf. figure 1), et un second étant dédié conjointement aux commandes des générateurs de signature liés aux flots de données en lecture et en écriture 112, 113. Selon un autre mode de réalisation, un seul module d'activation 210 commun aux flots de données 112, 113 et au flot d'instructions 111 est utilisé. Dans ce cas, le module d'activation 210 effectue des comparaisons sur les adresses des instructions et préférentiellement, des moyens sont mis en oeuvre pour tenir compte du décalage entre le trafic sur les flots de données et celui sur le flot d'instructions, ce décalage étant dû en particulier au temps de traitement par le processeur (pipeline par exemple). Selon un encore autre mode de réalisation, un module d'activation 210 différent est utilisé pour commander chaque module de calcul de 5 signature. La figure 3 illustre par un synoptique une méthode de comparaison de flots d'exécution selon l'invention. Afin de détecter une erreur lors de l'exécution d'une tâche de programme, cette tâche est 10 exécutée au moins deux fois, en parallèle sur des unités de calcul distinctes, ou de manière séquentielle. La duplication de l'exécution de manière séquentielle peut être effectuée soit sur la même unité de calcul, soit sur une unité de calcul distincte. Dans un premier temps 301, pour chaque instance de la tâche 15 dupliquée, les plages d'adresses du ou des modules d'activation 210 (cf. figure 2) sont initialisées, de manière à éviter la modification de la signature lors des accès mémoire effectués par le système d'exploitation. Dans l'exemple de la figure 2, les registres 214, 215 sont paramétrés. Dans un deuxième temps 302, les registres de mémorisation des 20 signatures sont initialisés à une même valeur. La valeur d'initialisation de la signature est la même pour chaque instance d'exécution de manière à ce que le mode de calcul de type cumulatif n'engendre pas des signatures différentes pour plusieurs séquences d'instructions identiques. Dans un troisième temps 303, la tâche est exécutée pour chaque 25 instance dupliquée. La signature est alors modifiée au cours de la transmission des flots d'adresses et de données entre le ou les modules mémoires et le ou les unités de calcul. Dans un quatrième temps 304, à l'issue de l'exécution de chaque instance de la tâche dupliquée, les valeurs des différentes signatures 30 obtenues sont lues et comparées entre elles. Les signatures sont par exemple comparées par une routine du système d'exploitation à la fin de l'exécution des tâches de programme. Selon une autre mise en oeuvre de la méthode selon l'invention, la comparaison des signatures est effectuée à des étapes intermédiaires de 35 l'exécution pour permettre une détection d'erreur au plus tôt. Par exemple, des points de vérification intermédiaires sont définis pour mémoriser plusieurs signatures intermédiaires, ces signatures intermédiaires étant alors comparées deux à deux après l'exécution des tâches dupliquées ou au fur et à mesure de leur exécution. Il est ainsi possible de localiser plus précisément une erreur d'exécution. Si au moins parmi toutes les signatures obtenues, au moins une valeur de signature est différente de celles des autres, alors cela indique une erreur dans l'exécution d'une instance de la tâche. Dans le cas où seulement deux instances sont exécutées et que les deux signatures obtenues ne seraient pas identiques, alors une troisième instance d'exécution de la même tâche peut être créée. Un algorithme d'analyse de défaillance, connue de l'homme de l'art peut ensuite être employé pour localiser la faute ayant entraîné cette défaillance. En cas de défaillance d'une unité de calcul ayant exécuté l'une 15 des instances de la tâche, le système peut déterminer l'origine de la faute et tenter une stratégie alternative. En cas de faute, le dispositif selon l'invention permet de déterminer l'origine de la faute. Ainsi, la faute peut être due à un défaut dans l'intégrité du code exécuté. Ce type de défaut peut être provoqué par 20 exemple par une défaillance du mécanisme matériel d'élaboration de l'adresse instruction : ainsi un saut peut être le résultat de spéculations complexes lors de branchements dans le flot d'exécution. La faute peut également être due à une défaillance définitive ou temporaire dans l'unité d'exécution. Dans ce cas, l'accès aux données ou la production de données 25 par l'unité d'exécution est altérée. La faute peut également être due aux instructions ou aux données qui ne sont pas les mêmes en entrée de l'unité d'exécution, à cause par exemple d'une défaillance logicielle ou matérielle dans le mécanisme de duplication. Comme il a été déjà observé en regard de la figure 3, le dispositif 30 est optionnellement configuré pour prendre en compte la préemption de tâches, c'est-à-dire l'exécution en temps partagé de plusieurs travaux simultanément sur un même coeur, pour permettre de faire le calcul de signatures sur plusieurs travaux s'exécutant en parallèle sur un même coeur. Un flot d'exécution peut donc optionnellement être interrompu ou préempté. 35 Les valeurs des registres du générateur de signature ainsi que des modules d'activation sont sauvegardés avec le contexte d'exécution de la tâche, de sorte qu'avant de reprendre l'exécution de la tâche, les registres de signatures sont rechargés avec les valeurs qui ont été préalablement sauvegardées dans le contexte. Les plages d'adresses 214, 215 du module d'activation 210 sont configurées pour que toutes ces opérations de sauvegarde et de rechargement de contexte ne modifient pas la valeur de la signature. La figure 4 illustre par un schéma des moyens de conversion d'adresse utilisé par le dispositif selon l'invention. Pour qu'un générateur puisse accéder aux données via les mêmes adresses et dans le même ordre quelles que soient les instances d'exécution des tâches, le dispositif selon l'invention met en oeuvre des moyens de conversion d'adresse. Ces moyens de conversion d'adresse peuvent être intégrés à l'unité de calcul du dispositif et peuvent prendre la forme, par exemple de tables de translation (TLB) permettant de convertir des adresses dites logiques (ou virtuelles) en adresses dites physiques. Dans l'exemple de la figure 4, deux unités de calcul manipulent des adresses logiques. Un décodeur d'adresse 420 active le bloc de mémoire physique correspondant à l'adresse logique spécifiée. Plusieurs blocs physiques peuvent partager une même zone logique, l'arbitrage entre ces blocs physiques étant effectué par le décodeur d'adresse 420 en fonction d'un état contrôlé, par exemple, par l'application exécutant la tâche. La première unité de calcul 401 exécute une séquence d'instructions à partir du code et des données contenues dans de premiers blocs de mémoire physique 431, 432, en manipulant des adresses logiques comprises dans des zones 421, 422. La deuxième unité de calcul 402 exécute une séquence d'instructions à partir du code et des données contenues dans de deuxièmes blocs de mémoire physique 441, 442, en manipulant des adresses logiques comprises dans les mêmes zones 421, 422. Ainsi les unités de calcul 401, 402 voient des zones de mémoire physiques 431, 432, 441, 442 différentes à travers les mêmes zones d'adressage logique 421, 422. Aussi, les registres des modules d'activation 210 (cf. figure 2) définissant les plages d'adresses d'activation ou d'inhibition sont, de préférence, initialisés avec les adresses de début et de fin des zones d'adressage logique 421, 422. Ainsi, grâce à cet adressage logique, un générateur de signature observe, pour chaque instance de tâche, le même flot de valeurs et produit 5 par conséquent la même signature lorsqu'aucune défaillance n'intervient. Pour les duplications de flots d'exécution sur des unités de calcul distinctes, l'adressage logique peut être mis en oeuvre, par exemple, en ajoutant une porte logique « not » sur le bit de poids fort du bus d'adresse lié à l'une des unités de calcul. L'espace de mémoire physique est ainsi partitionné en deux 10 parties correspondant chacune à une unité de calcul. Le dispositif selon l'invention peut notamment être utilisé pour assurer la sûreté de fonctionnement d'une application, la duplication de l'exécution de certaines tâches permettant la détection de fautes et la mise en oeuvre d'algorithmes de tolérance aux fautes. 15 Un exemple d'utilisation du dispositif selon l'invention est maintenant présenté. Un système de calcul doit exécuter cinq tâches notées T1, T2, T3, T4, T5. La tâche T1 requiert 10% de la capacité de calcul du système, la tâche T2 requiert 20%, la tâche T3 requiert 30%, la tâche T4 requiert 40%, la tâche T5 requiert 50%. Les tâches T1 et T2 sont 20 considérées comme critiques au sens où une erreur lors de leur exécution doit impérativement être détectée. Il est impossible d'exécuter toutes les tâches sur deux coeurs de calcul configurés en lockstep, puisque la somme de ressources de calcul requises est de 10+20+30+40+50=150% des ressources disponibles du système. 25 A contrario, le dispositif selon l'invention peut exploiter avantageusement deux coeurs de calcul qui ne sont pas configurés en lockstep, un premier coeur exécutant les tâches T1, T2, T3, T4 et un deuxième coeur exécutant les tâches T1 (duplication), T2 (duplication), et T5. Le premier coeur est donc mobilisé à 100% et le deuxième coeur est mobilisé 30 à 80%. Grâce au dispositif selon l'invention, toutes les tâches peuvent être exécutées, les tâches T1 et T2 peuvent être dupliquées pour assurer une sûreté de fonctionnement et 20% des ressources d'un coeur demeurent disponibles pour l'exécution d'autres tâches. Un avantage du dispositif selon l'invention est sa simplicité de 35 réalisation. Il peut être mis en oeuvre sur des systèmes n'étant pas initialement conçus pour la sûreté d'exécution. Le dispositif est adaptable à la plupart des systèmes. La duplication des flots d'exécution peut être effectuée séquentiellement par un même processeur ou de manière asynchrone sur plusieurs processeurs. Les processeurs doivent cependant supporter le même jeu d'instruction. Contrairement à la technique connue de lockstep, le dispositif selon l'invention permet, si nécessaire, de réserver la duplication aux seules tâches considérées comme critiques et ainsi de bénéficier des performances offertes par l'architecture du système de calcul - par exemple du multi coeurs - pour l'exécution des autres tâches de programme. Le dispositif selon l'invention permet également la comparaison des signatures à des instants intermédiaires dans le flot d'exécution. Par ailleurs, le dispositif selon l'invention ne requiert aucune duplication de l'espace de stockage des résultats de la tâche dupliquée, puisqu'il ne requiert pas la comparaison de ces résultats. Un seul espace de stockage est nécessaire et les seules signatures sont comparées, ce qui permet de réaliser un gain en mémoire.