• Aucun résultat trouvé

Application : analyse de logiciels embarqu´es avioniques critiques

N/A
N/A
Protected

Academic year: 2022

Partager "Application : analyse de logiciels embarqu´es avioniques critiques"

Copied!
69
0
0

Texte intégral

(1)

Application : analyse de logiciels embarqu´ es avioniques critiques

TAS : Typage et analyse statique M2, Master STL INSTA, Sorbonne Universit´e

Antoine Min´e

Ann´ee 2018–2019

Cours 14 4 avril 2019

(2)

Plan

Introduction

L’analyseur Astr´eede programmes C embarqu´es synchrones conception d’un analyseur sp´ecialis´e

exemples d’abstractions r´esultats exp´erimentaux

L’analyseur Astr´eeAde programmes C embarqu´es concurrents analyse modulaire thread `a thread avec interf´erences

r´esultats exp´erimentaux

(3)

Introduction

Introduction

(4)

V´ erification des logiciels avioniques

Les logiciels avioniques critiques doivent ˆetrecertifi´es: obligation l´egale

processus r´egul´e par des standards internationaux(DO-178B, DO-178C)

plus de la moiti´edes coˆuts de d´eveloppement

essentiellement bas´e sur des campagnes massives detests et sur la relecture de codepar des pairs(par des humains)

Tendance :

l’utilisation dem´ethodes formellesest officiellement reconnue

(DO-178C, DO-333)

au niveau binaire, pour remplacer le test

auniveau du source, pourremplacer la relecture de code auniveau du source, pourremplacer le test

si la correspondance entre source et binaire est aussi certifi´ee pour v´erifier la robustesse et l’absence d’erreur `a l’ex´ecution

=⇒les m´ethodes formelles permettent d’am´eliorer l’efficacit´e et de r´eduire le coˆut de la certification !

(5)

Introduction

M´ ethodes formelles chez Airbus

Preuve de programme : m´ethodes d´eductives

propri´et´es fonctionnellesdepetits morceaux de code s´equentielC remplace le teste unitaire

pas enti`erement automatis´e outilCaveat(CEA, voir aussi FramaC)

Analyse statique sˆure :

analyseenti`erementautomatique de grosses applications, pour des propri´et´esnon fonctionnelles

temps d’ex´ecution maximal, utilisation maximale de pile sur du binaire : aiT, StackAnalyzer(AbsInt)

absence d’erreur `a l’ex´ecution sur du code Cs´equentiel: analyseurAstr´ee(AbsInt)

(d´epassements de capacit´e, erreurs arithm´etiques, d´epassements de tableaux, etc.)

Compilation certifi´ee :

permet l’analyse au niveau dusourcedecertifieraussi lecode binaire

(s´equentiel)

compilateur C CompCert, certifi´e enCoq(INRIA)

(6)

Analyse statique sˆ ure

Avantages :

analyse directe du code source(pas d’un mod`ele s´epar´e)

automatique(facile `a utiliser par le programmeur, peu d’interaction n´ecessaire)

efficace

approxim´ee(pour contourner les probl`emes d’ind´ecidabilit´e et de performance)

Sˆuret´e :

bas´ee sur la s´emantique (sp´ecification C, entiers machines, flottants, pointeurs, . . . )

couverture totale du contrˆole et des donn´ees

les propri´et´es d´emontr´ees par l’analyseur sont vraies de toutes les ex´ecutions

=⇒aucune erreur n’est oubli´ee :pas de faux n´egatif la sˆuret´e estimpos´eepar le standard DO-178

(7)

L’analyseur statique Astr´ee

L’analyseur statique Astr´ ee

(8)

L’analyseur statique Astr´ ee

Analyseur statique de programmes temps-r´eelsembarqu´es

d´evelopp´e `a l’ENS(2001–2009)

B. Blanchet, P. Cousot, R. Cousot, J. Feret, L. Mauborgne, D. Monniaux, A. Min´e, X. Rival industrialis´e et commercialis´e parAbsInt

(depuis 2009)

Astr´ ee

www.astree.ens.fr

AbsInt

www.absint.com

(9)

L’analyseur statique Astr´ee

L’analyseur statique Astr´ ee

(10)

L’analyseur statique Astr´ee

Analyseur statique sp´ ecialis´ e

Principe :

1 Partir d’un analyseursimple, rapide, peu pr´ecis

avec un domaine exprimant les propri´et´es d’int´erˆet(e.g., intervalles)

et d’un programme caract´eristique dans la classe d’int´erˆet

2 Raffiner manuellementl’analyseur jusqu’`a atteindre 0 fausse alarme d´eterminer quelles propri´et´es interm´ediaires ne sont pas inf´er´ees ajouter un nouveau domaine abstrait

si la propri´et´e n’est pas d´ej`a exprimable

utilisation d’op´erateurs abstraits rapides et minimalistes,

limiter le p´erim`etre d’activation du domaine (variables, portions de programme) pour rester efficace

ou raffiner des op´erateurs abstraits dans les domaines existants ou ajouter des r´eductions entre domaines existants

ou raffiner les param`etres de pr´ecision

erim`etre d’activation, param`etres d’it´eration, . . .

(11)

L’analyseur statique Astr´ee

Analyseur statique sp´ ecialis´ e

Principe :

1 Partir d’un analyseursimple, rapide, peu pr´ecis

avec un domaine exprimant les propri´et´es d’int´erˆet(e.g., intervalles)

et d’un programme caract´eristique dans la classe d’int´erˆet

2 Raffiner manuellementl’analyseur jusqu’`a atteindre 0 fausse alarme d´eterminer quelles propri´et´es interm´ediaires ne sont pas inf´er´ees ajouter un nouveau domaine abstrait

