FR 2912526 A1 20080815 FR 0701033 A 20070213 PROCEDE DE MAINTIEN DU SYNCHRONISME D'EXECUTION ENTRE PLUSIEURS PROCESSEURS ASYNCHRONES FONCTIONNANT EN PARALLELE DE MANIERE REDONDANTE La présente invention est relative aux calculateurs utilisés dans des applications critiques où il est important de pouvoir garantir l'intégrité des données produites. Elle concerne les calculateurs à redondance comportant plusieurs chaînes parallèles de calcul suivies par un circuit de comparaison ou de vote majoritaire. Les chaînes parallèles de calcul comportent des processeurs indépendants les uns des autres, exécutant, en parallèle, à la même cadence mais sous le contrôle d'horloges indépendantes donc asynchrones, les mêmes applications paramétrées avec les mêmes données initiales tandis que le circuit de comparaison ou de vote majoritaire n'autorise la délivrance que des données obtenues à l'identique ou majoritairement dans les différentes voies parallèles. La mise en oeuvre du principe de redondance implique la comparaison des résultats fournis par les processeurs des différentes chaînes de calcul pour une même étape de traitement d'une même application exécutée avec le même paramétrage initial. Pour ce faire, les processeurs des différentes chaînes de calcul sont programmés pour exécuter en parallèle et à la même cadence, la même application avec les mêmes paramétrages. Mais du fait de l'indépendance de leurs horloges et du traitement asynchrone d'interruptions, ils ont une tendance naturelle à se désynchroniser qui doit être combattue par une synchronisation plus ou moins lâche. La complexité des processeurs actuels, leur prise en compte des instructions à partir de file d'attente de longueurs variables stockées en mémoire cache et les aléas engendrés par les traitements de requêtes d'interruption formulées de manière asynchrone par rapport aux exécutions des suites d'instructions d'une application rendent difficile une synchronisation basée sur une prévision des états des microprocesseurs à un instant donné faite à partir de la seule connaissance de la suite des instructions de l'application en cours d'exécution, de son paramétrage initial et du temps écoulé depuis son début d'exécution. Pour tourner cette difficulté, il est connu, par le brevet américain US 5,896,784, de profiter de la présence, dans les processeurs, d'un compteur d'instructions programmable, pour resynchroniser périodiquement des processeurs exécutant en parallèle une même application paramétrée avec les mêmes données initiales, en leur faisant exécuter, après écoulement d'une période de temps correspondant grossièrement au temps de traitement d'un nombre prédéfini ou quantum d'instructions, une procédure de synchronisation qui est basée sur les nombres d'instructions traitées figurant dans les compteurs d'instructions et appelée au moyen d'une requête d'interruption de synchronisation. Cette procédure de synchronisation provoque, lorsque la requête d'interruption de synchronisation est prise en compte par un processeur : - la signalisation, aux autres processeurs, par le processeur concerné, du contenu de son compteur d'instructions traitées, - la comparaison, par le processeur concerné, des nombres d'instructions traitées figurant dans les compteurs d'instructions traitées des différents processeurs après qu'ils aient pris en compte l'interruption de synchronisation, et en cas de constat d'une identité entre les nombres d'instructions traitées, -l'émission, par le processeur concerné, d'un constat de synchronisation, en cas de constat de nombres d'instructions traitées dissemblables, - soit le passage du processeur concerné à un état d'attente si son compteur d'instructions traitées affiche le nombre le plus grand et le renouvellement de la comparaison à chaque nouvel échange de nombres d'instructions traitées avec les autres processeurs, - soit le déroulement, par le processeur concerné, d'un processus de traitement pas à pas des instructions jusqu'à ce que son compteur d'instructions traitées atteigne le nombre le plus grand, puis la communication, par le processeur concerné, d'une mise à jour de son nombre d'instructions traitées aux autres processeurs et le renouvellement de la comparaison, Ce processus de synchronisation lâche, entre les processeurs redondants d'un calculateur tolérant aux fautes ne répond pas aux contraintes sévères de sûreté de fonctionnement d'un calculateur multitâches par partage de temps, destiné à une utilisation avionique, qui doit être déterministe et veiller au strict respect des tranches de temps attribuées aux différentes applications. En effet, les tranches de temps affectées aux différentes applications n'ont aucune raison de correspondre à un même quantum d'instructions si bien qu'il ne garantit pas la synchronisation des processeurs à la fin de chaque tranche de temps lors de la mémorisation du contexte de fin provisoire du traitement de l'application dont l'exécution va être interrompue. En outre, la resynchronisation systématique à chaque quantum d'instructions traitées ne suit pas l'augmentation du risque de désynchronisation subi par les processeurs redondants du calculateur lors des requêtes d'interruption des appels système. Par ailleurs, pour assurer une bonne qualité de synchronisation, cette technique génèrera un nombre de synchro systématiquement supérieure au strict nécessaire avec pour conséquence une diminution de la performance disponible pour les applications. L'invention a pour but de remédier aux inconvénients précités. Elle a pour objet un procédé de maintien du synchronisme, au sein d'un calculateur à chaînes 1parallèles de traitement, entre les processeurs des chaînes de traitement, lesdits processeurs interrompant leur tâche en cours, entre les traitements de deux instructions successives, sur une requête d'interruption, pour entamer, après sauvegarde de l'état intermédiaire atteint par la tâche interrompue, un nouveau processus désigné dans la requête d'interruption, comportant des compteurs d'instructions traitées en dehors des interruptions, et exécutant les mêmes applications, en parallèle et à un même rythme mais de manière asynchrone, sous le contrôle d'un système d'exploitation multitâche commun gérant des ressources du calculateur par des appels système provoquant des interruptions logicielles, partageant le temps en tranches successives affectées chacune au traitement d'une application, le partage s'effectuant au moyen de requêtes d'interruptions dites de "timing" émises par le système d'exploitation en fin de tranche de temps et provoquant le déroulement d'un processus de changement d'application avec une sauvegarde de l'état intermédiaire atteint par l'application interrompue et reprise du dernier état intermédiaire de l'application nouvellement considérée, et avec une resynchronisation des compteurs d'instructions traitées des différents processeurs, ledit procédé mettant en oeuvre une procédure de synchronisation appelée par une de requête d'interruption de synchronisation émise par le système d'exploitation à l'adresse de tous les processeurs provoquant, lorsqu'elle est exécutée par un processeur : -la signalisation par le processeur concerné du contenu de son 15 compteur d'instructions traitées aux autres processeurs, - la lecture des contenus des compteurs d'instructions traitées des autres processeurs, - la comparaison, par le processeur concerné des nombres d'instructions traitées figurant dans les compteurs d'instructions traitées des 20 différents processeurs après qu'ils aient pris en compte l'interruption de synchronisation, et en cas de constat d'une identité entre les nombres d'instructions traitées, 25 - l'émission par le processeur concerné d'un constat de synchronisation, en cas de constat de nombres d'instructions traitées dissemblables, - soit le passage du processeur concerné dans un état d'attente si son cornpteur d'instructions traitées affiche le nombre le plus grand et le renouvellement de la comparaison à chaque nouvel échange de nombres d'instructions traitées avec les autres processeurs, - soit le déroulement, par le processeur concerné, d'un processus de traitement pas à pas des instructions 30 35 jusqu'à ce que son compteur d'instructions traitées atteigne le nombre le plus grand, puis la communication par le processeur concerné d'une mise à jour de son nombre d'instructions traitées aux autres processeurs et le renouvellement de la comparaison, ledit procédé étant remarquable en ce que la procédure de synchronisation est activée par le système d'exploitation au moyen d'une requête d'interruption de synchronisation émise à l'adresse de tous les processeurs, 1 o au début des traitements de chaque interruption de timing marquant la fin d'une tranche de temps et de chaque appel système engendré par une application. Avantageusement, un processeur, lorsqu'il est dans un état d'attente se prolongeant au-delà d'une certaine durée, provoque la remise à 15 zéro de l'ensemble des processeurs. Avantageusement, un processeur exécutant la procédure de synchronisation suite à un appel système engendré par une application ou à la détection d'une erreur matérielle ou logicielle provoque la remise à zéro de l'ensemble des processeurs lorsque, dans le même temps, l'un des autres 20 processeurs possède un compteur d'instructions traitées affichant un nombre supérieur à celui de son propre compteur d'instructions traitées. Avantageusement, un processeur exécutant la procédure de synchronisation provoque la remise à zéro de l'ensemble des processeurs si, dans le même temps, l'un des autres processeurs est en train de traiter une 25 requête d'interruption pour erreur matérielle ou logicielle et si, à l'issue de la procédure de synchronisation, l'ensemble des processeurs ne convergent pas sur une situation d'erreur identique. D'autres caractéristiques et avantages de l'invention ressortiront de 30 la description 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 schématiquement l'architecture d'un calculateur redondant à deux voies parallèles de traitement, - une figure 2 est un schéma détaillant l'organisation, en couches logicielles superposées, de la prograrnmation d'un processeur d'une voie de traitement, et - une figure 3 est un organigramme montrant les différentes étapes 5 d'un processus de synchronisation utilisé dans le procédé selon l'invention. La figure 1 détaille l'architecture d'un calculateur à haut degré de fiabilité et de sécurité, destiné à être embarqué à bord d'un aéronef. Ce calculateur comporte deux chaînes de traitement, parallèles et redondantes, io une mémoire à accès aléatoire à double entrée DPRAM 13 partagée entre les deux chaînes de traitement et un contrôleur de bus 14 donnant un accès à deux bus externes de communication prolongeant la redondance au-delà du calculateur. Chaque chaîne de traitement comprend : 15 - un processeur 1, 2 associé à une horloge individuelle 3, 4 et à un circuit individuel de surveillance du bon fonctionnement 5, 6 de type "chien de garde" ou "watch dog" en anglo-saxon, - une mémoire de travail à accès aléatoire RAM 7, 8, - une mémoire de programmes 9, 10 de type flash, 20 - un pont ou "bridge" en anglo-saxon 11, 12 contrôlant les échanges entre : le processeur 1, respectivement 2, les mémoires de travail 7, respectivement 8 et de programmes 9, respectivement 10 de la chaîne à laquelle appartient le processeur 1, 2, la mémoire à accès aléatoire à double entrée DPRAM 13 partagée entre les deux chaînes de traitement et le 25 contrôleur de bus 14. Plus précisément, le pont 11, 12 d'une chaîne de traitement donne au processeur 1, 2 de la chaîne de traitement à laquelle il appartient : - un accès en lecture et écriture à la mémoire RAM de travail 7, 8 de la chaîne, 30 - un accès en lecture seule à la mémoire de programmes 9, 10 de la chaîne, l'un 1 des processeurs ayant en outre un accès en écriture aux deux mémoires de programmes 9, 10 afin de permettre d'y introduire les programmes à exécuter, - un accès en lecture et écriture à une partie réservée 13', 13" de la mémoire à accès aléatoire à double entrée DPRAM 13 et un accès en lecture seule à la partie restante 13", 13', - un accès en lecture à des registres de réception de données du 5 contrôleur de bus 14, et - un accès en écriture à des registres de départ de données du contrôleur de bus 14. Le contrôleur de bus 14 est relié aux ponts 11 et 12 des deux chaînes de traitement par un bus local, par exemple au standard PCI (acronyme io provenant de l'expression anglo-saxonne :"Peripheral Component Interconnect protocole") ou PCI express. Dans le sens émission, il vérifie que les processeurs 1 et 2 des deux chaînes de traitement placent bien deux versions identiques d'une même donnée dans ses registres de départ de données puis assure la mise en forme de cette donnée à émettre pour une 15 double transmission sur les deux bus externes redondants 15, 16. Dans le sens réception, il vérifie qu'une donnée reçue sur un bus externe 15 ou 16, à destination du calculateur est bien également reçue sur l'autre bus externe 1E; ou 15, assure sa mise en forme pour la rendre manipulable par les chaînes de traitement du calculateur, puis la place à l'identique dans ses 20 registres de réception de données, à la disposition des processeurs 1 et 2 des deux chaînes de traitement. Les mémoires de programmes 9, 10 ont des contenus identiques et les horloges 3, 4 la même fréquence afin de permettre aux processeurs 1, 2 des deux chaînes redondantes de traitement du calculateur d'exécuter en 25 parallèle et au même rythme, mais de manière asynchrone en raison de l'indépendance de leurs horloges 3, 4, des tâches identiques relevant des mêmes applications. Ces processeurs 1, 2 opèrent sous le contrôle du même système d'exploitation de type multitâche à partage de temps, qui est dupliqué dans les mémoires de programmes 9, 10 et assure, pour chaque 30 chaîne de traitement, la gestion des ressources matérielles et l'allocation d'une tranche spécifique de temps processeur, périodiquement renouvelée à chacune des applications à exécuter. La programmation répond classiquement, à une structure en couches superposées d'abstraction, du genre de celle montrée à la figure 2. La couche d'abstraction la plus périphérique est l'espace applications 20. Pour accéder aux ressources du processeur et des équipements périphériques regroupés sous l'intitulé matériel 40, elle fait appel aux services d'un système d'exploitation temps réel, multitâche 30 structuré en deux sous-couches : un espace noyau ou superviseur 300 et un espace utilisateur 320. L'espace noyau 300 du système d'exploitation regroupe un ordonnanceur 301 qui gère les tranches de temps allouées à chaque application 201 à 20n au moyen d'interruptions logicielles dites de "timing" 1 o activant des processus de changement de contexte, et des services critiques qui impliquent l'utilisation de ressources interdites en accès direct et uniquement disponibles par des appels système provoquant des interruptions logicielles. L'espace utilisateur 320 regroupe tous les autres services 321 dont 15 l'exécution ne nécessite • pas le recours à des interruptions logicielles, notamment, le service interpréteur 322 traduisant le langage applicatif en langage machine et le service ALU 323 gérant les ressources logiques et arithmétiques du processeur. Le matériel 40 qui échange des données avec les services 20 critiques et non critiques du système d'exploitation 30, engendre également des interruptions matérielles traitées par des services critiques de l'espace noyau 300 du système d'exploitation 30 lorsqu'il est nécessaire de réagir en temps réel à des événements asynchrones par rapport aux traitements des applications. 25 L'exploitation de la redondance implique de ne comparer que des données produites en parallèle par les deux chaînes de traitement du calculateur pour une même étape d'un processus en cours, alors que ces données ne sont pas nécessairement disponibles au même instant en sorties des deux chaînes de traitement, du fait de la dérive relative des horloges 3, 4 30 des processeurs 1, 2, et des aléas dus aux traitements des interruptions dont les prises en compte par un processeur 1, 2 dépendent de son activité du moment et dont certaines peuvent n'intéresser qu'une chaîne de traitement sur les deux. Pour remédier à la tendance à la désynchronisation des deux 35 chaînes de traitement due à la dérive relative des horloges 3, 4 ainsi qu'aux aléas provenant du traitement des interruptions, une resynchronisation des processeurs 1, 2 est effectuée en fin de chaque tranche de temps consacrée au traitement d'une application, lors de la sauvegarde du contexte. Cette resynchronisation, s'appuie d'une part, sur la présence dans les processeurs actuels, d'un compteur d'instructions traitées, programmable et programmé de manière à sauter les instructions correspondant au traitement des interruptions, et d'autre part, sur un service 303 de synchronisation de l'espace noyau 300 du système d'exploitation, appelé par une requête d'interruption de synchronisation émise préalablement à chaque requête 1 o d"interruption de timing. Comme montré à la figure 3, le service 303 de synchronisation fait exécuter par le processeur ayant émis une requête d'interruption de synchronisation, la suite des opérations suivantes : - signalisation en 400, par le processeur concerné, à destination 15 de l'autre processeur, par l'intermédiaire de registres spécifiques de la mémoire DPRAM 13 à double entrée, de la prise en compte d'une interruption de synchronisation et du nombre contenu dans son compteur d'instructions traitées - lecture en 401, dans des registres spécifiques de la mémoire 20 DPRAM 13 à double entrée, du nombre communiqué par l'autre processeur comme correspondant au contenu de son propre compteur d'instructions traitées, - constatation en 402 de la prise en compte ou non d'une interruption par l'autre processeur avec le type de l'interruption concernée, 25 - en cas de non prise en compte d'une interruption de synchronisation par l'autre processeur, attente en 403 d'une prise en compte d'ünterruption de synchronisation par l'autre processeur avec rebouclage sur l'étape précédente et émission en 404 d'un ordre de remise à zéro des deux processeurs 1, 2 après dépassement d'un seuil de délai d'attente, 30 - en cas de prise en compte par l'autre processeur d'une interruption de synchronisation, comparaison, par le processeur concerné du contenu de son compteur d'instructions traitées avec le contenu du compteur d'instruction traitées de l'autre processeur, et IO en cas de constat en 405 d'une identité entre les nombres d'instructions traitées, - émission par le processeur concerné d'un constat de synchronisation et mise fin en 406 au traitement de l'interruption de synchronisation, en cas de constat en 405, de nombres d'instructions traitées dissemblables, après identification en 407 du nombre d'instructions traitées le plus grand - soit si le compteur d'instructions traitées du processeur concerné affiche le nombre le plus grand, mise en 408, 409 du processeur concerné en attente d'une mise à jour du nombre communiqué par l'autre processeur, - soit déroulement en 410, par le processeur concerné, d'un processus de traitement pas à pas des instructions jusqu'à ce que son compteur d'instructions traitées atteigne le nombre d'instructions traitées communiqué par l'autre processeur, puis mise à jour par le processeur concerné, du registre de la mémoire DPRAM 13 à double entrée affecté à son nombre d'instructions traitées et renouvellement de la comparaison. Ce processus de synchronisation s'étend facilement à un nombre de chaînes de traitement supérieur à deux comme il s'en trouve dans les calculateurs redondants à vote majoritaire. Dans ce cas, chaque processeur dont le compteur des instructions traitées n'atteint pas le nombre maximum constaté comble l'écart en mode pas à pas puis attend, comme le processeur ayant le compteur affichant le nombre maximum d'instructions traitées, des mises à jour des différents comptes montrant qu'ils sont tous parvenus au nombre maximum. Un délai maximum peut être fixé pour ces opérations de rattrapage du synchronisme, délai maximum dont le dépassement peut provoquer par exemple une remise à zéro générale des processeurs. Dans l'exemple décrit, une interruption de synchronisation est insérée au début du traitement de chaque interruption de timing de manière à activer le service de synchronisation avant chaque changement de contexte se produisant en fin des tranches de temps ménagées par l'ordonnanceur 301, ce qui permet de consolider la synchronisation des chaînes de traitement aux moments importants des mémorisations des contextes de fin provisoire d'exécution des applications. Pour renforcer encore la fiabilité d'un calculateur à chaînes de traitement redondantes, des interruptions de synchronisation sont également insérées au début des traitements correspondant aux appels système engendrés par les applications. Il en résulte une consolidation de la synchronisation lors des accès des chaînes de traitement au matériel (mémoire partagée, bus de communication, etc.). io II est également possible de prendre en considération, lors du traitement d'une interruption de synchronisation par un processeur, de l'éventualité d'un traitement d'autres types d'interruption par l'un ou plusieurs des autres processeurs. Pour ce faire, le procédé de synchronisation déroulé par le service de synchronisation 303 a son étape 402 de constatation de 15 prise en compte d'une interruption de synchronisation par les autres processeurs complétée par une analyse du contexte conduisant à une remise à zéro de l'ensemble des processeurs si : - une interruption de synchronisation est causée par un appel système ou une erreur matérielle ou logicielle et si l'un des autres 20 processeurs affiche sur son compteur d'instructions traitées, un nombre supérieur à celui affiché par le compteur d'instructions traitées du processeur ayant effectué l'appel système, - une quelconque des interruptions correspond à un contexte d'erreur matérielle ou logicielle et si, à l'issue du processus de 25 synchronisation (autorisant l'exécution pas à pas des instructions de l'application alors qu'une interruption de type timing est déjà prise en compte) l'ensemble des processeurs ne convergent pas sur une erreur identique. 30 REVENDICATIONS 1. Procédé de maintien du synchronisme, au sein d'un calculateur à chaînes parallèles de traitement, entre des processeurs (1, 2) des chaînes de traitement, lesdits processeurs (1, 2) interrompant leur tâche en cours, entre les traitements de deux instructions successives, sur une requête d'interruption, pour entamer, après sauvegarde de l'état intermédiaire atteint par la tâche interrompue, un nouveau processus désigné dans la requête d'interruption, comportant des compteurs d'instructions traitées en dehors des interruptions et exécutant les mêmes applications, en parallèle et à un même rythme mais de manière asynchrone, sous le contrôle d'un système io d'exploitation multitâche commun (30) gérant des ressources du calculateur par des appels systèmes provoquant des interruptions logicielles, partageant le temps en tranches successives affectées chacune au traitement d'une application, le partage s'effectuant au moyen d'interruptions dites de "timing" émises par le système d'exploitation en fin de tranche de temps et 15 provoquant le déroulement d'un processus de changement d'application avec une sauvegarde de l'état intermédiaire atteint par l'application interrompue et reprise du dernier état intermédiaire de l'application nouvellement considérée, et avec une resynchronisation des compteurs d'instructions traitées des différents processeurs (1, 2), 20 ledit procédé mettant en oeuvre une procédure de synchronisation appelée par une de requête d'interruption de synchronisation émise par le système d'exploitation (30) à l'adresse de tous les processeurs (1, 2) provoquant, lorsqu'elle est exécutée par un processeur (1 ou 2) : - la signalisation (400), par le processeur concerné (1 ou 2), du 25 contenu de son compteur d'instructions traitées aux autres processeurs,(2 ou 1), - la comparaison (405, 407), par le processeur concerné (1 ou 2) des nombres d'instructions traitées figurant dans les compteurs d'instructions traitées des différents processeurs (1, 2) après qu'ils aient pris en compte 30 l'interruption de synchronisation, et en cas de constat d'une identité entre les nombres d'instructions traitées,-l'émission par le processeur concerné (1 ou 2) d'un constat de synchronisation, en cas de constat de nombres d'instructions traitées dissemblables, - soit le passage du processeur concerné (1 ou 2) à un état d'attente (409) si son compteur d'instructions traitées affiche le nombre l'e plus grand et le renouvellement de la comparaison à chaque nouvel échange de nombres d'instructions traitées avec les autres processeurs 2 ou 1), - soit le déroulement (410), par le processeur concerné (1 ou 2), d'un processus de traitement pas à pas des instructions jusqu'à ce que son compteur d'instructions traitées atteigne le nombre le plus grand, puis la communication par le processeur concerné (1 ou 2) d'une mise à jour de son nombre d'instructions traitées aux autres processeurs (2 ou 1), et le renouvellement de la comparaison. 20 ledit procédé étant caractérisé en ce que la procédure de synchronisation est activée par le système d'exploitation (30) au moyen d'une requête d'interruption de synchronisation émise à l'adresse de tous les processeurs (1, 2), au début des traitements de chaque interruption de timing marquant la fin d'une tranche de temps et de chaque appel système engendré par une 25 application. 2. Procédé selon la revendication 1, caractérisé en ce qu'un processeur (1 ou 2), lorsqu'il est dans un état d'attente se prolongeant au-delà d'une certaine durée, provoque la remise à zéro de l'ensemble des 30 processeurs. 3. Procédé selon la revendication 1, caractérisé en ce qu'un processeur (1 ou 2) exécutant la procédure de synchronisation suite à un appel système engendré par une application ou à la détection d'une erreur 35 matérielle ou logicielle provoque la remise à zéro de l'ensemble des 10 15processeurs (1, 2) lorsque, dans le même temps, l'un des autres processeurs (2 ou 1) est en train de traiter une requête d'interruption de timing avec un compteur d'instructions traitées affichant un nombre supérieur à celui de son propre compteur d'instructions traitées. 4. Procédé selon la revendication 1, caractérisé en ce qu'un processeur (1 ou 2) exécutant la procédure de synchronisation provoque la remise à zéro de l'ensemble des processeurs (1, 2) si, dans le même temps, l'un des autres processeurs est en train de traiter une requête d'interruption pour erreur matérielle ou logicielle et si, à l'issue de la procédure de synchronisation, l'ensemble des processeurs ne convergent pas sur une situation d'erreur identique.15