Brevet FR2929422A1 — publié le 20091002

Domaine de l'invention La présente invention concerne un procédé de traitement d'erreur dans un système de calculateur comportant deux unités de calculateur, selon lequel les deux unités de calculateur exécutent un programme identique avec décalage dans le temps et on compare entre eux les signaux des unités de calculateur. L'invention concerne également un dispositif pour la mise en oeuvre du procédé. Les composants semi-conducteurs complexes tels que les microprocesseurs deviennent de plus en plus puissants pour un encombrement pratiquement identique. Pour déceler les défauts de circuits dans l'unité de calcul d'un système de microprocesseur, il est connu de faire traiter les mêmes ordres de manière synchrone par deux unités de calcul. Les signaux d'entrée et de sortie des deux unités de calcul sont comparés par une unité de comparaison. Lorsque l'unité de comparaison constate une différence entre les signaux d'entrée et de sortie des deux unités de calcul, un signal d'erreur est généré qui déclenche une réaction d'erreur ; celle-ci entraîne le cas échéant l'arrêt du système de microcalculateur. Pour minimiser l'erreur de cause commune, c'est-à-dire des erreurs produites simultanément sur les deux unités de calcul, celles-ci traitent les mêmes ordres de manière décalée. Une unité de calcul traite les ordres en retard par rapport à l'autre unité de calcul. La comparaison se fait lorsque l'unité de calcul qui travaille en retard a exécuté les instructions alors que la première unité de calcul a déjà terminé son traitement. La première unité de calcul est ainsi conçue comme unité de calcul maître qui génère les signaux correspondants pour un système de bus. La seconde unité de calcul qui fonctionne comme � contrôleur � sert uniquement à vérifier l'unité de calcul maître. Du fait du décalage dans le temps, la seconde unité de calcul n'a pas de liaison directe avec le bus du système. Les signaux générés par la seconde unité de calcul servent uniquement à la comparaison mais ne sont pas transmis à des mémoires périphériques et à des unités du système de microprocesseur. But de l'invention La présente invention a pour but de développer un procédé et un dispositif permettant de traiter les erreurs dans un système de calculateur comportant deux unités de calcul, permettant de reconnaître les erreurs du système de calculateur de façon fiable malgré le traitement décalé dans le temps par les deux unités de calcul. Exposé et avantages de l'invention A cet effet, l'invention concerne un procédé du type défini ci-dessus, caractérisé en ce que pour une partie de programme à exécuter par l'une des unités de calcul, on détermine une plage d'adresses définie du système de calculateur, et on reconnaît une erreur si les unités de calcul accèdent à une adresse située en dehors de la plage d'adresses définie pendant le traitement de la partie de programme. L'avantage de l'invention réside dans le fait que pour des systèmes de calculateur à deux unités de calcul travaillant de façon décalée dans le temps, on pourra encore arrêter le signal défectueux lorsque l'unité de comparaison aura reconnu l'erreur. Cette unité de comparaison effectuera toujours la comparaison une fois que les deux unités de calcul auront traité les mêmes opérations de calcul. Cela signifie que l'unité de comparaison attend toujours le traitement des opérations par l'unité de calcul fonctionnant comme contrôleur. Pour éviter le déclenchement de variations d'état dans les unités périphériques et les mémoires, par les opérations défectueuses liées au traitement dans l'unité de calcul maître, avant une comparaison entre les signaux des deux unités de calcul, la partie de programme exécutée par l'une des unités de calcul définit une plage d'adresses déterminée du système de calculateur. On reconnaît une erreur, comme indiqué ci-dessus, si les unités de calcul accèdent à une adresse en dehors de la plage d'adresses définie au cours du traitement de la partie de programme. Cela permet de découvrir de façon très anticipée une erreur en fonction de la comparaison effectuée par l'unité de comparaison. Lorsqu'on constate un accès à une adresse extérieure à la plage des adresses définie, le déroulement du programme sera interrompu dans l'unité de calcul en exécutant par exemple une interruption. Cela garantit que le signal défectueux ne sera pas transmis au système de bus et de celui-ci vers les unités périphériques et des mémoires. Les erreurs qui se produisent dans une plage d'adresses définie peuvent ensuite être constatées par une unité de comparaison. Pour cela, on enregistre en mémoire chaque adresse comparée par chaque unité de calcul. Lorsqu'une erreur est affichée, en cas de différence dans les signaux comparés des unités de calcul, les adresses enregistrées en mémoire seront exploitées pour l'analyse d'erreur et une routine de traitement d'erreur sera lancée. Cela permet d'avoir une information significativement meilleure de l'état de l'ensemble du système de calculateur car on peut supposer qu'un accès de changement d'état, entaché d'erreurs ne concerne que la plage d'adresses définie qui a été libérée pour la partie de programme à exécuter. Un accès modifié en l'état dans d'autres plages d'adresses est de ce fait exclu. Selon un développement, on mémorise les signaux de sortie émis par l'unité de calcul fonctionnant comme unité de calcul maître, et dans le cas de l'erreur constatée par la comparaison des signaux des deux unités de calcul, sur le fondement des signaux de sortie mémorisés, on exécute une identification ou localisation d'erreur et on lance une routine de traitement d'erreur. Comme unité de calcul maître, on utilise l'unité de calcul qui travaille en synchronisme avec l'ensemble du système de calculateur et dont les signaux de sortie permettent des accès avec changement d'état aux unités périphériques et aux mémoires. En établissant le protocole des adresses cibles effectivement utilisées pour les accès modifiant l'état, et qui sont dans la majorité des cas des accès d'écriture, on pourra ensuite identifier une information potentiellement erronée. Cette identification du lieu de l'erreur peut être faite pour chaque erreur de l'unité de calcul maître. Partant de cette analyse d'erreur, par identification de l'erreur, on pourra appliquer une stratégie de traitement ciblé de l'erreur. Le traitement d'erreur se fait de préférence par un programme de rétablissement encore appelé routine de récupération. Cette routine de récupération permet de rejeter les valeurs erronées et de réinitialiser. Mais il est également possible d'avoir des emplacements de mémoire pour lesquels une routine de récupération n'est possible qu'avec une mise en oeuvre de moyens importants. C'est pourquoi, en complément, dans le système de calculateur, pour au moins une plage de mémoire prédéfinie, on fixe une routine de récupération standard. De plus, pour la plage de mémoire prédéfinie, on pourra indiquer les propriétés correspondantes de récupération. Selon un développement, au moins une unité périphérique ou mémoire périphérique du système de calculateur, mémorise au moins une dernière opération de changement d'état de l'unité de calcul maître, et elle exécute la dernière opération de changement d'état qu'après un temps prédéfini ou après une opération suivante de changement d'état. Cela a également l'avantage de permettre de corriger une erreur signalée par l'unité de comparaison. Pour l'affichage de l'erreur, par suite de la comparaison des signaux des unités de calcul, la dernière opération de changement d'état sera reprise avant que cette dernière opération ne soit exécutée. On obtient le rétablissement de l'état du système de calculateur par une routine de récupération appropriée et par l'enregistrement en mémoire centrale des adresses concernées par une erreur. Ces mesures de respect de l'ordre des accès à la ligne de données n'entraînent pas de retard. Selon un autre développement de l'invention, dans un procédé de traitement d'erreur dans un système de calculateur à deux unités de calcul qui traite de façon décalée dans le temps un programme identique et auquel les signaux des unités de calcul sont comparés et en cas de différence des signaux, une erreur sera affichée, les signaux émis par l'unité de calcul fonctionnant comme unité maître ne seront pas exécutés avant que les signaux de l'autre unité de calcul ne soient disponibles pour la comparaison. Dans le cas d'un accès en écriture, les signaux de l'unité de calcul maître seront mémorisés jusqu'à ce que les signaux de l'autre unité de calcul soient disponibles pour une comparaison. Si la comparaison échoue, les données ne seront pas inscrites et un signal d'erreur sera émis. De façon avantageuse, l'unité de calcul maître est retenue dans l'exécution des opérations jusqu'à ce que l'on dispose des signaux de l'autre unité de calcul et jusqu'à la fin de la comparaison des signaux de sortie. En variante, les opérations de l'unité de calcul maître seront mémorisées dans un ordre chronologique jusqu'à ce que les signaux de l'autre unité de calcul soient disponibles et que la comparaison des signaux soit effectuée. Pour ne pas modifier l'ordre des accès à la ligne de données, on retarde les accès en lecture qui suivent chronologiquement les opérations d'écriture, jusqu'à ce que les opérations d'écriture précédentes soient comparées. Cela signifie qu'en cas d'opération de lecture suivant directement une opération d'écriture, l'unité de calcul maître sera retenue jusqu'à ce que l'opération d'écriture précédente ait subi la comparaison. L'autre unité de calcul doit dans ce cas être également retenue pendant une durée correspondante après la fin de l'opération de comparaison, pour que les deux unités de calcul conservent le décalage dans le temps pour l'exécution des ordres suivants. De manière avantageuse, on distingue entre les accès en lecture à une mémoire et l'accès en lecture à une unité périphérique. Lorsqu'il y a des accès en lecture à une mémoire, on peut effectuer les opérations de lecture qui font suite à un accès en écriture avant les opérations d'écriture enregistrées en mémoire intermédiaire, car un accès en écriture à une donnée dans une mémoire, ne produit pas une modification d'état des autres données dans la mémoire. Ce n'est que si on accède précisément à la même adresse en lecture qu'il faut une temporisation. L'avantage est la suppression des retards par les moyens mis en oeuvre pour respecter l'ordre des accès à la ligne de données lors des accès à une mémoire. Dans le cas d'un dispositif de traitement d'erreur dans un système de calculateur composé de deux unités de calcul fonctionnant de manière décalée dans le temps et dont les signaux sont surveillés par une unité de comparaison, et transmis par une ligne de données à une unité périphérique et/ ou à une mémoire, pour exécuter le procédé selon l'invention, chaque unité de calcul est reliée à une unité d'adresse d'accès qui vérifie les signaux d'adresses et déclenche un traitement d'erreur en cas de signal d'adresse non autorisé. L'unité d'adresses d'accès permet de surveiller les opérations produisant des changements d'état tels que les accès en lecture et en écriture par les unités de calcul. Comme seule l'unité de calcul maître fonctionne en synchronisme dans le temps avec le système de calculateur, les accès aux unités périphériques et aux mémoires ne seront initiés que par cette unité de calcul. L'unité d'adresses d'accès est programmée pour que l'unité de calcul respective ne puisse écrire et lire que certaines parties de l'espace des adresses. Des accès en lecture et en écriture non autorisés sont interdits et génèrent un signal d'erreur. Pour traiter les accès des unités de calcul à la ligne de données, l'unité d'adresses d'accès fait partie d'une interface de ligne de données, et elle relie l'unité de calcul à l'unité de comparaison. De cette manière, l'unité de comparaison permet de comparer précisément les opérations avec changement d'état prévues pour l'émission par la ligne de données vers les unités périphériques et les mémoires. De plus, l'unité d'adresses d'accès qui constate un accès à une adresse à l'extérieur de la plage des adresses définie, pourra accéder par l'interface de ligne de données à l'unité de calcul respective pour interrompre le fonctionnement de l'unité de calcul en cas d'erreur. De plus, chaque unité de calcul est reliée à l'unité de comparaison et l'unité d'adresses d'accès communique avec un registre d'adresses contenu dans l'unité de comparaison et qui mémorise les adresses d'accès ; et si l'on constate une différence des signaux fournis 7 par les unités de calcul, l'unité de comparaison lance une routine de traitement d'erreur. La routine de traitement d'erreur permet d'accéder aux adresses d'accès effectivement utilisées et enregistrées dans le registre d'adresses car il ne peut y avoir d'erreur que dans la plage des adresses définie par l'unité d'adresses d'accès. Cela limite la recherche des erreurs à la plage des adresses définie. Cette plage des adresses permet d'évaluer si l'état du système de calculateur est cohérent et si un simple traitement d'erreur suffit ou s'il faut relancer complètement l'ensemble du système de calculateur. Pour effectuer une identification de lieu d'erreur, après la reconnaissance d'une erreur par l'unité de comparaison qui a effectué la comparaison des signaux fournis par les unités de calcul, les unités de calcul transmettent par la ligne de données, des opérations de changement d'état caractérisées par des adresses d'accès vers les unités périphériques et/ou les mémoires, les unités de calcul étant reliées par la ligne de données à une unité enregistrant en mémoire les adresses d'accès effectivement utilisées. L'erreur est reconnue par une unité d'identification qui contient l'unité enregistrant en mémoire les adresses d'accès effectivement utilisées. Cette unité d'indentification fonctionne indépendamment des deux unités de calcul et peut identifier la localisation d'erreur pour chaque erreur imaginable. Pour établir un état consistant du système de calculateur après une erreur signalée par l'unité de comparaison, au moins une unité périphérique et/ou une mémoire comporte une unité enregistrant chaque fois la dernière opération de changement d'état, et l'unité périphérique et/ou la mémoire peuvent reprendre la dernière opération avec changement d'état. L'erreur signalée par l'unité de comparaison sera utilisée comme signal de déclenchement pour la reprise de la dernière opération avec changement d'état. Selon un autre développement de l'invention, le dispositif de traitement d'erreur dans un système de calculateur à deux unités de calcul permet de reconnaître de manière fiable les erreurs du système de calculateur malgré le fonctionnement décalé dans le temps des deux unités de calcul. Une unité de calcul fonctionne comme unité de calcul maître reliée à une première interface de ligne de données par une unité de maintien et d'attente alors que l'autre unité de calcul est reliée à une seconde interface de ligne de données. La première et la seconde interface de ligne de données sont reliées à la ligne de données par une unité de comparaison, et l'unité de maintien et d'attente ne fournit les opérations de l'unité de calcul maître qu'après avoir reçu les signaux de l'autre unité de calcul vers la seconde interface de ligne de données. On évite ainsi de façon fiable que les opérations erronées de l'unité de calcul maître atteignent les unités périphériques et les mémoires. La transmission de ces signaux ne se fera que si la comparaison avec les io opérations équivalentes de l'autre unité de calcul a montré que ces signaux étaient sans erreur. Dans le cas le plus simple, l'unité de maintien et d'attente retient le fonctionnement de l'unité de calcul maître. On évite ainsi l'émission d'autres signaux avant que les signaux de l'autre unité 15 de calcul ne soient fournis pour être comparés. En variante, l'unité de maintien et d'attente mémorise les opérations émises par l'unité de calcul maître selon un ordre chronologique. Ainsi, l'unité de calcul maître peut certes continuer à fonctionner normalement mais ses signaux ne seront émis qu'après leur comparaison avec des signaux 20 équivalents de l'autre unité de calcul pour s'assurer qu'aucun signal erroné n'arrive aux unités périphériques et/ou aux mémoires. Les opérations avec changement d'état sont subdivisées en accès en lecture et en accès en écriture. Lorsque les accès en écriture sont mémorisés de façon temporaire dans l'unité de maintien et 25 d'attente, après les accès en écriture, on pourra transmettre les adresses en lecture de l'unité de calcul maître si celles-ci sont adressées à une mémoire périphérique. Les adresses en lecture à une unité périphérique doivent également être retenues. Pour cela, la première interface de ligne de données est reliée à l'unité de calcul maître par une 30 unité d'accès qui distingue les opérations avec changement d'état sur l'unité périphérique et les opérations avec changement d'état sur une mémoire périphérique. Dessins La présente invention sera décrite à l'aide de différents modes de réalisation représentés dans les dessins annexés dans lesquels : - la figure 1 montre un premier mode de réalisation du dispositif selon l'invention, - la figure 2 montre un premier exemple de réalisation du procédé de l'invention, - la figure 3 montre un second mode de réalisation du dispositif selon l'invention, - la figure 4 montre un troisième mode de réalisation du dispositif selon l'invention, - la figure 5 montre un second exemple de réalisation du procédé selon l'invention, - la figure 6 montre un quatrième mode de réalisation du dispositif selon l'invention, et - la figure 7 montre un troisième exemple de réalisation du procédé selon l'invention. Dans les différentes figures, on a utilisé les mêmes références pour désigner les mêmes caractéristiques. Description de modes de réalisation Selon la figure 1, le système de calculateur se compose de deux unités de calcul 100, 200. Chaque unité de calcul 100, 200 est reliée à une unité 110, 210 générant des signaux de bus. Dans le cas présent, la ligne de données est un bus de système et l'unité 110, 210 fournit des signaux de bus. Les deux unités 110, 210 générant les signaux de bus sont reliées à une unité de comparaison 300 aboutissant au système de bus 400. Les unités de calcul 100, 200 échangent des signaux par ce système de bus 400 avec au moins une unité périphérique 800 et une mémoire 900 réalisée sous forme de mémoire RAM ou de mémoire Flash. Chacune des unités 110, 210 pour générer des signaux de bus comporte une unité d'adresses d'accès (unité de protection de mémoire MPU) 111, 211 qui permet de surveiller les accès en lecture et 9 en écriture des unités de calcul 100, 200. L'unité de comparaison 300 comporte deux registres d'adresses 310, 320. Les deux unités de calcul 100, 200 fonctionnent avec un décalage d'horloge fixe pour traiter chaque fois les mêmes instructions ; l'unité de calcul 100 fonctionne en synchronisme avec l'horloge globale du système de calculateur ; l'unité de calcul 200 suit l'unité de calcul 100 avec du retard. Comme seule l'unité de calcul 100 travaille en synchronisme avec l'ensemble du système, les accès proprement dits à la mémoire RAM ou mémoire Flash 900 et à l'unité périphérique 800 ne seront initiés que par l'unité de calcul 100. L'unité de calcul 200 reprend toujours de façon retardée les données de l'unité de calcul 100. Les signaux de l'unité de calcul 200 ne sont générés que pour la vérification par l'unité de comparaison 300. Cela signifie qu'une donnée écrite par l'unité de calcul 200 n'est pas transmise à la mémoire RAM 900 ou à l'unité périphérique 800 mais est seulement utilisée pour la comparaison des signaux de sortie et d'entrée des unités de calcul 100 et 200 par l'unité de comparaison 300. Un système de calculateur peut effectuer à la fois un accès en lecture et en écriture à la mémoire RAM 900 ou à l'unité périphérique 800. Alors qu'un accès en écriture à la mémoire RAM 900 ou à l'unité périphérique 800 modifie toujours l'état de la mémoire RAM 900 ou de l'unité périphérique 800, dans le cas des unités périphériques 800, un accès en lecture peut modifier l'état d'un périphérique. De tels accès en lecture et en écriture sont caractérisés ci- après comme accès avec modification d'état. En liaison avec la configuration du système de calculateur décrite à la figure 1, les deux unités de calcul 100, 200 fonctionnent avec un décalage d'horloge, et la difficulté est qu'une erreur pour un accès avec changement d'état signalée par l'unité de comparaison 300 ne peut plus être interrompue le cas échéant. L'opération avec changement d'état visible pour le restant du système (mémoire RAM 900, unité périphérique 800) est initiée par l'unité de calcul 100 fonctionnant comme unité maître alors que la comparaison ne pourra se faire que lorsque la seconde unité de calcul 200 aura également généré les signaux nécessaires à la comparaison. Mais, à cet instant, suivant le protocole de bus sur le système de bus 400 et la liaison avec les mémoires et les périphériques, il est déjà trop tard pour arrêter une opération erronée. La figure 2 montre une possibilité pour neutraliser néanmoins l'erreur. Dans le bloc 110, on programme les unités d'adresses d'accès 111, 211 pour que les unités de calcul 100, 200 ne puissent écrire et lire que certaines parties de la plage d'adresses. Il s'agit en fait des parties de la plage des adresses nécessaires pour le traitement de la partie actuelle du programme. L'adresse fournie dans le bloc 1020 par l'unité de calcul 100, 200 sera comparée à la plage d'adresses de l'unité d'adresse d'accès respective 111, 211. Si une adresse est initiée, qui se situe à l'extérieur de la plage d'adresses préalablement définie, on reconnaît une erreur et un signal d'erreur sera déclenché (bloc 1030). Des accès non autorisés en lecture et en écriture seront ainsi interdits et conduisent à une interruption pour les unités de calcul 100 et 200. Cette surveillance se fait indépendamment de la comparaison des signaux d'entrée et de sortie des deux unités de calcul 100, 200 par l'unité de comparaison 300. L'unité de comparaison 300 mémorise dans le bloc 1040 mais en cas d'erreur de comparaison des adresses, les deux adresses comparées sont enregistrées dans les registres d'adresses 310, 320. Après la comparaison des adresses dans les unités d'adresses d'accès 111, 211, on compare les signaux des unités de calcul 100, 200 à l'aide de l'unité de comparaison 300. Dans le bloc 1050, l'unité de comparaison 300 constate une erreur dans les signaux des unités de calcul 100, 200. On peut supposer qu'un accès entaché d'erreurs et qui modifie un état, ne peut concerner que la plage des adresses qui aura été libérée par les unités d'adresses d'accès 111, 211 pour la partie de programme en cours d'exécution. Un accès avec changement d'état à d'autres plages peut être exclu du fait des unités d'adresses d'accès 111, 211. Les adresses enregistrées en mémoire dans les registres d'adresses 310, 320 de l'unité de comparaison 300 sont utilisées dans le bloc 1060 pour l'évaluation et on examine si l'état du système est consistant et s'il suffit d'un simple traitement d'erreur ou s'il faut relancer complètement le système de calculateur (bloc 1070). Si l'unité de comparaison 300 ne constate aucune erreur de comparaison, le signal fourni par l'unité de calcul 100 sera émis vers le système de bus 400 dans le bloc 1080. Les unités d'adresses d'accès 111, 211 sont également activées pendant le temps de fonctionnement du système de gestion, de sorte que celui-ci pourra accéder aux adresses dont il a effectivement besoin. La figure 3 montre un système de calculateur comportant également deux unités de calcul 100, 200 avec des unités respectives 110, 210 pour générer les signaux de bus nécessaires ainsi qu'une unité de comparaison 300. Les deux unités de calcul 100, 200 fonctionnent également ici avec un décalage fixe des horloges pour traiter respectivement les mêmes instructions ; l'unité de calcul 100 fonctionne comme unité maître en synchronisme avec l'horloge de l'ensemble du système ; l'unité de calcul 200 suit avec retard l'unité de calcul 100. Chacune des unités comporte en option une unité d'adresse d'accès 111, 211 pour générer des signaux de bus 110, 210. L'accès des unités de calcul 100, 200 par l'intermédiaire du système de bus 400 à l'unité périphérique 800 et à la mémoire 900 se fait comme cela a été décrit en relation avec la figure 1. L'unité de calcul 100 est toujours reliée à une unité de maintien et d'attente 500 par laquelle elle accède à l'unité 110 pour générer les signaux de bus nécessaires. L'unité 110 qui génère les signaux de bus nécessaires accède à son tour par une unité d'accès 600 à l'unité de calcul 100. En revanche, l'unité de calcul 200 accède directement par l'unité 210 pour générer les signaux de bus, à l'unité de comparaison 300 qui aboutit au système de bus 400. L'unité de maintien et d'attente 500 a pour fonction de temporiser le signal à l'unité 110 pour générer des signaux de bus en cas d'accès en écriture jusqu'à ce que le signal correspondant de l'unité 210 soit disponible pour générer les signaux de bus de l'unité de calcul 200. L'unité de maintien et d'attente 500 peut se présenter sous différents modes de réalisation. D'une part, l'unité de maintien et d'attente 500 retient l'unité de calcul 100 jusqu'à ce que les signaux de l'unité de calcul 200 soient disponibles. Ce n'est que lorsque la comparaison a été faite par l'unité de comparaison 300 que l'unité de calcul peut continuer à travailler. Si une erreur est constatée lors de la comparaison, les données ne seront pas écrites et un signal d'erreur sera émis. Après la comparaison, l'unité de calcul 200 sera décalée en fonction du décalage d'horloge pour rétablir de nouveau la situation d'origine. Selon une seconde variante, l'unité de maintien et d'attente 500 comporte une file d'attente de sorte que l'unité de calcul 100 peut tenir plusieurs opérations d'écriture sans avoir à attendre la fin de la comparaison des premières opérations d'écriture. Ces opérations d'écriture seront fournies à la comparaison dans l'ordre de leur émission et elles ne seront transmises par le système de bus 400 aux unités périphériques et aux mémoires seulement si le résultat de la comparaison est positif. Pour ne pas modifier l'ordre des accès au bus, il faut retarder les opérations de lecture qui suivent les opérations d'écriture jusqu'à ce que ces dernières soient comparées. Cela signifie que pour une opération de lecture qui suit directement une opération d'écriture, l'unité de calcul 100 sera retenue jusqu'à ce que l'opération d'écriture ait été comparée. L'unité de calcul 200 doit, dans ce cas, être également retenue du même temps avec un décalage d'horloge, une fois que l'opération de comparaison aura eu lieu pour que les deux unités de calcul 100, 200 rétablissent le décalage d'horloge pour les ordres suivants. En complément, le code programme (par exemple à l'aide d'un compilateur) permet également d'assurer que de telles opérations de lecture qui suivent dans le temps les opérations d'écriture, ne se fassent pas ou soient aussi rares que possible. L'unité d'accès 600 permet de distinguer entre les accès en lecture à la mémoire RAM 900 et les accès en lecture à l'unité périphérique 800. Les accès réussis à la mémoire RAM 900 peuvent être exécutés par une opération de lecture qui suit un accès en écriture tampon, avant les opérations d'écriture car l'accès en écriture à une donnée dans la mémoire RAM 900 ne produit aucun changement d'état par rapport aux autres données dans la mémoire RAM 900. Ce n'est que lorsque l'on accède exactement à la même adresse en lecture, qu'il faut une temporisation. La figure 4 montre un autre mode de réalisation. La construction et le fonctionnement sont pratiquement identiques à ceux de la figure 1 et c'est pourquoi, les explications déjà données s'appliquent également ici. En outre, dans cet exemple de réalisation, une unité de registre 700 constate les adresses cibles des accès en écriture effectivement utilisées. L'unité de registre 700 est reliée au système de bus 400. L'unité de registre 700 comporte une mémoire intermédiaire 710. Cette mémoire intermédiaire 710 est de préférence réalisée comme mémoire FIFO (mémoire premier entré/premier sorti). Le fonctionnement de ce mode de réalisation sera décrit de façon plus détaillée à l'aide de la figure 5. Dans le bloc 1110, on fournit les données de l'unité de calcul 100 et ensuite dans le bloc 1120, on les transmet au système de bus 400 qui les transmet à l'unité périphérique ou à la mémoire. Dans le bloc 1130, l'unité de registre 700 extrait en continu à partir des données passant dans le système de bus 400, les adresses cibles utilisées pour les accès en écriture et les enregistre dans la mémoire intermédiaire 710. Ensuite, l'unité de comparaison 300 effectue la comparaison des signaux des deux unités de calcul 100, 200 (bloc 1140). Lorsque l'unité de comparaison 300 identifie un accès en écriture erroné, mais qui a déjà été envoyé à cause du décalage d'horloge des deux unités de calcul 100, 200 par le système de bus 400, le bloc 1150 peut identifier par l'unité de registre 700, le lieu (mémoire RAM 900 ou unité périphérique 800) où a été inscrite l'information potentiellement erronée. L'unité de registre 700 travaille indépendamment des unités de calcul 100, 200. Ainsi, on peut identifier le lieu de chaque erreur qui concerne précisément une unité de calcul 100, 200. Pour remettre ensuite le système de calculateur dans son état initial non erroné, un programme sous la forme d'une routine de récupération accède, dans le bloc 1160 en lecture, à l'unité de registre 700. Cela permet de constater le ou les lieux d'un ou plusieurs accès en écriture erronés. Les accès en écriture erronés, lus par la routine de récupération, seront alors rejetés par la routine de récupération. Dans le bloc 1170, on effectue une réinitialisation des valeurs par l'unité de calcul 100. En principe, il est possible d'avoir des emplacements de mémoire pour les données erronées, à partir desquels, et toujours pendant le temps de détection de l'erreur du système de calculateur, l'erreur se soit propagée plus loin. Cela est par exemple possible si l'adresse de mémoire correspond à une sortie d'une unité périphérique et si cette unité périphérique a déjà réagi à la valeur pendant ce temps. L'utilisation d'une routine de récupération n'est plus possible dans ce cas. C'est pourquoi, le système de calculateur contient d'autres informations pour lesquelles une routine de récupération standard peut être effectuée pour des plages de mémoires de l'unité périphérique 800. De plus, on indique les propriétés de récupération qui correspondent aux différentes plages de mémoires. La figure 6 montre un autre exemple de réalisation dans lequel le système de calculateur a fondamentalement la structure et le fonctionnement du système de calculateur de la figure 1. L'unité périphérique 800 est reliée aux unités de calcul 100, 200 par le bus de données 400. L'unité périphérique 800 comporte une mémoire intermédiaire 810 propre. Comme cela apparaît figure 7, dans le bloc 1210, on traite les signaux correspondant à l'exécution d'un programme prédéfini par les unités de calcul 100 et 200. Ensuite, il y a émission du signal de l'unité de calcul 100 fonctionnant comme unité de calcul maître dans le système de bus 400 (bloc 1220). La dernière opération avec changement d'état est enregistrée provisoirement dans la mémoire intermédiaire 810 de l'unité périphérique 800 selon le bloc 1230. Dans le bloc 1240, on attend jusqu'à ce que l'opération avec changement d'état, suivante soit arrivée par le bus de système 400 ou qu'un nombre fixe de cadences se soit écoulé. Entre-temps, l'unité de comparaison 30 compare les signaux émis par les unités de calcul 100 et 200 pour la même étape de programme (bloc 1250). Si les signaux des unités de calcul se correspondent, à la fin du temps d'attente, il y aura émission des opérations dans le bloc 1260. Dans l'intervalle au cours duquel la dernière opération avec changement d'état est enregistrée provisoirement dans la mémoire intermédiaire 810, si une erreur a été signalée par l'unité de comparaison, on utilisera ce signal pour réaliser dans le bloc 1270 un retrait de l'opération erronée c'est-à-dire un retour dans l'unité périphérique 800. Cela signifie que l'unité périphérique 800 est en mesure d'annuler un accès en écriture ou un autre accès avec modification d'état. Cela peut se faire en ce que dans la mémoire intermédiaire 810, on élimine la dernière opération défectueuse mémorisée, sans que cette opération ne se soit exécutée. On rétablit de cette manière le système de calculateur dans son état consistant.20 REVENDICATIONS1 °) Procédé de traitement d'erreur dans un système de calculateur comportant deux unités de calculateur, selon lequel les deux unités de calculateur exécutent un programme identique avec décalage dans le temps et on compare entre eux les signaux des unités de calculateur, caractérisé en ce que pour une partie de programme à exécuter par l'une des unités de calcul (100, 200), on détermine une plage d'adresses définie du système de calculateur, et on reconnaît une erreur si les unités de calcul (100, 200) accèdent à une adresse située en dehors de la plage d'adresses définie pendant le traitement de la partie de programme. 2°) Procédé selon la revendication 1, caractérisé en ce que lorsqu'on constate l'accès à une adresse en dehors de la plage d'adresses définie, on interrompt l'exécution du programme dans l'unité de calcul (100, 200). 3°) Procédé selon la revendication 1, caractérisé en ce que chaque unité de calcul (100, 200) mémorise l'adresse comparée et en cas de différence dans les signaux comparés des unités de calcul (100, 200), on affiche une erreur, on exploite les adresses enregistrées en mémoire pour effectuer une analyse d'erreur et on démarre une routine de traitement d'erreur. 4°) Procédé selon la revendication 1, caractérisé en ce qu' on mémorise les signaux de sortie émis par l'unité de calcul fonctionnant comme unité de calcul maître (100), et en cas d'erreur, sur le fondement des signaux de sortie mémorisés, on effectue une identification de lieu d'erreur et on démarre une routine de traitement d'erreur.355°) Procédé selon la revendication 4, caractérisé en ce qu' en cas d'identification de lieu d'erreur, on reconnaît les plages de mémoires et pour au moins une plage de mémoire prédéfinie, on fixe une routine de récupération standard. 6°) Procédé selon la revendication 4 ou 5, caractérisé en ce qu' au moins une mémoire (900) ou une unité périphérique (800) du système de calculateur mémorise au moins une dernière opération de changement d'état de l'unité de calcul maître (100) et ce n'est qu'après une durée prédéfinie ou après que soit fournie une opération suivante modifiant l'état, que l'on exécute la dernière opération de modification de l'état. 7°) Procédé selon la revendication 6, caractérisé en ce qu' en cas d'affichage d'une erreur résultant de la comparaison des signaux des unités de calcul (100, 200), on élimine la dernière opération de changement d'état avant que n'ait été exécutée la dernière opération de changement d'état. 8°) Procédé de traitement d'erreur dans un système de calcul comportant deux unités de calcul, les deux unités de calcul traitant des programmes identiques de façon décalée dans le temps et les signaux des unités de calcul sont comparés entre eux et en cas de différence entre les signaux, une erreur est affichée, caractérisé en ce que les signaux émis par l'unité de calcul fonctionnant comme unité de calcul maître (100), ne sont pas exécutés tant que les signaux de l'autre unité de calcul (200) ne sont pas disponibles pour la comparaison. 9°) Procédé selon la revendication 8, caractérisé en ce quel'unité de calcul maître (100) est retenue dans le développement des opérations jusqu'à ce que l'on dispose des signaux de l'autre unité de calcul (200) et on exécute la comparaison des signaux de sortie. 10°) Procédé selon la revendication 8, caractérisé en ce qu' on mémorise les signaux de l'unité de calcul maître (100) dans leur ordre chronologique de calcul jusqu'à ce que l'on dispose des signaux de l'autre unité de calcul (200) et que la comparaison soit effectuée entre les signaux de sortie. 11 °) Procédé selon la revendication 8, caractérisé en ce qu' on distingue les accès de lecture à une mémoire (900) ou à une unité périphérique (800). 12°) Dispositif de traitement d'erreur dans un système de calculateur composé de deux unités de calcul travaillant de façon décalée dans le temps et dont on surveille les signaux à l'aide d'une unité de comparaison, ces signaux étant transmis par une ligne de transmission de données à une unité périphérique et/ou une mémoire, caractérisé en ce que chaque unité de calcul (100, 200) est reliée à une unité d'adresses d'accès (111, 211) qui vérifie les adresses des signaux et déclenche un traitement d'erreur en cas de signal d'adresse non-autorisé. 13°) Dispositif selon la revendication 12, caractérisé en ce que l'unité d'adresses d'accès (111, 211) fait partie d'une interface de ligne de données (110, 210) qui la relie à l'unité de calcul (100, 200) et à l'unité de comparaison (300). 14°) Dispositif selon la revendication 12 ou 13, caractérisé en ce quechaque unité de calcul (100, 200) est reliée à l'unité de comparaison (300), l'unité d'adresses d'accès (111, 211) communique avec un registre d'adresses (310, 320) contenu dans l'unité de comparaison (300), et mémorisant les adresses d'accès, et l'unité de comparaison (300) lance une routine de traitement de défaut lorsqu'elle constate une différence dans les signaux des unités de calcul (100, 200). 15°) Dispositif selon les revendications 12 à 14, caractérisé en ce que les unités de calcul (100, 200) émettent vers l'unité périphérique (800) et/ou la mémoire (900), des opérations de changement d'état caractérisant les adresses d'accès par l'intermédiaire de la ligne de données (400), et les unités de calcul sont reliées par la ligne de données (400) à une unité de registre (700) qui mémorise les adresses d'accès effectivement utilisées. 16°) Dispositif selon les revendications 12 à 15, caractérisé en ce qu' au moins une unité périphérique (800) et/ou mémoire (900) comporte une unité (810) qui mémorise chaque fois l'opération qui a modifié l'état en dernier lieu, et l'unité périphérique et/ ou la mémoire peuvent reprendre l'opération ayant modifié l'état en dernier lieu. 17°) Dispositif de traitement de défaut dans des systèmes de calculateur composés de deux unités de calcul travaillant de manière décalée dans le temps et dont les signaux sont surveillés par une unité de comparaison et sont transmis par une ligne de données vers des unités périphériques et/ou des mémoires, caractérisé par une unité de calcul fonctionnant comme unité de calcul maître (100), reliée par une première interface de ligne de données (110) à une unité de maintien et d'attente (500) alors que l'autre unité de calcul (200) est reliée à une seconde interface de ligne de données (210),la première interface (110) et la seconde interface (210) de ligne de données sont reliées à la ligne de données (400) par une unité de comparaison (300), et l'unité de maintien et d'entretien (500) émet les opérations fournies par l'unité de calcul maître (100) seulement après application des signaux de l'autre unité de calcul (200) à la seconde interface de ligne de données (210). 18°) Dispositif selon la revendication 17, caractérisé en ce que l'unité de maintien et d'attente (500) retient le fonctionnement de l'unité de calcul maître (100). 19°) Dispositif selon la revendication 17 , caractérisé en ce que l'unité de maintien et d'attente (500) mémorise dans l'ordre chronologique les opérations fournies par l'unité de calcul maître (100). 20°) Dispositif selon les revendications 17 à 19, caractérisé en ce que la première interface de ligne de données (110) est reliée à l'unité de calcul maître par une unité d'accès (600) qui distingue les opérations de changement d'état sur une unité périphérique (800) et les opérations de changement d'état sur une mémoire périphérique (900).25