FR2992749A1 - Procede de traitement de donnees en securite, et calculateur associe - Google Patents

Procede de traitement de donnees en securite, et calculateur associe Download PDF

Info

Publication number
FR2992749A1
FR2992749A1 FR1256229A FR1256229A FR2992749A1 FR 2992749 A1 FR2992749 A1 FR 2992749A1 FR 1256229 A FR1256229 A FR 1256229A FR 1256229 A FR1256229 A FR 1256229A FR 2992749 A1 FR2992749 A1 FR 2992749A1
Authority
FR
France
Prior art keywords
executable
source code
data
output data
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1256229A
Other languages
English (en)
Other versions
FR2992749B1 (fr
Inventor
Philippe Coupoux
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alstom Transport Technologies SAS
Original Assignee
Societe Technique pour lEnergie Atomique Technicatome SA
TechnicAtome SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Societe Technique pour lEnergie Atomique Technicatome SA, TechnicAtome SA filed Critical Societe Technique pour lEnergie Atomique Technicatome SA
Priority to FR1256229A priority Critical patent/FR2992749B1/fr
Priority to PCT/EP2013/063712 priority patent/WO2014001543A1/fr
Priority to EP13732927.2A priority patent/EP2867774A1/fr
Publication of FR2992749A1 publication Critical patent/FR2992749A1/fr
Application granted granted Critical
Publication of FR2992749B1 publication Critical patent/FR2992749B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1487Generic software techniques for error detection or fault masking using N-version programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1641Error detection by comparing the output of redundant processing systems where the comparison is not performed by the redundant processing components

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Ce procédé, mis en oeuvre par un calculateur comportant un compilateur, comprend une première étape (110) de génération d'un premier exécutable (L1) à partir d'un code source (L0) correspondant à un logiciel, et une deuxième étape (120 ; 130) de génération d'un second exécutable (L2) à partir du même code source (L0). Le premier exécutable généré (L1) est destiné à être exécuté par une première unité de traitement (30) et le deuxième exécutable généré (L2) est destiné à être exécuté par une deuxième unité de traitement (32), distincte de la première unité de traitement (30). Le code source (L0) comporte au moins une variable du type entier et, lors de l'étape (120 ; 130) de génération du second exécutable (L2), le type entier de la ou chaque variable est converti en type flottant.

Description

Procédé de traitement de données en sécurité, et calculateur associé La présente invention concerne un procédé de traitement de données en sécurité. La présente invention concerne également un calculateur pour la mise en oeuvre d'un tel procédé.
L'exécution d'un logiciel de traitement de données et, en particulier, celle d'un logiciel de sécurité doit se faire en sécurité, c'est-à-dire de manière à pouvoir garantir, avec une faible probabilité d'erreur résiduelle (1.10-9) la fiabilité d'une donnée générée en sortie. Pour ce faire, on connaît des dispositifs permettant une redondance de l'exécution du logiciel de sécurité, en diversifiant les chemins de traitement d'un ensemble de données d'entrée. Un tel dispositif comporte un moyen de vote conçu pour comparer entre eux les ensembles de données générées en sortie de chacun des chemins de traitement. Si le critère mis en oeuvre par le moyen de vote n'est pas respecté, le moyen de vote indique la présence d'une faute dans les données générées en sortie.
Il est ainsi possible d'éliminer, de tolérer, ou d'identifier les fautes susceptibles d'affecter le traitement des données effectué par le logiciel de sécurité. La probabilité de l'occurrence de fautes qui ne seraient pas identifiées comme telles, permet de qualifier le niveau de sécurité atteint. Ainsi, selon la norme généraliste IEC61508, le niveau SIL 4 correspond à une probabilité d'occurrence d'une défaillance contraire à la sécurité inférieure à 10-9. Le document WO 2010/049339 divulgue différents modes de redondance dans l'exécution d'un logiciel de sécurité. Selon un premier mode de redondance, le même exécutable est exécuté sur deux unités de calcul, indépendantes l'une de l'autre, qui reçoivent le même ensemble de données d'entrée. Les deux unités de calcul délivrent chacune des données de sortie suite à l'exécution de l'exécutable sur les données d'entrée, et les données de sortie des deux unités de calcul sont comparées par un moyen de vote. Selon un deuxième mode de redondance, distinct du premier mode de redondance, deux exécutables différents sont compilés à partir de deux codes source distincts en utilisant le même compilateur. Les deux exécutables sont ensuite exécutés, soit sur deux unités de calcul différentes, soit successivement sur une même unité de calcul. Les données de sortie correspondant au traitement des données d'entrée par les deux exécutables sont ensuite comparées par le moyen de vote. Selon un troisième mode de redondance, distinct des premier et deuxième modes de redondance, deux exécutables différents sont obtenus à partir d'un même code source en utilisant le même compilateur et des paramètres de compilation différents. Les deux exécutables sont ensuite exécutés, soit sur deux unités de calcul différentes, soit successivement sur une même unité de calcul, et les données de sortie correspondant aux deux exécutables sont ensuite comparées par le moyen de vote. L'invention a pour but de proposer un procédé de traitement de données présentant une meilleure fiabilité des données délivrées à l'issue du traitement. Pour cela, l'invention a pour objet un procédé de traitement de données, mis en oeuvre par un calculateur comportant un compilateur, le procédé de traitement comprenant une première étape de génération d'un premier exécutable à partir d'un code source correspondant à un logiciel, et une deuxième étape de génération d'un second exécutable à partir du même code source. Le premier exécutable généré est destiné à être exécuté par une première unité de traitement et le deuxième exécutable généré est destiné à être exécuté par une deuxième unité de traitement, distincte de la première unité de traitement. Le code source comporte au moins une variable du type entier et, lors de l'étape de génération du second exécutable, le type entier de la ou chaque variable est converti en type flottant. Suivant des modes particuliers de réalisation, le procédé comporte une ou plusieurs des caractéristiques suivantes, prise(s) isolément ou suivant toutes les combinaisons techniquement possibles : - l'étape de génération du premier exécutable consiste à compiler ledit code source à l'aide du compilateur ; - l'étape de génération du second exécutable consiste à créer un code source intermédiaire en remplaçant, dans ledit code source, chaque déclaration d'une variable du type entier par la déclaration d'une variable du type flottant, puis à compiler ledit code source intermédiaire en utilisant le compilateur mis en oeuvre lors de l'étape de génération du premier exécutable ; - l'étape de génération du second exécutable consiste à compiler ledit code source en associant, à la ou chaque variable du type entier, un fichier d'une librairie correspondant à un type flottant ; - une unité de calcul comportant lesdites première et seconde unités de traitement, le procédé comprend en outre une étape d'exécution par l'unité de calcul du premier exécutable pour le traitement d'un ensemble de données d'entrée afin de générer un premier ensemble de données de sortie, une étape d'exécution par l'unité de calcul du second exécutable pour le traitement dudit ensemble de données d'entrée afin de générer un second ensemble de données de sortie, et une étape de vote par une unité de vote consistant à générer un signal de vote en fonction du résultat d'une comparaison entre les premier et second ensembles de données de sortie ; - l'étape de génération du signal de vote comprend la conversion du premier ensemble de données de sortie, les données du type entier étant converties en données de sortie du type flottant, et la comparaison de chaque donnée de sortie convertie avec une donnée correspondante du second ensemble de données de sortie ; - l'étape de génération d'un signal de vote comprend la conversion du second ensemble de données de sortie, les données du type flottant étant converties en données de sortie du type entier, et la comparaison de chaque donnée de sortie convertie avec une donnée correspondante du premier ensemble de données de sortie ; - le type flottant est un flottant double précision conforme à la norme IEEE-754 ; - chaque variable du code source est du type entier ; - ladite première unité de traitement est une unité arithmétique pour les entiers dédiée aux opérations sur des variables du type entier et ladite seconde unité de traitement est une unité arithmétique pour les flottants dédiée aux opérations sur des variables du type flottant, et l'étape d'exécution du premier exécutable est effectuée par l'unité arithmétique pour les entiers et la étape d'exécution du second exécutable est effectuée par l'unité arithmétique pour les flottants ; - une étape de délivrance de données de sortie correspondant au premier ensemble de données de sortie, et les données de sortie (Dout) présentent un niveau de sécurité conforme au niveau SIL4 de la norme généraliste IEC61508 et au niveaux inférieurs (SILO à SIL3) de celui-ci ou conforme aux niveaux: SILO à SIL4 de la norme sectorielle EN50129 ou conforme aux niveaux Class2 à Class1 de la norme sectorielle IEC61513. L'invention a également pour objet un calculateur comprenant un compilateur, le compilateur comportant un module de génération d'un premier exécutable à partir d'un code source correspondant à un logiciel, et des moyens de génération d'un second exécutable à partir du même code source. Le premier exécutable généré est destiné à être exécuté par une première unité de traitement et le deuxième exécutable généré est destiné à être exécuté par une deuxième unité de traitement, distincte de la première unité de traitement. Le code source comporte au moins une variable du type entier, et en ce que les moyens de génération sont propres à convertir le type entier de la ou chaque variable en type flottant lors de la génération du second exécutable. Suivant un mode particulier de réalisation, le calculateur comprend en outre une unité de calcul comportant lesdites première et seconde unités de traitement et une unité de vote, l'unité de calcul étant propre à exécuter, d'une part, le premier exécutable pour le traitement d'un ensemble de données d'entrée afin de générer un premier ensemble de données de sortie, et d'autre part, le second exécutable pour le traitement dudit ensemble de données d'entrée afin de générer un second ensemble de données de sortie, et l'unité de vote étant propre à générer un signal de vote en fonction du résultat d'une comparaison entre les premier et second ensembles de données de sortie. L'invention et ses avantages seront mieux compris à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif, et faite en se référant aux dessins annexés sur lesquels : - la Figure 1 est une représentation schématique d'un calculateur pour la mise en oeuvre d'un procédé de traitement de données en sécurité ; et - la Figure 2 est un organigramme représentant les étapes du procédé de traitement de données en sécurité. Pour le développement d'un logiciel de sécurité, lors de l'écriture d'un code source LO correspondant à ce logiciel de sécurité, le programmeur déclare chaque nouvelle variable en associant un type de variable à un nom. Parmi les différents types de variable classiquement à la disposition des programmeurs pour déclarer des entiers, il existe le type entier, signé ou non-signé (« lnteger » ou « Unsigned lnteger » en anglais) dénommé « int » ou « unsigned int » en langage C ou de nom similaires dans d'autres langages, utilisé pour des variables entières ou booléennes et codé en mémoire sur 2 ou 4 octets, c'est-à-dire 16 ou 32 bits. Il existe également le type chaîne de caractères (« unsigned character » en anglais) dénommé « unsigned char » en langage C, permettant de coder des entiers non signés prenant les valeurs 0 a 255 sur un octet, c'est-à-dire sur 8 bits. Ce type est parfois utilisé pour implémenter les variables booléennes. Dans ce qui suit, le terme « type entier » regroupe l'ensemble des types de variable permettant usuellement de déclarer des entiers et de les manipuler au moyen d'opérations arithmétiques ou logiques sur les entiers. Parmi les différents types de variable classiquement à la disposition des programmeurs pour déclarer des réelles avec une virgule flottante, il existe le type flottant (« Float » en anglais »), dénommé FLOAT, DOUBLE ou LONG DOUBLE en langage C, utilisé pour des variables réelles. Ainsi, selon la norme IEEE-754, le type flottant simple précision (FLOAT) permet de coder un réel en mémoire sur 4 octets (soit 32 bits : 23 bits de mantisse, 8 bits d'exposant et 1 bit de signe), le type flottant double précision (DOUBLE), sur 8 octets (soit 64 bits : 52 bits de mantisse, 11 bits d'exposant et 1 bit de signe), et le type flottant double précision étendue (LONG DOUBLE), sur 10 octets (soit 80 bits : 64 bits de mantisse, 15 bits d'exposant et 1 bit de signe).
Pour un logiciel de sécurité, utilisant des variables de type entier, les traitements correspondent soit à des opérations logiques, telles que ET, OU, etc., effectuées sur des données booléennes, 0 ou 1, soit à des opérations arithmétiques, tels que PLUS, MOINS, DIVISER, MULTIPLIER, effectuées sur des données entières, 0, 1, 2, 3, etc. Le logiciel de sécurité est destiné à être exécuté sur un calculateur 10. En se référant à la figure 1, le calculateur 10 comporte une interface d'entrée 12, une unité de calcul 14, une unité de vote 16 et une interface de sortie 18. Dans le mode de réalisation décrit ici en détail, le calculateur 10 et le compilateur 19 sont séparés En variante d'autres architectures sont envisageables. Par exemple, le compilateur est implanté dans le calculateur 10. Dans un autre exemple, le calculateur comportant l'unité de calcul est séparé d'un calculateur comportant l'unité de vote. Le calculateur 10 comporte un bus 20 de circulation des données entre l'interface d'entrée 12 et l'interface de sortie 18, l'unité de calcul 14, l'unité de vote 16 étant aptes à échanger des données avec le bus 20. Le compilateur 19 est au bus 20 pour échanger des données avec le bus 20.
L'interface d'entrée 12 est propre à recevoir des données d'entrée Din et à les transmettre à l'unité de calcul 14 via le bus 20. L'unité de calcul 14 comporte un microprocesseur 22 et une mémoire 24. Le microprocesseur 22 comporte plusieurs unités arithmétiques et, en particulier, une unité arithmétique pour les entiers 30 et une unité arithmétique pour les flottants 32.
L'unité arithmétique pour les entiers 30 (aussi dénommée « Arithmetic Logic Unit » en anglais) est dédiée aux opérations sur des variables du type entier. L'unité arithmétique pour les flottants 32 (aussi dénommée « Floating Point Unit » en anglais ») est dédiée aux opérations sur des variables du type flottant simple précision. En variante, le type flottant correspond au type flottant double précision, respectivement au type flottant double précision étendue, et le microprocesseur comporte une unité arithmétique pour les flottants double précision, respectivement pour les flottants double précision étendue, non représentée, qui est dédiée aux opérations sur des variables du type flottant double précision, respectivement les flottants double précision étendue.
La mémoire 24 est apte à stocker les instructions d'un premier exécutable L1 et d'un second exécutable L2 qui seront présentés ci-après, le microprocesseur 22 étant propre à exécuter le premier exécutable L1 et le second exécutable L2, sur les mêmes données d'entrée Din. Le microprocesseur 22 est propre à exécuter séquentiellement le premier exécutable L1, puis le second exécutable L2, à exécuter séquentiellement le second exécutable L2 puis le premier exécutable L1 et/ou à exécuter le premier exécutable L1 et le deuxième exécutable L2 en parallèle, selon un plan d'ordonnancement. La mémoire 24 comporte également une première zone mémoire 40 pour le stockage des valeurs des variables déclarées lors de l'exécution du premier exécutable L1. En particulier, cette première zone mémoire 40 permet de stocker l'ensemble des données de sortie Dout1 résultant du traitement des données d'entrée Din lors de l'exécution par le microprocesseur 22 du première exécutable L1. La mémoire 24 comporte une seconde zone mémoire 42 pour le stockage des valeurs des variables déclarées lors de l'exécution du second exécutable L2. En particulier, cette seconde zone mémoire 42 permet de stocker l'ensemble des données de sortie Dout2 résultant du traitement des données d'entrée Din lors de l'exécution par le microprocesseur 22 du second exécutable L2. L'unité de vote 16 est propre à traiter les données de sortie Dout1 (respectivement Dout2) ou une transformation représentative des données de sortie Dout1 (respectivement Dout2). Par la suite, les données de sortie Dout1 (respectivement Dout2) représentent l'ensemble des données de sortie ou une transformation représentative des données de sortie. L'unité de vote 16 comporte un moyen de lecture et de conversion 50 propre à lire le premier ensemble de données de sortie Dout1 dans la première zone mémoire 40 et à convertir ces données Dout1 du type entier vers le type flottant simple précision pour obtenir des données converties Dout1 conv, et à lire le second ensemble de données de sortie Dout2 dans la seconde zone mémoire 42. L'unité de vote 16 comporte un moyen de comparaison 52 conçu pour comparer entre eux les premier et second ensembles de données de sortie Dout1 conv, Dout2 lues et éventuellement converties par le moyen de lecture et de conversion 50. Le moyen de comparaison 52 est propre à mettre en oeuvre un critère de comparaison consistant, par exemple, à déterminer un écart entre une donnée Dout1 conv du premier ensemble dont le type a été converti et une donnée Dout2 correspondante du second ensemble. Cet écart correspond à une comparaison bit à bit de ces deux données Dout1 conv, Dout2 l'écart prenant la valeur booléenne 1 dès que deux bits sont différents ou la valeur booléenne 0 si tous les bits sont identiques. A noter que l'écart ne prend pas nécessairement les valeurs 1/0. En variante, l'écart prend les valeurs correspondantes faux/vrai ou écart/pas d'écart. Le critère mis en oeuvre par l'unité de vote 16 est vérifié lorsque tous les écarts ainsi calculés pour l'ensemble des données Dout1 conv, Dout2 sont tous égaux à zéro ou, dit autrement, qu'aucun écart ne présente la valeur 1.
En variante, le moyen de lecture et de conversion 50 est propre à lire le second ensemble de données de sortie Dout2 dans la seconde zone mémoire 42 et à convertir ces données Dout2 du type flottant vers le type entier pour obtenir des données converties Dout2 conv, et à lire le premier ensemble de données de sortie Dout1 dans la première zone mémoire 40. Selon cette variante, le moyen de comparaison 52 est propre à comparer entre eux les premier et second ensembles de données de sortie Dout1, Dout2 conv lues et éventuellement converties par le moyen de lecture et de conversion 50 Le moyen de comparaison 52 est alors propre à mettre en oeuvre un critère de comparaison consistant, par exemple, à déterminer un écart entre une donnée Dout1 du premier ensemble et une donnée Dout2 conv. Cet écart correspond à une comparaison bit à bit de ces deux données Dout1, Dout2 conv, l'écart prenant la valeur booléenne 1 dès que deux bits sont différents. Le critère mis en oeuvre par l'unité de vote 16 est vérifié lorsque tous les écarts ainsi calculés pour l'ensemble des données Dout1, Dout2 conv sont tous égaux à zéro ou, dit autrement, qu'aucun écart ne présente la valeur 1. Le moyen de comparaison 52 est également propre à transmettre à l'interface de sortie 18 le premier ensemble de données de sortie Dout1 en tant que donnée de sortie en sécurité Dout, ainsi qu'un signal de vote S binaire. Le signal de vote S prend la valeur booléenne 0 si les premier et second ensembles de données de sortie Dout1, Dout2 respectent le critère de comparaison mis en oeuvre par l'unité de vote 16. Sinon, le signal de vote S prend la valeur booléenne 1. L'interface de sortie 18 comporte, par exemple, un moyen d'affichage permettant d'afficher les données de sortie en sécurité Dout, ainsi que le signal de vote S. Le signal de vote S est, par exemple, affiché sous la forme d'un drapeau vert lorsque la valeur de ce signal est la valeur booléenne 0, ou bien sous la forme d'un drapeau rouge lorsque la valeur de ce signal est la valeur booléenne 1. Le compilateur 19 comporte un module 60 d'analyse de la syntaxe du code source LO et de conversion du type entier de chaque variable correspondante en type flottant, et un module 62 de compilation d'un code source donné en un exécutable selon des paramètres de compilation prédéfinis. Le module d'analyse et de conversion 60 est propre à générer un code source intermédiaire LO' à partir du code source LO, en convertissant, après analyse syntaxique, le type entier de chaque variable correspondante en type flottant. Le module de compilation 62 est connu en soi, et est propre dans le mode de réalisation décrit à compiler, d'une part, le code source LO en le premier exécutable L1, et d'autre part, le code source intermédiaire LO' en le second exécutable L2.
Le module d'analyse et de conversion 60 et le module de compilation 62 forment alors des moyens de génération du second exécutable L2 à partir du même code source LO. En variante, le compilateur 19 comporte le module de compilation 62 et une librairie de compilation, non représentée. Selon cette variante, le compilateur 19 ne comporte pas de module d'analyse de la syntaxe du code source LO et de conversion du type entier de chaque variable correspondante en type flottant. Le module de compilation 62 est propre à compiler ledit code source LO en associant, à la ou chaque variable du type entier, un fichier de la librairie de compilation correspondant à un type flottant, afin de générer le second exécutable L2. Le procédé de traitement de données en sécurité va maintenant être décrit en référence à la figure 2. A l'étape 100, un programmeur voulant réaliser un logiciel de sécurité écrit le code source LO. Les différentes variables utilisées dans ce code source LO sont du type entier.
A l'étape 110, le premier exécutable L1 est généré par compilation du code source LO à l'aide du module de compilation 62. Le premier exécutable L1 est ensuite stocké dans la mémoire 24 de l'unité de calcul 14. Dans le mode de réalisation décrit, les variables du premier exécutable L1 sont du type entier, étant donné que les variables du code source LO sont du type entier.
Par compilation, on entend l'utilisation d'un compilateur adapté, intégrant éventuellement un éditeur de lien pour l'intégration de codes binaires élémentaires provenant d'une librairie adaptée. A l'étape 120 de génération du code source intermédiaire LO', le module d'analyse et de conversion 60 analyse la syntaxe du code source LO et convertit le type entier de chaque variable, en type flottant simple précision IEEE-754, de manière à générer le code source intermédiaire L0'. Selon ce mode de réalisation, l'ensemble des entiers initialement codés sur 8 et 16 bits peut être converti, de manière exacte, sur la partie de mantisse des flottants simple précision. En variante, le module d'analyse et de conversion 60 analyse la syntaxe du code source LO et convertit le type entier de chaque variable, en type flottant double précision IEEE-754, de manière à générer le code source intermédiaire L0'. Selon cette variante de réalisation, l'ensemble des entiers initialement codés sur 8, 16 et 32 bits peut être converti de manière exacte sur la partie de mantisse des flottants double précision. Dans le mode de réalisation décrit, les variables du code source intermédiaire LO' sont toutes du type flottant, double précision ou bien simple précision, étant donné que les variables du code source LO sont toutes du type entier.
A l'étape 130, le second exécutable L2 est généré par compilation du code source intermédiaire LO' à l'aide du compilateur. Le second exécutable L2 est stocké dans la mémoire 24 de l'unité de calcul 14. Le même compilateur est de préférence utilisé pour générer le premier exécutable L1 et le second exécutable L2. Dans le mode de réalisation décrit, les variables du second exécutable L2 sont toutes du type flottant, double précision ou bien simple précision, étant donné que les variables du source intermédiaire LO' sont toutes du type flottant, double précision ou bien simple précision. Puis, périodiquement, pour chaque nouvel ensemble de données d'entrée Din transmis par l'interface d'entrée 12 à l'unité de calcul 14, le procédé se poursuit de la manière suivante. A l'étape 140, le premier exécutable L1 est d'abord exécuté par le microprocesseur 22 pour traiter l'ensemble de données d'entrée Din et générer le premier ensemble de données de sortie Dout1. Ces données de sortie Dout1 sont stockées dans la première zone mémoire 40.
Au cours de cette étape, puisque les variables du premier exécutable L1 sont toutes du type entier, le microprocesseur 22 fait uniquement appel à l'unité arithmétique pour les entiers 30. A l'étape 150, le second exécutable L2 est exécuté par le microprocesseur 22 pour traiter l'ensemble de données d'entrée Din et générer le second ensemble de données de sortie Dout2. Ces données de sortie Dout2 sont stockées dans la seconde zone mémoire 42. Au cours de cette étape, puisque les variables du second exécutable L2 sont toutes du type flottant, double précision ou bien simple précision, le microprocesseur 22 fait uniquement appel à l'unité arithmétique pour les flottants 32.
Les étapes 140 et 150 sont effectuées séquentiellement (étape 140 puis étape 150 ou inversement) ou en parallèle. A l'étape 160, l'unité de vote 16 lit les premier et second ensembles de données de sortie, Dout1 et Dout2, et convertit des données du premier ensemble Dout1 du type entier vers le type flottant pour obtenir les données converties Dout1 conv.
En variante, l'unité de vote 16 lit les premier et second ensembles de données de sortie, Dout1 et Dout2, et convertit des données du second ensemble Dout2 du type flottant vers le type entier pour obtenir les données converties Dout2 conv. A l'étape 170, l'unité de vote 16 compare chaque donnée convertie du premier ensemble Dout1 conv avec la donnée correspondante du second ensemble de données Dout2. Cette comparaison consiste à comparer, par exemple bit à bit, ces deux données. Si elles sont identiques, l'écart entre ces données prend la valeur booléenne nulle, à défaut il prend la valeur booléenne unité. Le critère de comparaison n'est pas vérifié dès qu'un écart entre deux données prend la valeur unité. Selon la variante précitée, l'unité de vote 16 compare chaque donnée convertie du second ensemble Dout2 conv avec la donnée correspondante du premier ensemble de données Dout1. Si les premier et second ensembles de données de sortie Dout1, Dout2 vérifient le critère de comparaison, le signal de vote S prend la valeur nulle. Dans le cas contraire, le signal de vote S prend la valeur unité. A l'étape 180, l'unité de vote 16 transmet vers l'interface de sortie 18 le premier ensemble de données de sortie Dout1 en tant que données de sortie en sécurité Dout, ainsi que le signal de vote S généré lors de l'étape 170. A l'étape 190, l'interface de sortie 18 affiche les données de sortie en sécurité Dout qui lui ont été transmises, ainsi que le signal de vote S. Le signal de vote S est par exemple inclus dans les données (par exemple valeur explicite, codage des données) ou séparé des données. Dans le mode de réalisation précédent, la conversion du type entier vers le type flottant s'effectue au niveau du langage du code source via la génération du code source intermédiaire LO', celui-ci étant ensuite compilé. De préférence, les données de sortie Dout présentent un niveau de sécurité conforme au niveau SIL4 de la norme généraliste IEC61508 et au niveaux inférieurs (SILO à SIL3) de celui-ci ou conforme aux niveaux: SILO à SIL4 de la norme sectorielle EN50129 ou conforme aux niveaux Class2 à Class1 de la norme sectorielle IEC61513. En variante, cette conversion du type entier vers le type flottant s'effectue directement lors de la compilation du code source LO. Le compilateur comporte alors, par exemple, une option de compilation permettant d'activer un module de l'éditeur de lien propre, à chaque fois qu'une variable entière est déclarée dans le code source LO, à utiliser un fichier de la librairie qui correspond au type flottant, au lieu d'utiliser le fichier de la librairie qui correspond au type entier. La présente invention s'applique à tout logiciel, mais est particulièrement bien adaptée au cas d'un logiciel de sécurité travaillant sur des variables entières. En conséquence, lors de l'exécution d'un exécutable résultant de la simple compilation du code source d'un logiciel de sécurité, le microprocesseur utilise uniquement son unité arithmétique pour les entiers. De plus, en convertissant systématiquement le type des variables afin de mettre en oeuvre une redondance de traitement, on garantit que le microprocesseur utilisera uniquement son unité arithmétique pour les flottants lors de la mise en oeuvre de la redondance du traitement. De cette manière, par une redondance du type des variables utilisées, à savoir le type entier pour le premier exécutable L1 et le type flottant pour le deuxième exécutable L2, le procédé de traitement selon l'invention permet la redondance du traitement des données par une diversification des moyens de traitement, et améliore ainsi la fiabilité des données délivrées à l'issue du traitement.
Les inventeurs ont constaté avec surprise que le type flottant double précision IEEE-754 était particulièrement adapté comme type particulier de flottant pour la mise en oeuvre du procédé selon l'invention, alors que ce type de flottant n'est habituellement pas utilisé pour faire de la logique booléenne ou de l'arithmétique entière. En effet, la partie de mantisse des flottants double précisions, par exemple suivant la norme IEEE-754, permet de représenter de façon exacte les entiers codés sur 32 bits. Les nombres entiers sur 32 bits ont donc toujours une représentation exacte dans le type flottant double précision IEEE-754, puisque le nombre de bits qui les composent, à savoir 32, est strictement inférieur à 52 bits qui est le nombre de bits composant la mantisse des flottants double précisions IEE-754.
Le type flottant simple précision IEEE-754 avec ses 23 bits de mantisse permet de représenter de façon exacte les entiers codés sur 8 ou 16 bits.

Claims (13)

  1. REVENDICATIONS1. Procédé de traitement de données, mis en oeuvre par un calculateur (10) comportant un compilateur (19), le procédé de traitement comprenant les étapes suivantes : une première étape (110) de génération d'un premier exécutable (L1) à partir d'un code source (LO) correspondant à un logiciel ; une deuxième étape (120 ; 130) de génération d'un second exécutable (L2) à partir du même code source (LO) ; le premier exécutable généré (L1) étant destiné à être exécuté par une première unité de traitement (30) et le deuxième exécutable généré (L2) étant destiné à être exécuté par une deuxième unité de traitement (32), distincte de la première unité de traitement (30), le procédé de traitement étant caractérisé en ce que le code source (LO) comporte au moins une variable du type entier et, lors de l'étape (120 ; 130) de génération du second exécutable (L2), le type entier de la ou chaque variable est converti en type flottant.
  2. 2.- Procédé selon la revendication 1, dans lequel l'étape de génération du premier exécutable (L1) consiste à compiler ledit code source (LO) à l'aide du compilateur (19, 62).
  3. 3.- Procédé selon la revendication 2, dans lequel l'étape de génération du second exécutable consiste à créer (120) un code source intermédiaire (L0') en remplaçant, dans ledit code source (LO), chaque déclaration d'une variable du type entier par la déclaration d'une variable du type flottant, puis à compiler (130) ledit code source intermédiaire (L0') en utilisant le compilateur (19, 62) mis en oeuvre lors de l'étape (110) de génération du premier exécutable (L1).
  4. 4.- Procédé selon la revendication 2, dans lequel l'étape de génération du second exécutable (L2) consiste à compiler ledit code source (LO) en associant, à la ou chaque variable du type entier, un fichier d'une librairie (64) correspondant à un type flottant.35
  5. 5.- Procédé selon l'une quelconque des revendications précédentes, dans lequel, une unité de calcul (14) comportant lesdites première et seconde unités de traitement (30, 32), le procédé comprend en outre les étapes suivantes : - une étape (140) d'exécution par l'unité de calcul (14) du premier exécutable (L1) pour le traitement d'un ensemble de données d'entrée (Din) afin de générer un premier ensemble de données de sortie (Dout1) ; une étape (150) d'exécution par l'unité de calcul (14) du second exécutable (L2) pour le traitement dudit ensemble de données d'entrée (Din) afin de générer un second ensemble de données de sortie (Dout2) ; et une étape (160 ; 170) de vote par une unité de vote (16) consistant à générer un signal de vote (S) en fonction du résultat d'une comparaison entre les premier et second ensembles de données de sortie (Dout1, Dout2).
  6. 6.- Procédé selon la revendication 5, dans lequel l'étape de génération du signal de vote (S) comprend : - la conversion (160) du premier ensemble de données de sortie (Dout1), les données du type entier étant converties en données de sortie du type flottant ; - la comparaison de chaque donnée de sortie convertie (Dout1 conv) avec une donnée correspondante du second ensemble de données de sortie (Dout2). 20
  7. 7.- Procédé selon la revendication 5, dans lequel l'étape de génération d'un signal de vote (S) comprend : - la conversion du second ensemble de données de sortie (Dout2), les données du type flottant étant converties en données de sortie du type entier ; 25 - la comparaison de chaque donnée de sortie convertie avec une donnée correspondante du premier ensemble de données de sortie (Dout1).
  8. 8.- Procédé selon l'une quelconque des revendications précédentes, dans lequel le type flottant est un flottant double précision conforme à la norme IEEE-754. 30
  9. 9.- Procédé selon l'une quelconque des revendications précédentes, dans lequel chaque variable du code source (LO) est du type entier.
  10. 10.- Procédé selon la revendication 9 prise avec la revendication 5, dans lequel 35 ladite première unité de traitement est une unité arithmétique pour les entiers (30) dédiée aux opérations sur des variables du type entier et ladite seconde unité de traitement estune unité arithmétique pour les flottants (32) dédiée aux opérations sur des variables du type flottant, et dans lequel l'étape d'exécution (140) du premier exécutable (L1) est effectuée par l'unité arithmétique pour les entiers (30) et la étape d'exécution (150) du second exécutable (L2) est effectuée par l'unité arithmétique pour les flottants (32).
  11. 11.- Procédé selon l'une quelconque des revendications précédentes, dans lequel le procédé comporte en outre une étape (190) de délivrance de données de sortie (Dout) correspondant au premier ensemble de données de sortie (Dout1), et les données de sortie (Dout) présentent un niveau de sécurité conforme au niveau SIL4 de la norme généraliste IEC61508 et au niveaux inférieurs (SILO à SIL3) de celui-ci ou conforme aux niveaux: SILO à SIL4 de la norme sectorielle EN50129 ou conforme aux niveaux Class2 à Class1 de la norme sectorielle IEC61513.
  12. 12.- Calculateur (10) comprenant un compilateur (19), le compilateur (19) comportant un module (62) de génération d'un premier exécutable (L1) à partir d'un code source (LO) correspondant à un logiciel, et des moyens (60, 62 ; 62) de génération d'un second exécutable (L2) à partir du même code source (LO), le premier exécutable généré (L1) étant destiné à être exécuté par une première unité de traitement (30) et le deuxième exécutable généré (L2) étant destiné à être exécuté par une deuxième unité de traitement (32), distincte de la première unité de traitement (30), caractérisé en ce que le code source (LO) comporte au moins une variable du type entier, et en ce que les moyens de génération (60, 62) sont propres à convertir le type entier de la ou chaque variable en type flottant lors de la génération du second exécutable (L2).
  13. 13.- Calculateur (10) selon la revendication 12, dans lequel le calculateur (10) comprend en outre une unité de calcul (14) comportant lesdites première et seconde unités de traitement (30, 32) et une unité de vote (16), l'unité de calcul (14) étant propre à exécuter, d'une part, le premier exécutable (L1) pour le traitement d'un ensemble de données d'entrée (Din) afin de générer un premier ensemble de données de sortie (Dout1), et d'autre part, le second exécutable (L2) pour le traitement dudit ensemble de données d'entrée (Din) afin de générer un second ensemble de données de sortie (Dout2) ; etl'unité de vote (16) étant propre à générer un signal de vote (S) en fonction du résultat d'une comparaison entre les premier et second ensembles de données de sortie (Dout1, Dout2).
FR1256229A 2012-06-29 2012-06-29 Procede de traitement de donnees en securite, et calculateur associe Active FR2992749B1 (fr)

Priority Applications (3)

Application Number Priority Date Filing Date Title
FR1256229A FR2992749B1 (fr) 2012-06-29 2012-06-29 Procede de traitement de donnees en securite, et calculateur associe
PCT/EP2013/063712 WO2014001543A1 (fr) 2012-06-29 2013-06-28 Procédé de traitement de données en sécurité, et calculateur associé
EP13732927.2A EP2867774A1 (fr) 2012-06-29 2013-06-28 Procédé de traitement de données en sécurité, et calculateur associé

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1256229A FR2992749B1 (fr) 2012-06-29 2012-06-29 Procede de traitement de donnees en securite, et calculateur associe

Publications (2)

Publication Number Publication Date
FR2992749A1 true FR2992749A1 (fr) 2014-01-03
FR2992749B1 FR2992749B1 (fr) 2014-08-08

Family

ID=47294933

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1256229A Active FR2992749B1 (fr) 2012-06-29 2012-06-29 Procede de traitement de donnees en securite, et calculateur associe

Country Status (3)

Country Link
EP (1) EP2867774A1 (fr)
FR (1) FR2992749B1 (fr)
WO (1) WO2014001543A1 (fr)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016142159A1 (fr) * 2015-03-11 2016-09-15 Siemens Aktiengesellschaft Système informatique lié à la sécurité

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3629177B1 (fr) * 2018-09-28 2021-09-01 Sick Ag Procédé de vérification du fonctionnement d'un moyen de traitement de données électronique

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050204194A1 (en) * 2004-02-27 2005-09-15 Curry John W. Detecting floating point hardware failures
WO2012016574A1 (fr) * 2010-08-03 2012-02-09 Siemens Aktiengesellschaft Arithmétique à virgule flottante avec détection d'erreur

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102008043374A1 (de) 2008-10-31 2010-05-06 Robert Bosch Gmbh Vorrichtung und Verfahren zur Generierung redundanter, aber unterschiedlicher Maschinencodes aus einem Quellcode zur Verifizierung für ein sicherheitskritisches System

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050204194A1 (en) * 2004-02-27 2005-09-15 Curry John W. Detecting floating point hardware failures
WO2012016574A1 (fr) * 2010-08-03 2012-02-09 Siemens Aktiengesellschaft Arithmétique à virgule flottante avec détection d'erreur

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
AMMANN P E ET AL: "DATA DIVERSITY: AN APPROACH TO SOFTWARE FAULT TOLERANCE", IEEE TRANSACTIONS ON COMPUTERS, IEEE SERVICE CENTER, LOS ALAMITOS, CA, US, vol. 37, no. 4, 1 April 1988 (1988-04-01), pages 418 - 425, XP000648378, ISSN: 0018-9340, DOI: 10.1109/12.2185 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016142159A1 (fr) * 2015-03-11 2016-09-15 Siemens Aktiengesellschaft Système informatique lié à la sécurité
CN107430539A (zh) * 2015-03-11 2017-12-01 西门子公司 安全相关的计算机系统
US10489228B2 (en) 2015-03-11 2019-11-26 Siemens Mobility GmbH Safety-relevant computer system
CN107430539B (zh) * 2015-03-11 2020-09-25 西门子交通有限公司 安全相关的计算机系统

Also Published As

Publication number Publication date
EP2867774A1 (fr) 2015-05-06
WO2014001543A1 (fr) 2014-01-03
FR2992749B1 (fr) 2014-08-08

Similar Documents

Publication Publication Date Title
CN109523383B (zh) 一种智能合约转换系统及方法
WO2020190542A1 (fr) Recherche d'une architecture neuronale sensible à la quantification
EP3924894A1 (fr) Recherche d'architecture neuronale à largeur de bit différentielle
EP2860656B1 (fr) Procédé d'exécution par un microprocesseur d'un code binaire polymorphique d'une fonction prédéterminée
EP1527387A2 (fr) Logiciel de generation de code d application informatique et langage de description de logiciel
BE1008621A3 (fr) Procedure et procede de communication entre machines et procede generalise de preparation de programmes afferents.
WO2015035827A1 (fr) Procédé et appareil pour assurer le cryptage et le décryptage de chaînes dans des fichiers de programme
CA2656125C (fr) Dispositif et procede d'encodage de type cabac
FR3003665A1 (fr) Procede de transmission hybride de messages a memoire partagee
EP0018298B1 (fr) Procédé pour obtenir un résultat de calcul numérique en représentation au virgule flottante avec le nombre de chiffres significatifs exacts dans ce résultat et dispositif de calcul numérique mettant en oeuvre ce procédé
FR2967275A1 (fr) Procede, programme d'ordinateur et dispositif de securisation de code intermediaire de programmation pour son execution par une machine virtuelle
FR2992749A1 (fr) Procede de traitement de donnees en securite, et calculateur associe
US10216502B2 (en) System module deployment optimization
WO2022207573A1 (fr) Autoencodeur multimodal a fusion de donnees latente amelioree
Beaulieu et al. Fossils do not substantially improve, and may even harm, estimates of diversification rate heterogeneity
US20170083637A1 (en) Condition analysis
EP3846047A1 (fr) Procédé et système d'identification de variables pertinentes
CN111381768B (zh) 一种数据监控的方法和装置
FR3021769A1 (fr) Dispositif et procede de generation d'au moins un fichier informatique pour la realisation d'une interface graphique d'un equipement electronique, et produit programme d'ordinateur associe
US10929213B2 (en) Residue prediction of packed data
WO2019058047A1 (fr) Procédé d'exécution d'un code machine d'une fonction sécurisée
WO2011058260A1 (fr) Procede et dispositif d'optimisation d'execution d'applications logicielles dans une architecture multiprocesseur comprenant plusieurs controleurs d'entree/sortie et unites de calcul secondaires
EP0606802A1 (fr) Procédé de détection des erreurs d'exécution d'un logiciel
FR2799018A1 (fr) Systeme informatique securise
WO2014195141A1 (fr) Accelerateur materiel pour la manipulation d'arbres rouges et noirs

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

TP Transmission of property

Owner name: ALSTOM TRANSPORT TECHNOLOGIES, FR

Effective date: 20170811

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 9

PLFP Fee payment

Year of fee payment: 10

PLFP Fee payment

Year of fee payment: 11

PLFP Fee payment

Year of fee payment: 12

PLFP Fee payment

Year of fee payment: 13