si la propri´et´e n’est pas d´ej`a exprimable

utilisation d’op´erateurs abstraits rapides et minimalistes,

limiter le p´erim`etre d’activation du domaine (variables, portions de programme) pour rester efficace

ou raffiner des op´erateurs abstraits dans les domaines existants ou ajouter des r´eductions entre domaines existants

ou raffiner les param`etres de pr´ecision

erim`etre d’activation, param`etres d’it´eration, . . .

(12)

Analyseur statique sp´ ecialis´ e

R´esultat

analyseursˆurpar construction efficacepar parcimonie

0fausse alarme sur le programme cible encourage une conception modulaire et des abstractions r´eutilisables Justification th´eorique :

pour chaque programme et propri´et´e, un domaine ad´equat existe

mais sa construction effective n’est pas m´ecanisable

un domaine donn´e fonctionne sur un nombre infini de programmes toute combinaison finie de domaines ´echoue

sur un nombre infini de programmes

En pratique,un analyseur sera pr´ecis sur toute une classe de programmes La suppression des fausses alarmes au cas par cas n´ecessite un affinage des param`etres de pr´ecision (qui peut souvent ˆetre effectu´e par l’utilisateur)

(13)

L’analyseur statique Astr´ee

L’analyseur sp´ ecialis´ e Astr´ ee

Sp´ecialis´e pour :

