• Aucun résultat trouvé

Approches de vérification combinée - Données et flot de contrôle

Chapitre I : Etat de l’art

I.6. Approches de vérification combinée - Données et flot de contrôle

I.6.1. Exemples de méthodes de vérification combinée 

I.6.1.1. Détection des erreurs de données et de flot de contrôle à l’aide d’un watchdog [Bens. 03]

L’approche proposée dans [Bens. 03] permet de vérifier à la fois le flot de contrôle et les

données. Elle utilise la méthode RECCO décrite dans le paragraphe 1.5.1 et définie dans

[Bens. 00], pour déterminer et vérifier les variables critiques.

Les erreurs de flot de contrôle ont été classées en deux catégories :

Les instructions dans un même bloc ne sont pas exécutées correctement,

Les branchements ne sont pas exécutés dans le bon ordre.

Le premier problème peut être résolu en calculant une signature pour chaque bloc à partir des codes des opérations des instructions de ce bloc. Une signature globale est calculée hors ligne et stockée dans la mémoire interne du watchdog. Pendant l’exécution le watchdog recalcule la signature de chaque bloc et la compare avec la signature globale.

Le deuxième problème a déjà été résolu dans [Bens. 01] avec l’adoption d’une méthode ESM à

base d’expressions régulières : à chaque bloc du programme est associé un label unique. En utilisant cette notation, l’exécution correcte du programme génère un langage composé de toutes les chaines obtenues à partir de la concaténation des symboles correspondant aux blocs parcourus. Une exécution est considérée comme correcte si le chemin suivi est correct par rapport au langage.

Pour [Bens. 01] la majorité des erreurs de type branchement inter-blocs sont détectées sauf les

cas suivants :

Tous les cas de branchements à partir de la fin d’un bloc vers le milieu du bloc suivant ne

Quelques cas de branchement illégaux à partir du milieu d’un bloc vers le milieu ou la fin d’un autre bloc ne sont pas détectés : dans le cas d’un branchement conditionnel, tant que l’instruction « write » du bloc correspondant au prédicat P n’a pas encore été effectuée, il peut y avoir un branchement illégal vers le début (2a) ou le milieu (2b) du bloc correspondant au prédicat P.

Tableau I-III: Erreurs détectées par les méthodes [Bens. 01] et [Bens. 03]

Erreurs de séquencement Erreurs sur des instructions de

branchement

Erreurs sur des instructions de non branchement Traitement des exceptions Erreurs sur le contenu des instructions

A B C D E F A’ B’ C’ D’ E’ en except. Départs des except. Retour

Traitement des sous- programmes

[Bens. 03] + - + + + NC - NC - - NC - - + +

[Bens. 01] - - + + + - - +/- - - +/- - - + +

Tableau I-IV: Caractéristiques générales des méthodes [Bens. 01] et [Bens. 03]

Coût DSM/ ESM Vérifications imposées Taux de couverture Temps de latence Perf. Mém. Surf.

[Bens. 03] DSM Blocs linéaires – E/S mémoire

30-70% NC 60% NC NC

[Bens. 01] ESM Blocs linéaires 24-81% NC 116,66%-

300%

8,33%-21,5%

0

I.6.1.2. Détection des erreurs d'accès aux données [Wilk. 97]

[Wilk. 93] propose une approche de vérification des accès mémoire permettant de détecter les

erreurs logicielles et certaines erreurs matérielles. La technique proposée crée une redondance dans les structures de données en ajoutant une signature dans chaque instance des structures (Data Structure Signature - DSS). Le DSS est une constante définie à la création de la structure et placée dans le mot qui précède le premier élément de la structure. La figure 1-17 illustre un exemple de structure de données redondante.

Figure 1-17 : Transformation d’une structure de données (4-A : Structure classique, 4-B : Structure redondante)

Dans une structure redondante, le pointeur sur la structure continue de pointer sur le premier élément, ceci permet au programme de continuer d’accéder aux éléments de la structure de la manière habituelle.

Le DSS exploite la redondance spatiale pour la détection des accès mémoire erronés de la manière suivante : pour un pointeur p qui pointe sur une structure de données, le compilateur connait le décalage (égal à -1) entre le pointeur et DSS. Ainsi, le compilateur peut insérer des instructions qui vérifient le pointeur p par chargement de la valeur à l'emplacement p-1, et en comparant cette valeur avec la signature de référence pour cette structure de données. Si une erreur s’est produite, la vérification des DSS d'exécution permet de la détecter.

[Wilk. 97] mixe la redondance des structures de données, basée sur les DSS, et la vérification de

flot de contrôle avec signatures de justification [Namj. 82]. En effet, cette vérification permet de

surveiller les DSS en même temps que les signatures de flot de contrôle.

La méthode utilise les variations dans les signatures pour détecter les erreurs. La figure 1-18-A montre la technique basique de CFC. Afin de réduire le surcoût en mémoire les signatures d’ajustement sont utilisées comme illustré dans la figure 1-18-B. Celles-ci permettent de garder la cohérence dans le calcul de signature quand deux chemins différents peuvent être pris.

Figure 1-18 : Placement des signatures dans un programme (18-A Technique CFC classique, 18-B Technique CFC avec des signatures d’ajustement)

La mise à jour de la signature se fait avec la formule suivante : Si+1 = Siα⊕ Ii DSSi, où est la

signature courante et I est le code machine de l’instruction de chargement du DSS. Pour les

Tableau I-V: Erreurs détectées par la méthode [Wilk. 97]

Erreurs de séquencement Erreurs sur des instructions de

branchement

Erreurs sur des instructions de non branchement Traitement des exceptions Erreurs sur le contenu des instructions

A B C D E F A’ B’ C’ D’ E’ en except. Départs des except. Retour

Traitement des sous programme

[Wilk. 97] + - + + + + - + + + + - NC NC NC

Tableau I-VI: Caractéristiques générales de la méthode [Wilk. 97]

Coût DSM/ ESM Vérifications imposées Taux de couverture Temps de latence Perf. Mém. Surf.

[Wilk. 97] ESM Blocs linéaires 65% - 100% NC 0% -13% 0%-120% NC

I.6.2. Synthèse sur les méthodes de vérification combinée 

Plusieurs méthodes de vérification combinée sont présentes dans la littérature, mais aucune d’elles ne présente un taux de couverture maximal à cause des lacunes dans leurs approches de vérification de flot de contrôle.