l’analyse deserreurs `a l’ex´ecution

epassements arithm´etiques, d´epassements de tableaux, divisions par 0, etc.

les logicielsC embarqu´es critiques

pas d’allocation dynamique de m´emoire, pas de r´ecursivit´e

et en particulier les logiciels de contrˆole/commande

programmes r´eactifs, avec des calculs flottants intensifs structure de contrˆole simple, structures de donn´ees simples

lavalidation

toutes les erreurs sont trouv´ees, et peu de fausses alarmes

Environ40 domaines abstraitssont utilis´es simultan´ement

(14)

Logiciels de contrˆ ole/commande synchrones

Code r´eactif con¸cu dans un langage graphique, puis compil´e en C

(Scade, Simulink)

Structure

initialisation desvariables d’´etat while ( clock ≤ 3 600 000 ) {

lireles entr´ees des senseurs (volatile) calculerles sorties et lenouvel ´etat

´ecrireles sorties dans les actuateurs attendre le prochaintickd’horloge }

l’espace d’´etat globalest tr`es grand ('10Kvariables)

les structures de donn´ees restent simples (tableaux)

nombreuxcalculs num´eriques flottants (interpolation, filtrage digital)

la structure de contrˆole est tr`es plate

(l’inlining de appels de fonctions est possible)

(15)

L’analyseur statique Astr´ee

Diagramme de bloc : exemple de filtre digital

chaque bloc est une (petite) fonction C pr´ed´efinie une boˆıte a des variables d’´etat, r´emanentes (static) les entr´ees sont volatiles,

uniquement born´ees par des contraintes physiques(senseurs)

(16)

S´ emantique concr` ete d’Astr´ ee

S´emantique concr`ete : d´efinie par lanorme C99(programmes portables)

lanorme IEEE 754-1985(calculs en virgule flottante)

des param`etres sp´ecifiques `a chaque architecture

(sizeof, endianess,struct, etc.)

des param`etres du compilateur et du linker (initialisation, etc.)

Propri´et´es d’int´erˆet : absence d’erreur `a l’ex´ecution pas ded´epassement de capacit´een entier ni en flottant

pasd’op´eration arithm´etique invalide (/0,<<33)

pasd’acc`es de tableau ou de pointeur invalide respect des assertions introduites dans le programme

par le programmeur (assert)

i.e., l’inaccessibilit´e d’un ´etat de programme invalide

(17)

L’analyseur statique Astr´ee

S´ emantique apr` es une erreur

Plusieurs s´emantiques sont envisageablesapr`es une erreur: arrˆeterle programme (i.e., l’op´erateur retourne⊥)

division ou modulo par z´ero

d´epassement de capacit´e en flottant (selon la configuration du FPU)

´

echec d’unassert retourner une valeur arbitraire

(non d´eterminisme dans l’ensemble des valeurs autoris´ees par le type)

d´ecalage de bit invalide r´esultat bien d´efini

arithm´etique modulo 2n en entiers non sign´es type-punning

(r´e-interpr´etation d’un motif de bits comme une valeur d’un autre type)

comportement totalement ind´efini acc`es m´emoire invalide

=⇒trait´e comme un arrˆet de programme

Certains comportements peuvent ˆetre param´etr´es par l’utilisateur Toujours continuer l’analyse apr`es une alarme si cela a un sens !

(18)

Vue g´ en´ erale de l’analyseur

pr´e-processeur C (cpp)

analyse lexicale C99

´edition de lien(linker)au niveau source

g´en´eration de code interm´ediaire et typage

propagation des constantes et simplification du code

analyse de d´ependances

interpr`ete abstrait

nombreux points communs avec lefront-endd’un compilateur

(19)

L’analyseur statique Astr´ee

L’interpr` ete abstrait d’Astr´ ee

it´erateur sur la syntaxe

domaine de partitionnement de traces l

domaine de structure m´emoire l

domaine de pointeurs l

(produit r´eduit de)domaines abstraits num´eriques

l l l l ...

intervalles octogones arbres de d´ecisions filtres . . .

(20)

Quelques domaines abstraits utilis´ es dans Astr´ ee

octogones congruences arbres de d´ecision bool´eens

±X±Y c Xa[b] disjonctions

[Min´e 2006] [Granger 1989] [Mauborgne]

–100 –80 –60 –40 –20 0 20 40 60 80 100

y

–100 –80–60–40–20 20406080100 x

ellipso¨ıdes exponentielles partitionnement de traces

filtres digitaux X(1 +α)βt disjonctions

[Feret 2005] [Feret 2005] [Mauborgne Rival 2005]

(21)

L’analyseur statique Astr´ee

Exemple : paquets d’octogones

Invariants :∧ij±Xi±Xj ≤cij; coˆutcubique

Un coˆutO(|V|n) avecn>1 est trop ´elev´e en pratique

Solution

Ne pas mettre toutes les variablesVdans ununique octogone Cr´eer `a la place de nombreuxpetits “paquets” d’octogones:

d´etermin´es par unepr´e-analyse de d´ependance

ne relier dans un octogone que les variables modifi´ees ensemble interrompre les chaˆınes de d´ependances aux fronti`eres des blocs syntaxiques (limiter la clˆoture transitive)

R´esultat : sur le type de programmes consid´er´es

nombre d’octogones lin´eaire en|V|et donc|P| (taille du programme)

taille des octogones constante, petite ('4)

=⇒coˆut lin´eaire en pratique

(22)

Exemple : paquets d’octogones

Invariants :∧ij±Xi±Xj ≤cij; coˆutcubique

Un coˆutO(|V|n) avecn>1 est trop ´elev´e en pratique

Solution

Ne pas mettre toutes les variablesVdans ununique octogone Cr´eer `a la place de nombreuxpetits “paquets” d’octogones:

d´etermin´es par unepr´e-analyse de d´ependance

ne relier dans un octogone que les variables modifi´ees ensemble interrompre les chaˆınes de d´ependances aux fronti`eres des blocs syntaxiques (limiter la clˆoture transitive)

R´esultat : sur le type de programmes consid´er´es

nombre d’octogones lin´eaire en|V|et donc|P| (taille du programme)

taille des octogones constante, petite ('4)

=⇒coˆut lin´eaire en pratique

(23)

L’analyseur statique Astr´ee

Exemple : arbres de d´ ecision bool´ eens

Le flot de contrˆole est souvent encod´e dans desvariables bool´eennes Exemple

B = (X>0);

..

. code long ..

.

if (B) Y = 1/X;

(B = 1∧X >0)∨(B= 0∧X ≤0)non convexe

Il est n´ecessaire departitionnerX par rapport `a lavaleur deB

(24)

Exemple : arbres de d´ ecision bool´ eens

0

0 1 0 1

1

X Y X

Y

X Y B B1

B2

BDD 2

Numeric abstract domains

BDD : structure compactepour le partitionnement d’´etats variablesbool´eennes aux nœuds

domaines num´eriques aux feuilles(intervalles, octogones)

partage des sous-arbres identiques⇒meilleur efficacit´e Mais il y a trop de variables bool´eennes pour un seul arbre :

utiliser ungrand nombre d’arbres de petite taille(profondeur 3)

utiliser un crit`ere syntaxique pour choisir les variables `a relier

(25)

L’analyseur statique Astr´ee

Exemple : filtrage num´ erique

filter.c int INIT = 1;

float P, X, E1,E2, S1,S2;

void filtre2(){ if (INIT) {

P = S1 = E1 = X;

} else {

P = (0.4677826 * X) -

(E1 * 0.7700725) + (E2 * 0.4344376) + (S1 * 1.5419) - (S2 * 0.6740477);

} E2 = E1;

E1 = X;

S2 = S1;

S1 = P;

}

void main() { while (1) {

X = input(); /* [-10,10] */

filtre2();

INIT = input(); /* [0,1] */

wait_tick();

} }

(26)

Exemple : filtrage num´ erique

calcul deXn=

αXn−1+βXn−2+Yn

In

aucunintervalle ou poly`edre n’est stable la surface stable la plus simple est uneellipse Y2−aYX−bX2≤c

X U F(X) X

F(X)

F(X) X

X U F(X)

intervalle instable ellipse stable

(27)

L’analyseur statique Astr´ee

Exemple : calculs flottants

Nombres flottants :

cause d’erreurs additionnelles: d´epassements de capacit´e arrondi : sˆuret´e sur les r´eels6=⇒ sˆuret´e sur les flottants

e.g. :if (x != 0) y = 1 / (x*x)

Rendre les domaines sˆurs sur les flottants : Intervalles

faciled’ˆetre sˆur :arrondi vers l’ext´erieur [a,b]⊕[c,d] def= [a⊕−∞c,b⊕+∞d]

Domaines relationnels (octogones, poly`edres)

donner une s´emantiquedans les r´eelspar transformation d’expressions enajoutant explicitement l’effet de l’arrondi:

XY −→[1,1 +]X+ [1,1 +]Y+ [−ε, ε] (abstraction)

passer ces expressions r´eelles `a undomaine sˆur pour les r´eels le domaine lui-mˆeme peut ˆetreimplant´e de mani`ere sˆure en flottants

(X+Yc)(−Y d) = (Xc+∞d) (arrondi vers l’ext´erieur)

(28)

L’analyseur statique Astr´ee

Exemple : calculs flottants

Nombres flottants :

cause d’erreurs additionnelles: d´epassements de capacit´e arrondi : sˆuret´e sur les r´eels6=⇒ sˆuret´e sur les flottants

e.g. :if (x != 0) y = 1 / (x*x)

Rendre les domaines sˆurs sur les flottants : Intervalles

faciled’ˆetre sˆur :arrondi vers l’ext´erieur [a,b]⊕[c,d] def= [a⊕−∞c,b⊕+∞d]

Domaines relationnels (octogones, poly`edres)

donner une s´emantiquedans les r´eelspar transformation d’expressions enajoutant explicitement l’effet de l’arrondi:

XY −→[1,1 +]X+ [1,1 +]Y+ [−ε, ε] (abstraction)

passer ces expressions r´eelles `a undomaine sˆur pour les r´eels le domaine lui-mˆeme peut ˆetreimplant´e de mani`ere sˆure en flottants

(X+Yc)(−Y d) = (Xc+∞d) (arrondi vers l’ext´erieur)

(29)

L’analyseur statique Astr´ee

Exemple : calculs flottants

Nombres flottants :

cause d’erreurs additionnelles: d´epassements de capacit´e arrondi : sˆuret´e sur les r´eels6=⇒ sˆuret´e sur les flottants

e.g. :if (x != 0) y = 1 / (x*x)

Rendre les domaines sˆurs sur les flottants : Intervalles

faciled’ˆetre sˆur :arrondi vers l’ext´erieur [a,b]⊕[c,d] def= [a⊕−∞c,b⊕+∞d]

Domaines relationnels (octogones, poly`edres)

donner une s´emantiquedans les r´eelspar transformation d’expressions enajoutant explicitement l’effet de l’arrondi:

XY−→[1,1 +]X+ [1,1 +]Y+ [−ε, ε] (abstraction)

passer ces expressions r´eelles `a undomaine sˆur pour les r´eels le domaine lui-mˆeme peut ˆetreimplant´e de mani`ere sˆure en flottants

(X+Y c)(−Y d) = (Xc+∞d) (arrondi vers l’ext´erieur)

(30)

Exemple : exponentielles

round.c void main() {

float X = input(); /* [0,100] */

while (1) { X = X / 101.;

...

X = X * 101.;

wait_tick();

} }

Probl`eme :

En flottant (X/101)×1016=X.

×et/ajoutent uneerreur d’arrondi;X peut croˆıtre un peu `a chaque it´eration

=⇒la borne deX croˆıtexponentiellement!

En pratique, la croissance est suffisammentlenteet la dur´ee d’ex´ecution petite pour assurer qu’il n’y apas de d´epassement de capacit´e

Solution :

Domainerelationnel non lin´eairepour relierX ettick

|X| ≤α(1 +a)tick(α,βetasont automatiquement inf´er´es)

R´eduction:tick≤MAX_TICK⇒borne surX

(31)

L’analyseur statique Astr´ee

Exemple : mod` ele m´ emoire bas niveau

Type union union {

struct { uint8 al,ah,bl,bh } b;

struct { uint16 ax,bx } w;

} r;

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

Type-punning

uint8 buf[4] = { 1,2,3,4 };

uint32 i = *((uint32*)buf);

Copie rapide float a,b;

*((int*)&a) = *((int*)&b);

Norme C : programmes mal typ´es, comportementsind´efinis En pratique :

il n’y apas d’erreur

la s´emantique estbien d´efinie (sp´ecification de l’ABI)

(32)

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

Principe : s´emantique concr`ete

d´ecouper la m´emoire encellulesrepr´esentant un entier de 1 octet ou plus ajouter (et supprimer)dynamiquementles cellules `a l’ex´ecution

en fonction des acc`es par pointeur

un octet peut ˆetre couvert parplusieurs cellules

=⇒conjonctionde contraintes

=⇒possibilit´e desynth´etiserla valeur d’une nouvelle cellule

`

a partir des cellules d´ej`a pr´esentes tout octet n’est pas forc´ement couvert (>)

(33)

L’analyseur statique Astr´ee

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

´etat initial : pas de cellule (>)

(34)

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

ax 258

cr´eer r.w.ax: celluleuint16`a l’offset 0

(35)

L’analyseur statique Astr´ee

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

ax 258 al

2

cr´eer r.b.al: celluleuint8`a l’offset 0 initialis´ee avec :r.w.ax mod 256

(36)

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

al 3

modifier la celluler.b.al d´etruire la cellule invalider.w.ax

(37)

L’analyseur statique Astr´ee

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

ax

al

0,...,65535

2,3

mat´erialiser les cellules de toutes les branches et faire l’union des environnements possibles

(38)

Exemple : mod` ele m´ emoire bas niveau

Type union

r.w.ax = 258;

if (r.b.al==2) r.b.al++;

0 1 2 ...

ax

al

0,...,65535

2,3

Dans l’abstrait : associer `a chaque cellule

un intervalle qui sur-approxime l’ensemble de ses valeurs possibles ou, plus g´en´eralement, une dimension dans un domaine num´erique

e.g. poly`edres, pour garder des relations entre cellules

(39)

L’analyseur statique Astr´ee

Applications d’Astr´ ee

Airbus A340-300(2003) Airbus A380(2004)

(mod`ele de)ESA ATV(2008)

taille : de 70 000 `a 860 000 lignes de C temps d’analyse : de 45mn `a'40h

0 alarme :preuve d’absence d’erreur `a l’ex´ecution

(40)

R´ esum´ e

Objectif atteint

Astr´ee : il estpossiblede construire un analyseur statique `a la fois : sˆurvis `a vis d’une s´emantique r´ealiste du C

raisonnablement efficaceen temps et en m´emoire pr´ecissur uneclasse infinie de programmes

utilisable dans un cadre devalidationdes logiciels critiques

Recette

partir d’un analyseur simple(intervalles)

tant qu’il reste des fausses alarmes chercher leur cause et, au choix

egler les param`etre d’analyse, ou am´eliorer un domaine existant, ou

ajouter une r´eduction entre domaines existants, ou ajouter un nouveau domaine

(41)

L’analyseur statique Astr´eeA

L’analyseur statique Astr´ eeA

(42)

Les logiciels concurrents

Programmation concurrente :

d´ecomposerun programme en un ensemble deprocessus qui interagissent exploitation du parall´elisme des ordinateurs(multi-cœurs, cloud)

d´ecomposition du programme en tˆaches asynchrones

(serveurs, GUI, programmes r´eactifs, . . . )

Dans l’avionique : Integrated Modular Avionics int´egrer des fonctionnalit´es(moins de CPUs)

remplacer les bus physiques par une m´emoire partag´ee (moins de fils)

pour les tˆaches moins critiques(DAL C–E, certification plus l´eg`ere)

allocationstatique des ressources(threads, locks, m´emoire)

ordonnancementtemps-r´eel(ARINC 653, POSIX threads real-time)

Difficult´es :

les logiciels concurrents sont plus difficiles `a concevoir correctement etplus difficiles`avalideret `av´erifier

le testestinefficace,

lesm´ethodes formelles d’analyse de source sont peu d´evelopp´ees

(43)

L’analyseur statique Astr´eeA

S´ emantique informelle des programmes multi-thread

t1 t2

`1awhiletruedo `1bwhiletruedo

`2aifx<y then `2bify <100then

`3ax←x+ 1 `3by ←y+rand(1,3)

Mod`ele d’ex´ecution :

ensemble fini dethreads (logiciels embarqu´es)

la m´emoire est partag´ee(x,y)

chaque thread a son propre compteur de programme l’ex´ecution entrelace des pas de chaque threadt1andt2

en choisissantarbitrairementla prochaine thread `a ex´ecuter

(les affectations et les tests sont consid´er´es comme atomiques)

=⇒nous avons l’invariant global :0≤x ≤y ≤102

(44)

Retour sur l’analyse s´ equentielle

Deux m´ethodes d’analyse : Equationnelle :´

X1=>

X2=F2(X1) X3=F3(X1) X4=F4(X3,X4)

D´enotationnelle :

i = 0;

while (i < nb) { a[i] =12;

i++;

}

CJwhilecdobdoneKX def=

CJ¬c?K(lfpλY.XCJb?K(CJcKY)) CJifcthentfiKX def=

CJtK(CJc?KX)CJ¬c?KX . . .

eriver un syst`eme d’´equations du CFG une variableXi∈ D]par point de programmei it´erer (propager) le long du CFG

emoire lin´eaire en latailledu programme strat´egie de propagationflexible

facile `a adapter aux programmesconcurrents avec un produit de CFG

ethode vue en cours et en TME it´eration sur la structure syntaxique

emoire lin´eaire en laprofondeurdu programme strat´egie d’it´erationfix´ee

(suit la structure du programme)

pas de d´efinition inductive du parall´elisme. . .

(45)

L’analyseur statique Astr´eeA

M´ ethode ´ equationnelle (exemple)

`1whiletruedo

`2ify <100then

`3y ←y+rand(1,3)

Syst`eme d’´equations : X1={[y 7→0]}

X2=X1∪CJy≥100KX2∪CJy ←y+rand(1,3)KX3

X3= CJy <100KX2

Le syst`eme est de la forme∀i∈ {1,2,3}:Xi=Fi(X1,X2,X3) et peut ˆetre r´esolu par it´erations :

∀i∈ {1,2,3}: Xi0=⊥

Xik+1=Fi(X1k,X2k,X3k)

(46)

Produit de CFG

× =

Produitdes CFG des threads du programme :

´

etat de contrˆole = paire de points de programmes

=⇒explosion combinatoiredes ´etats abstraits duplication des fonctions de transfert

=⇒exponentiel en le nombre de threads

(47)

L’analyseur statique Astr´eeA

Produit de CFG (exemple)

t1 t2

`1awhiletruedo `1bwhiletruedo

`2aifx<y then `2bify <100then

`3ax←x+ 1 `3by ←y+srand(1,3)

Syst`eme d’´equations :

X1a,1b={[x7→0,y7→0]}

X2a,1b=X1a,1bCJxyKX2a,1bCJxx+ 1KX3a,1b X3a,1b= CJx<yKX2a,1b

X1a,2b=X1a,1bCJy100KX1a,2bCJyy+rand(1,3)KX1a,3b X2a,2b=X1a,2bCJxyKX2a,2bCJxx+ 1KX3a,2b

X2a,1bCJy100KX2a,2bCJyy+rand(1,3)KX2a,3b

X3a,2b= CJx<yKX2a,2bX3a,1bCJy100KX3a,2bCJyy+rand(1,3)KX3a,3b X1a,3b= CJy<100KX1a,2b

X2a,3b=X1a,3bCJxyKX2a,3bCJxx+ 1KX3a,3bCJy<100KX2a,2b X3a,3b= CJx<yKX2a,3bCJy<100KX3a,2b

(48)

L’analyseur statique Astr´eeA

Analyse thread ` a thread avec interf´ erences simples

i = 0;

while (i < nb) { a[i] --;

i++;

}

i = 0;

while (i < nb) { a[i] ++;

i++;

}

Principe : ´eviter l’explosion combinatoire du contrˆole analyser chaque thread s´epar´ement

collecterlesvaleurs´ecrites dans chaque variable par chaque thread

=⇒lesinterf´erences

abstraites dans un domaine abstrait, e.g., les intervalles

r´e-analyserles threads, eninjectantces valeurs `a chaque lecture

lire une variable retourne la derni`ere valeur lue, ou une interf´erence, de mani`ere non d´eterministe

=⇒de nouveaux ´etats et interf´erences sont d´ecouverts it´erer les analyses jusqu’`a la stabilisation

en appliquant un ´elargissementOsur les interf´erences

(49)

L’analyseur statique Astr´eeA

Analyse thread ` a thread avec interf´ erences simples

i = 0;

while (i < nb) { a[i] --;

i++;

}

i = 0;

while (i < nb) { a[i] ++;

i++;

}

Principe : ´eviter l’explosion combinatoire du contrˆole analyser chaque thread s´epar´ement

collecterlesvaleurs´ecrites dans chaque variable par chaque thread

=⇒lesinterf´erences

abstraites dans un domaine abstrait, e.g., les intervalles

r´e-analyserles threads, eninjectantces valeurs `a chaque lecture

lire une variable retourne la derni`ere valeur lue, ou une interf´erence, de mani`ere non d´eterministe

=⇒de nouveaux ´etats et interf´erences sont d´ecouverts it´erer les analyses jusqu’`a la stabilisation

en appliquant un ´elargissementOsur les interf´erences

(50)

L’analyseur statique Astr´eeA

Analyse thread ` a thread avec interf´ erences simples

i = 0;

while (i < nb) { a[i] --;

i++;

}

i = 0;

while (i < nb) { a[i] ++;

i++;

}

Principe : ´eviter l’explosion combinatoire du contrˆole analyser chaque thread s´epar´ement

collecterlesvaleurs´ecrites dans chaque variable par chaque thread

=⇒lesinterf´erences

abstraites dans un domaine abstrait, e.g., les intervalles

r´e-analyserles threads, eninjectantces valeurs `a chaque lecture

lire une variable retourne la derni`ere valeur lue, ou une interf´erence, de mani`ere non d´eterministe

=⇒de nouveaux ´etats et interf´erences sont d´ecouverts

it´erer les analyses jusqu’`a la stabilisation

en appliquant un ´elargissementOsur les interf´erences

(51)

L’analyseur statique Astr´eeA

Analyse thread ` a thread avec interf´ erences simples

i = 0;

while (i < nb) { a[i] --;

i++;

}

i = 0;

while (i < nb) { a[i] ++;

i++;

}

... ...

Principe : ´eviter l’explosion combinatoire du contrˆole analyser chaque thread s´epar´ement

collecterlesvaleurs´ecrites dans chaque variable par chaque thread

=⇒lesinterf´erences

abstraites dans un domaine abstrait, e.g., les intervalles

r´e-analyserles threads, eninjectantces valeurs `a chaque lecture

lire une variable retourne la derni`ere valeur lue, ou une interf´erence, de mani`ere non d´eterministe

=⇒de nouveaux ´etats et interf´erences sont d´ecouverts it´erer les analyses jusqu’`a la stabilisation

en appliquant un ´elargissementOsur les interf´erences

(52)

Exemple d’analyse thread ` a thread

t1

`1awhiletruedo

`2aifx<ythen

`3ax←x+ 1

t2

`1bwhiletruedo

`2bify <100then

`3by ←y+rand(1,3)

Analyse concr`ete det1

(1a):x=y = 0

(2a):x=y = 0

(3a):⊥

(53)

L’analyseur statique Astr´eeA

Exemple d’analyse thread ` a thread

t1

`1awhiletruedo

`2aifx<ythen

`3ax←x+ 1

t2

`1bwhiletruedo

`2bify <100then

`3by ←y+rand(1,3)

Analyse concr`ete det2

(1b):x =y = 0

(2b):x = 0,y∈[0,102]

(3b):x = 0,y∈[0,99]

interf´erences d´ecouvertes :y←[1,102]

(54)

Exemple d’analyse thread ` a thread

t1

`1awhiletruedo

`2aifx<ythen

`3ax←x+ 1

t2

`1bwhiletruedo

`2bify <100then

`3by ←y+rand(1,3)

Nouvelle analyse det1avec interf´erences caus´ees part2 interf´erences `a appliquer :y ←[1,102]

(1a):x=y = 0

(2a):x∈[0,102], y = 0

(3a):x∈[0,102], y = 0

remplacerx <y parx <max(y,[1,102]) remplacerx ≥y parx ≥min(y,[1,102])

interf´erences d´ecouvertes :x←[1,102]

les analyses suivantes sont identiques :le point fixe est atteint

(55)

L’analyseur statique Astr´eeA

Exemple d’analyse thread ` a thread

t1

`1awhiletruedo

`2aifx<ythen

`3ax←x+ 1

t2

`1bwhiletruedo

`2bify <100then

`3by ←y+rand(1,3)

Invariants concrets :

nous avonsx,y ∈[0,102], mais pasx ≤y Analyse abstraite d´eriv´ee :

similaire `a une analyse deprogrammes s´equentiels, mais it´er´ee

param´etr´ee par un domaine abstrait arbitraire

efficace(peu de r´e-analyses n´ecessaires en pratique)

les interf´erences sontnon relationnellesetinsensibles au flot de contrˆole

limite h´erit´ee de la s´emantique concr`ete

(56)

Mod` ele de m´ emoire mat´ eriel : TSO

buffer2

mémoire partagée x ← 1

y ← 12 x ← 5 x ← 10

x=0 y=99 x ← 1 y ← 12 x ← 5 x ← 10 buffer1

thread1 thread2

Total Store Ordering :mod`ele d’Intel x86 chaque thread a une queue non relationnelles les queues sont vid´ees de mani`ere non d´eterministe dans la m´emoire partag´ee

une thread lit en priorit´e les valeurs pr´esentes dans sa queue, ou la m´emoire partag´ee si aucune valeur n’est disponible

(57)

L’analyseur statique Astr´eeA

M´ emoires faiblement coh´ erentes et sˆ uret´ e

La s´emantique d’entrelacements(coh´erence s´equentielle)

n’est doncpas r´ealiste:

optimisations du CPU(buffers, r´e-ordonnancement d’instructions)

optimisations du compilateur (explicitement permises par la norme)

=⇒

une analyse sˆure pour la coh´erence s´equentielle

n’est pas automatiquement sˆure pour un mod`ele m´emoire r´ealisteplus faible

mod`ele plus faible = moins de garanties = plus de comportements possibles exemple : y1;ifx= 0then · · · ||x1;ify= 0then · · · peut ˆetre ex´ecut´e comme : ifx= 0theny1;· · · ||ify= 0thenx1;· · ·

R´esultat : l’analyse avec interf´erences simplesest sˆure

vis `a vis d’un grand nombre de mod`eles m´emoires faibles

Justification : les interf´erences non relationnelles et insensibles au flot de contrˆole sont invariantes par r´e-ordonnancement des lectures et ´ecritures

(58)

Verrous d’exclusion mutuelle

t1

t2 lock

lock unlock

unlock

W

R R R

W W W

Mutexes :

assure l’exclusion mutuelle

`

a tout instant, au plus une thread peut poss´eder un verrou donn´e

assure la coh´erence de la m´emoire, l’atomicit´e et la propagation des ´ecritures

pas de r´e-ordonnancement `a traverslocketunlock

=⇒nous pouvonssupprimer des interf´erences irr´ealisableset am´eliorer la pr´ecision en ajoutant un petite degr´e desensibilit´e au flot de contrˆole

(59)

L’analyseur statique Astr´eeA

Verrous d’exclusion mutuelle

t1

t2 lock

lock unlock

unlock

W

R R R

W W W

Interf´erences dedata-race:

paireslecture/´ecritureet´ecriture/´ecriturenon prot´eg´ees

(60)

Verrous d’exclusion mutuelle

t1

t2 lock

lock unlock

unlock

W

R R R

W W W

Interf´erences dedata-race:

paireslecture/´ecritureet´ecriture/´ecriturenon prot´eg´ees Interf´erences bien synchronis´ees :

la derni`ere´ecritureavant ununlockdet1

influence leslecturesentrelocket la premi`ere´ecrituredanst2

Nous partitionnons lesinterf´erencesen fonction de l’´etat des mutex.

(61)

L’analyseur statique Astr´eeA

Exemple

producteur consommateur (abstrait)

N consommateurs N producteurs

whiletruedo whiletruedo

lock(m) lock(m);

ifx>0thenx←x−1endif; x ←x+ 1;

ifx >100thenx←100endif;

unlock(m) unlock(m)

En supposantN producteurs etN consommateurs :

pas d’interf´erence dedata-race (preuve d’absence de data-race)

interf´erences bien synchronis´ees : consommateurs :x ←[0,99]

producteurs :x ←[1,100]

=⇒nous trouvons :x∈[0,100]

(sans lock, pourN>1, mˆeme la s´emantique concr`ete ne peut pas bornerx)

(62)

Ordonnanceur temps r´ eel ` a priorit´ e

yield yield

yield

yield priority

Ordonnanceur temps r´eel :

chaque thread a une priorit´e stricte(pouvant ˆetre dynamique)

une thread peut ˆetre pr´eempt´ee

uniquement par une thread de priorit´e strictement plus ´elev´ee une thread peut se suspendre pour un temps ind´etermin´e(yield,lock)

Analyse :affiner les propagation d’interf´erences en tenant compte des priorit´es partitionnement des interf´erences par thread et par priorit´e

les threads deplus haute priorit´einjectent les interf´erences depuis leur yieldvers tous les points des threads

les threads deplus basse priorit´einjectent leurinterf´erence de data-race vers les points deyield

(63)

L’analyseur statique Astr´eeA

Analyse de deadlocks

Deadlock: cycle de threads bloqu´es

chacun attendant un mutex poss´ed´e par le suivant

t1 t2

lock(a) lock(a) lock(c) lock(b) unlock(c) unlock(a) lock(b) lock(a) unlock(b) unlock(a) unlock(a) unlock(b)

t1

t1 a

t1 a,b

t2

t2 b t2

b,a a

b a

t2

a a

b t1

a,c c

Pendant l’analyse, collecter :

lesconfigurationsR de mutexpossibles :R⊆threads× P(mutexes) lesinstructions de lock depuis ces configurationsR×mutexes

Ensuite, construire ungraphe de blocageentreinstructionslock ((t,m), `) bloque ((t0,m0), `0) si

t 6=t0 etm∩m0 =∅ (configurations non en exclusion mutuelle)

`∈m0 (lockbloquant)

Un deadlock est uncycle dans le graphe des blocages

en´eralisation possible aux cycles plus grands, avec plus de threads intervenants dans le deadlock

(64)

Analyse de deadlocks

Deadlock: cycle de threads bloqu´es

chacun attendant un mutex poss´ed´e par le suivant

t1 t2

lock(a) lock(a) lock(c) lock(b) unlock(c) unlock(a) lock(b) lock(a) unlock(b) unlock(a) unlock(a) unlock(b)

lock(b) blocks lock(a) blocks lock(a) blocks t1

t1 a

t1 a,b

t2

t2 b t2

b,a a

b a

t2

a a

b

t1

a,c c

Pendant l’analyse, collecter :

lesconfigurationsR de mutexpossibles :R⊆threads× P(mutexes) lesinstructions de lock depuis ces configurationsR×mutexes Ensuite, construire ungraphe de blocageentreinstructionslock

((t,m), `) bloque ((t0,m0), `0) si

t 6=t0 etm∩m0 =∅ (configurations non en exclusion mutuelle)

`∈m0 (lockbloquant)

Un deadlock est uncycledans le graphe des blocages

en´eralisation possible aux cycles plus grands, avec plus de threads intervenants dans le deadlock

(65)

L’analyseur statique Astr´eeA

Interpr` ete abstrait d’Astr´ eeA

it´erateur sur les threads

it´erateur sur la syntaxe

domaine de partitionnement de traces

domaine de partitionnement des verrous l

domaindestructurem´emoire

l ↑

domaine des interf´erences ...

l ↓

domaine de pointeurs l

(produit r´eduit de)domaines num´eriques abstraits

l l l l ...

intervalles octogones arbres de d´ecision filtres . . .

(66)

Famille cible d’applications

Mod`ele de concurrence : ensemble fix´e de threads

ordonnancement temps r´eel pr´eemptif sur un seul processeur m´emoire partag´ee, locks

Application cible :

code avionique embarqu´e 1.6 Mlocde C,15threads

code r´eactif+ coder´eseau+listes,chaˆınes,pointeurs

nombreuses variables, tableaux, boucles, graphe d’appel peu profond pas d’allocation dynamique de m´emoire, pas de r´ecursivit´e

(67)

L’analyseur statique Astr´eeA

Contexte d’analyse

Environnement d’ex´ecution concret :

Application cible C Autres applications ARINC 653 OS, C+asm

Mat´eriel

L’application cible :

s’ex´ecute en concurrence avec d’autres applications (s´eparation en m´emoire)

interagit dynamiquement avec un OSde type ARINC 653

(contrˆole des threads, mutex lock et unlock, communications)

interagit avec d’autres applications via l’OS

cr´ee des objets syst`emes seulement pendant la phase d’initialisation

(l’ensemble des objets cr´e est inf´er´e par l’analyse de la phase d’initialisation)

(68)

Contexte d’analyse

Environnement d’analyse abstraite :

Application cible, C mod`ele ARINC 653, C + built-in

L’application cible est enrichie avec unmod`ele de l’OS´ecrit `a la main 2.6 Kloc de C + built-ins Astr´ee bas niveau

simule tous les appels syst`emes de l’OS

implante les objets de l’OS avec des objets bas-niveau d’Astr´eeA

(e.g., les mutex d’Astr´eeA sont de simples entiers, ceux d’ARINC 653 ont un nom chaˆıne)

=⇒ r´eduction `a l’analyse d’un programme “C”autonome sans symbole ind´efini

(69)

L’analyseur statique Astr´eeA

R´ esultats

Pr´ecision : obtenus par sp´ecialisation 2010 :12,257fausses alarmes 2015 :1,195fausses alarmes Efficacit´e :

sur une machine Intel i7 2.90 GHz temps de calcul :24h

nombre d’it´erations :6 (pas d’´elargissement n´ecessaire sur les interf´erences)

90 GBRAM

L’am´elioration de la pr´ecision est obtenue grˆace : au partitionnement des interf´erences par les verrous

`

a l’ajout d’interf´erences relationnelles(non vu en cours)

`

a l’ajout de domaine abstraits sp´ecialis´es au domaine d’application

Références

Documents relatifs

Nous verrons toutefois plus loin que dans certains dispositifs d’interf´erences, on peut quand mˆeme observer dans de bonnes conditions de contraste les franges d’interf´erences

3 Proposer un exemple dans lequel la valeur renvoy´ ee par une lecture est celle transmise au cours d’une ´ ecriture : penser ` a prot´ eger lecture et ´ ecriture par un mutex.

valider le bon fonctionnement de votre impl´ ementation du pilote de la PWM en chargeant le pilote que vous aurez compl´ et´ e de vos appels syst` emes, et la description de

Nous fournissons un squelette de programme qui ne contient que des fonctions ind´ ependantes du mat´ eriel : ce pro- gramme se charge d’acqu´ erir des donn´ ees d’un

• thread : occupe les mˆ emes ressources m´ emoire que le p` ere mais contient sa propre pile ⇒ partage de ressources mais ´ elimine les probl` emes de communication entre

2 un ´ emulateur permet de connaˆıtre l’´ etat interne du processeur et de pr´ evenir l’utilisateur d’erreurs ...

• Pourquoi un syst` eme d’exploitation : un scheduler, un gestionnaire de m´ emoire (multitˆ ache), une couche d’abstraction suppos´ ee cacher le mat´ eriel au programmeur,

Notion de syst` eme embarqu´ e Architecture des processeurs Mat´ eriel v.s logiciel Rappels de C Les microcontrˆ oleurs 8 bits G´ en´ eralit´ es sur les syst` emes num´ eriques