Session 5 Mod`eles des syst`emes r´eactifs et parall`eles
Transcription
Session 5 Mod`eles des syst`emes r´eactifs et parall`eles
Méthodes formelles de développement (5/9) Session 5 Modèles des systèmes réactifs et parallèles Hubert Garavel Frédéric Lang Pascal Raymond Wendelin Serwe CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 1 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 2 / 61 > Introduction But de cette session aborder un domaine d’application où la sûreté de fonctionnement est essentielle : systèmes dynamiques, temps-réel, parallèles besoin de garantie de qualité/sûreté, d’où utilisation de méthodes formelles dans cette section : après avoir vu les modèles classiques des systèmes transformationnels, on va voir comment prendre en compte le(s) parallélismes(s). CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Introduction < 3 / 61 > Partie I Introduction CNAM Grenoble – PR – 19 mars 2010 Pourquoi « systèmes réactifs » ? Méthodes formelles de développement Introduction < 4 / 61 > Pourquoi « systèmes réactifs » ? Pourquoi « système » ? Pourquoi « réactif » ? (et pas « programme ») ? Par opposition à « transformationnel » (cf. session 4), programmes classiques, avec une donnée et un résultat final (e.g. compilateur). Maintiennent une interaction permanente avec un environnement, interactif : l’environnement est typiquement un humain, le système réagit à sa vitesse propre (interface HM, browser), réactifs (temps-réel) : l’environnement est typiquement le monde physique, c’est lui qui impose le rythme. applications souvent réparties, parallèles, composite : logiciel applicatif/logiciel de base/matériel, cas limites : purement matériel (circuit), purement algorithmique (protocole de communication). On s’intéresse au réactif dur : c’est le domaine des applications critiques (contrôle/commande, embarqué). CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 6 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 7 / 61 > Introduction Pourquoi « systèmes réactifs » ? Introduction Caractéristiques générales Quelques questions annexes ... Dynamique : On n’attend pas un « résultat » : la fonctionnalité est dans le fonctionnement lui-même, le comportement, prise en compte de la (ou d’une) notion de temps indispensable. Parallélisme : il peut être logique/simulé (thread/process), temps partagé, protection des ressources partagées, ou réel (distribution), communication asynchrone, cohérence/fraı̂cheur des données. CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Introduction Pourquoi « systèmes réactifs » ? < 8 / 61 > « parallèle » implique-t-il « réactif » ? Non : algorithmique parallèle pour des problèmes transformationnels (efficacité, e.g. grilles de calcul, pipeline etc) « réactif » implique-t-il « parallèle » ? Pas forcément pour des systèmes très simples, mais quasiment toujours d’un point de vue conceptuel (parallélisme d’exécution vs parallélisme de description) Enfin, la frontière transformationnel/réactif est ténue : ex. décodage vidéo fichier à fichier vs flux à flux... CNAM Grenoble – PR – 19 mars 2010 Pourquoi « systèmes réactifs » ? Méthodes formelles de développement < 9 / 61 > Systèmes de transitions Les grandes lignes de cette session Un système parallèle = des systèmes séquentiels « qui tournent en même temps ». Un système séquentiel est modélisé par un système de transitions. Problème : définir un modèle du comportement global (parallèle) à partir des modèles des composants séquentiels. CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Systèmes de transitions < 10 / 61 > Systèmes de transitions CNAM Grenoble – PR – 19 mars 2010 Graphe de contrôle < 11 / 61 > Graphe de contrôle Un programme simple booléen L’état d’un système en cours d’exécution est la valeur de toutes les variables/ressources qui influencent le comportement futur. Une transition est le passage d’un état à un autre. En particulier, pour les programmes impératifs séquentiels : toutes les variables du programme, plus le « point de contrôle courant ». Méthodes formelles de développement Méthodes formelles de développement Systèmes de transitions Rappels : notion d’état et de transition CNAM Grenoble – PR – 19 mars 2010 Partie II < 13 / 61 > X, Y : bool = false; begin (1) while cont() do (2) X := not X ; (3) Y := (X == Y); (4) end (5) end CNAM Grenoble – PR – 19 mars 2010 not cont() ? 1 cont() ? 2 5 cont() ? not cont() ? Méthodes formelles de développement X := not X 3 Y := (X == Y) 4 < 14 / 61 > Systèmes de transitions Graphe de contrôle Systèmes de transitions Remarques Expansion des variables les transitions sont étiquetées par des labels, pas de sémantique (pour l’instant) on peut aller plus loin : les valeurs des variables influencent aussi le comportement CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Systèmes de transitions < 15 / 61 > CNAM Grenoble – PR – 19 mars 2010 1-FF 2-FF 2-TF 2-FT 2-TT 3-TF 3-FF 3-TT 3-FT 4-TF 4-FT 4-TT 4-FF 5-TF 5-FT 5-TT 5-FF Méthodes formelles de développement Systèmes de transitions < 17 / 61 > Graphe de contrôle + variables Variables à domaines finis (et petits) Le graphe est fini : on reboucle nécessairement Exploration exhaustive possible Le graphe est un modèle exact des comportements Démarche possible pour des variables à domaine fini (et pas trop gros) Méthodes formelles de développement Systèmes de transitions < 18 / 61 > A, B : bool := true ; X : integer range 1..5 := 1 ; begin (1) while X < 5 loop (2) A := B and pair(X) ; (3) B := A or impair(X) ; (4) X := X+1 ; (5) end loop ; (6) end A, B : bool := true ; X : integer range 1..5 := 1 ; begin (1) while X < 5 loop (2) A := B and pair(X) ; (3) B := A or impair(X) ; (4) X := X+1 ; (5) end loop ; (6) end CNAM Grenoble – PR – 19 mars 2010 Graphe de contrôle + variables X>=5 ? 1 x<5 ? 2 X<5 ? A := B and pair(X) 3 B :=A or impair(X) 6 X>=5 ? 4 X :=X+1 5 Méthodes formelles de développement Systèmes de transitions Expansion des variables CNAM Grenoble – PR – 19 mars 2010 X, Y : bool = false; begin (1) while cont() do (2) X := not X ; (3) Y := (X == Y); (4) end (5) end Graphe de contrôle + variables Remarques CNAM Grenoble – PR – 19 mars 2010 Graphe de contrôle + variables < 19 / 61 > Automates interprétés Cas général 1.TT1 5.TT3 2.TT1 2.TT3 3.FT1 3.FT3 4.FT1 4.FT3 5.FT2 5.FT4 2.FT2 2.FT4 3.TT2 3.TT4 4.TT2 4.TT4 Méthodes formelles de développement 5.TT5 6.TT5 < 20 / 61 > Programmes avec : variables de types quelconques, des entrées/sorties, qui ne terminent pas forcément ... ... le graphe des états est « virtuellement infini » (tout du moins très gros) Solution : automates interprétés structure de contrôle finie (automate) labels interprétés, avec une sémantique ad hoc (selon les besoins) CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 22 / 61 > Systèmes de transitions Automates interprétés Systèmes de transitions Automates conditions/actions Conclusion sur les automates interprétés un exemple d’automates interprétés classique (et utile), les labels sont des conditions ou des actions, adéquat pour modéliser les programmes séquentiels. X−− >−− 5− ?→q 0 −− X−− := −−X+1 −−→q 00 exemple : q −− X > 5 / X := X+1 00 résumé en : q −−−−−−−−−−−−−−−−→q Remarque : formalisme très riche, même puissance d’expression que les machines de Turing CNAM Grenoble – PR – 19 mars 2010 Automates interprétés Méthodes formelles de développement < 23 / 61 > Modélisation du parallélisme automates finis (partie simple) + labels éventuellement très « riches » (partie complexe) les labels cond/act sont un exemple : on peut en définir d’autres pour refléter d’autres besoins ... on va voir d’autres sortes de labels pour traiter le parallélisme CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 24 / 61 > Notion de produit d’automate Qu’est-ce que le parallélisme ? Partie III Intuitivement : plusieurs programmes fonctionnent « en même temps » Prenons le cas de deux programmes (P1 et P2). But : soient M1 et M2 les modèles de P1 et P2 (automates), comment construire un modèle M qui représente fidèlement le fonctionnement parallèle de P1 et P2 ? Modélisation du parallélisme CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 25 / 61 > Notion de produit d’automate A1 B1 c A2 β B2 A2 B1 ? Le produit asynchrone Le produit asynchrone Modélise fidèlement les cas multi-processus, multi-threads Les deux processus évoluent à leurs rythmes propres En bref : soit c’est le 1 qui avance, soit c’est le 2 ... A1 B2 ? ? < 27 / 61 > ? ? α a b A1 B1 ? Méthodes formelles de développement Modélisation du parallélisme C’est essentiellement un produit cartésien ... γ CNAM Grenoble – PR – 19 mars 2010 A2 B2 ? États : pas de problème, couples (Ai , Bj ) Transitions ? ? ? ? Pas de solution universelle : on va voir deux cas classiques CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 28 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 30 / 61 > Modélisation du parallélisme Le produit asynchrone Modélisation du parallélisme Le produit asynchrone (exemple) B1 A1 B1 a γ c A2 B1 β A2 B2 b b le produit représente fidèlement le comportement, à condition que la granularité des opérations soit réaliste Exemple : α c α a Attention à l’atomicité γ γ A1 Le produit asynchrone β α a A1 B2 deux tâches qui partagent des variables, x vaut 1, y vaut 0, la tâche 1 s’apprête à exécuter x := 2*x + 1, la tâche 2 s’apprête à exécuter y := x c β A2 B2 b CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 31 / 61 > Le produit asynchrone A1 x=1,y=0 A1 B1 x=3,y=0 A2 B1 y :=x x :=2*x+1 y :=x y :=x x=1,y=1 A1 B2 x :=2*x+1 x=3,y=3 A2 B2 B2 A2 < 32 / 61 > Le produit asynchrone Attention à l’atomicité (suite) x :=2*x+1 B1 Méthodes formelles de développement Modélisation du parallélisme Attention à l’atomicité (suite) x=1,y=0 CNAM Grenoble – PR – 19 mars 2010 x=3,y=1 A2 B2 x := 2*x + 1 est une instruction de haut niveau (C, java) en langage machine, elle devient (par exemple) shift x ; incr x tandis que y := x devient mov x y Ça ne donne pas le même modèle ! ... mais est-ce bien réaliste ? CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 33 / 61 > Le produit asynchrone CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme Attention à l’atomicité (suite) < 34 / 61 > Le produit asynchrone Attention à l’atomicité (conclusion) Seule les instructions machine sont atomiques x=1,y=0 x=1,y=0 A1 B1 x=1,y=1 x=2,y=0 shift x A2 mov x y shift x mov x y incr x A3 B2 incr x mov x y x=3,y=0 x=2,y=2 mov x y x=3,y=3 incr x x=3,y=2 shift x x=2,y=1 incr x x=3,y=1 Pour pouvoir faire des produits réalistes, il faut toujours se poser la question de la granularité : est-ce que les transitions des composants sont bien atomiques ? C’est LE PROBLÈME de la programmation parallèle asynchrone : chercher à garantir l’atomicité d’un bout de code. Lié au problème de la cohérence de données. nouvelle configuration, impossible avant ! CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 35 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 36 / 61 > Modélisation du parallélisme Le produit asynchrone Modélisation du parallélisme Exemple de l’heure Exemple de l’heure (suite) if (m == 59) h = (h+1) mod 24 ;(* incr h *) m = (m+1) mod 60 ; (* incr m *) Modélisation du parallélisme < 37 / 61 > Le produit asynchrone Méthodes formelles de développement < 39 / 61 > Le produit asynchrone h=00,m=00 CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 38 / 61 > Le produit asynchrone d0 := false ; loop <section non critique> a : d0 := true ; b : tour := 0 ; c : wait(d1=false or tour=1) ; d* : <section critique> e : d0 := false ; d1 := false ; loop <section non critique> A : d1 := true ; B : tour := 1 ; C : wait(d0=false or tour=0) ; D* : <section critique> E : d1 := false ; Problèmes de modélisation, granularité ? on suppose que l’affectation et le test sont atomiques inutile de “trop détailler” (intérêt de l’indéterminisme) CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 40 / 61 > Le produit asynchrone Algorithme de Peterson (le bon produit) A d0 :=true d1 :=true b asynchrone, pas de simultanéité (pour la granularité considérée) expansion des variables partagées pour plus de précision ... B tour :=0 tour :=1 c (d1=false or tour=1) ? d0 :=false incr m print Modélisation du parallélisme Algorithme de Peterson (les modèles) a h=00,m=59 Algorithme de Peterson (le programme) en résumé : quand on programme « parallèle », se pose le problème de l’atomicité des actions, très important lors des accès aux ressources partagées c’est ce qu’on appelle l’exclusion mutuelle à un niveau suffisamment bas, il y a forcément exclusion mutuelle (au niveau matériel, impossible d’écrire et/ou lire une même case mémoire) mais ce n’est pas suffisant pour les programmes de haut niveau (cf. l’exemple précédent) problème classique : peut-on programmer l’exclusion mutuelle ? Un exemple classique : algorithme de Peterson Modélisation du parallélisme print Modélisation du parallélisme Notion d’exclusion mutuelle CNAM Grenoble – PR – 19 mars 2010 il est incohérent h=00,m=59 h=00,m=00 print h=00,m=00 Méthodes formelles de développement Mais pendant tout ce temps, incr h incr m une tâche indépendante, plus rapide, qui lit et affiche l’heure (qu’on notera l’action print), état global = valeur de h, de m et aussi afficheur. Tôt ou tard, l’affichage sera correct ... h=23,m=59 deux variables : h(eure) et m(inute) une tâche activée par une horloge temps-réel toute les minutes, qui réalise l’action non atomique : CNAM Grenoble – PR – 19 mars 2010 Le produit asynchrone d CNAM Grenoble – PR – 19 mars 2010 Au final, un état produit est un quintuplet : (contrôle 1, contrôle 2, d0, d1, tour) C (d0=false or tour=0) ? d1 :=false D Méthodes formelles de développement < 41 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 42 / 61 > Modélisation du parallélisme Le produit asynchrone Modélisation du parallélisme Algorithme de Peterson (résultat) Algorithme de Peterson (résultat) aA FFX bA TFX cA TF0 dA TF0 aB FTX bB TTX cB TT0 dB TT0 eB TT0 cC TT1 dC TT1 eC TT1 aC FT1 bC TT1 aD FT1 bD TT1 cD TT0 aE FT1 bE TT1 cE TT1 eA TF0 cC TT0 Remarque : les OS proposent des librairies de (plus) haut niveau pour programmer l’exclusion mutuelle, par ex. mutex, sémaphores tous sont basés sur le même principe : certaines opérations sont garanties « matériellement »exclusive (affectation, test-and-set) on s’en sert pour bloquer l’exécution d’une tâche qui voudrait accéder à une zone « occupée » On a bien l’exclusion mutuelle : “dD” inaccessible ça garantit que ce que fait la tâche 1 dans d (resp. la tâche 2 dans D) est « atomique » CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 43 / 61 > CNAM Grenoble – PR – 19 mars 2010 Le produit asynchrone Méthodes formelles de développement Modélisation du parallélisme Un exemple avec des mutex Le produit asynchrone Deux grandes familles : multi-threads (ou processus légers) : partagent la même mémoire, fonctionnent en temps partagé (mono-processeur), ou en parallèle physique (multi-processeurs, multi-cœur) (c’est transparent pour le programmeur) les accès concurrents doivent être protégés (mutex, sémaphores etc.) thread1(){ thread2(){ while(true) { while(true) { sleep ms(60000) ; sleep ms(1000) ; take mutex(key) ; take mutex(key) ; if (m = 59) h = (h+1) mod 24 ; print hour(h, m) ; m = (m+1) mod 60 ; release mutex(key) ; release mutex(key) ; } } } } Méthodes formelles de développement Modélisation du parallélisme multi-processus : ont leurs mémoires propres tout échange de données se fait via l’OS, qui garantit l’intégrité < 45 / 61 > CNAM Grenoble – PR – 19 mars 2010 Le produit asynchrone Méthodes formelles de développement Modélisation du parallélisme Communication multi-processus Le produit synchronisé Très similaire au cas asynchrone : modélise des tâches essentiellement asynchrones Sauf qu’on donne du sens, dans certain cas, à la notion de simultanéité B1 A1 a A1 B1 < 47 / 61 > b a b A1 B2 A2 B1 A2 B2 Parallèle asynchrone ... Plus synchronisation Méthodes formelles de développement < 46 / 61 > Le produit synchronisé Un exemple de tous les jours : un processus tableur, un processus éditeur de texte, les échanges de données se font via le « presse-papiers »du système Windows. Plus généralement : l’OS propose des mécanismes de mémoires protégées, de files d’attentes (pipes) etc. ça supprime les problèmes d’intégrité, mais attention aux problèmes de blocage, de famine ! CNAM Grenoble – PR – 19 mars 2010 < 44 / 61 > La programmation asynchrone, concrètement int h = 0 ; int m = 0 ; mutex key ; main(){ run(thread1) ; run(thread2) ; } CNAM Grenoble – PR – 19 mars 2010 Le produit asynchrone CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement a || b A2 B2 < 49 / 61 > Modélisation du parallélisme Le produit synchronisé Modélisation du parallélisme Le produit synchronisé (suite) Modélisation du rendez-vous on a des canaux de communication, (ex. X ) un canal particulier appartient à un couple (émetteur, récepteur) déterminé l’émetteur utilise l’action X (v )! pour envoyer la valeur v le récepteur utilise l’action X (a)? pour récupérer une valeur et l’affecter à la variable a les deux actions sont blocantes ! la seule composition possible est : X (v )! || X (a)? , qui résulte simplement en a = v En général, seuls certains a || b sont possibles Exemple classique où c’est utile : modéliser le rendez-vous : le rendez-vous est un mécanisme de haut niveau fourni par les OS pour pour programmer la communication synchrone analogie avec une communication par téléphone (par opposition à une communication par courrier) CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme Le produit synchronisé < 50 / 61 > CNAM Grenoble – PR – 19 mars 2010 Le produit synchronisé Méthodes formelles de développement Modélisation du parallélisme Ordonnanceur < 51 / 61 > Le produit synchrone Le produit synchrone Un exemple très simple, avec des rendez-vous « purs » toutes les tâches avancent exactement au même rythme seule la simultanéité a du sens c’est le modèle du « parallélisme physique », dans le matériel (i.e. hardware, circuits) mais aussi du parallélisme logique, dans le domaine de la « programmation synchrone »(session 6). les communications sont instantanées (diffusion synchrone) g1 ? r1 ! g2 ? r2 ! r2 ? s1 g1 ! r2 g1 s1 s2 r1 ? g2 ! s2 r1 g2 Le parallélisme asynchrone/synchronisé sera étudié en détail dans la session 7. CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement Modélisation du parallélisme < 52 / 61 > CNAM Grenoble – PR – 19 mars 2010 Le produit synchrone Modélisation du parallélisme Exemple d’un circuit a z1 Le produit synchrone labels « entrées/sorties » notation a pour « a est vraie », ā pour « a est fausse » Reg · r1 x ⊕ z2 produit normal : e1 /s1 ||e2 /s2 = e1 e2 /s1 s2 Reg mais e1 x̄/xs2 impossible, tout comme e1 x/x̄s2 ! r2 · C1 b Méthodes formelles de développement 0 0 a/x̄ équations temporelles (temps = N) : x(t) = a(t) · z1 (t) b(t) = x(t) · z2 (t) z1 (t) = r1 (t) ⊕ a(t) z2 (t) = r2 (t) ⊕ x(t) r1 (0) = 0 r2 (0) = 0 r1 (t + 1) = z1 (t) r2 (t + 1) = z2 (t) a/x 1 ā/x̄ < 55 / 61 > āx̄/x̄ b̄ x̄/b̄ ā/x̄ C2 CNAM Grenoble – PR – 19 mars 2010 < 54 / 61 > Modèles et produit deux compteurs modulo 2 connectés : ⊕ Méthodes formelles de développement ax/xb āx̄/x̄ b̄ x/b 1 x̄/b̄ CNAM Grenoble – PR – 19 mars 2010 00 ax̄/x̄ b̄ x/b̄ 11 ax̄/x̄ b̄ 10 01 āx̄/x̄ b̄ ax/x b̄ āx̄/x̄ b̄ Méthodes formelles de développement < 56 / 61 > Modélisation du parallélisme Le produit synchrone Modélisation du parallélisme Diffusion et boucles de causalité Solutions aux boucles de causalité accepter tout ce qui correct pour un “vrai” circuit (causalité dite constructive) interdire complètement les boucles combinatoires problème inhérent à la diffusion synchrone que faire quand x(t) = f (x(t)) ? problème des boucles combinatoire en circuits : certaines sont clairement des erreurs : x = ¬x d’autres sont acceptables : x = c · y + c̄ · a y = c · b + c̄ · x CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 57 / 61 > Attention : on peut avoir une interdépendance entre x et y , à condition d’avoir un retard : x(t) = f (y(t)) y(t) = g(x(t − 1)) est toujours correct analogie avec les courts-circuits : on met des “résistances” (retards) pour les couper CNAM Grenoble – PR – 19 mars 2010 Conclusion < 59 / 61 > Conclusion Modéliser pour quoi faire ? programmer juste, session 6 sur la programmation synchrone concevoir juste, session 7 sur les spécifications asynchrones vérifier formellement, après coup, session 9 CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 58 / 61 > Approche formelle = construction de modèles (mathématiques) fidèles, permettant de raisonner sur les systèmes réactifs : modèles des programmes séquentiels, mono-tâche = systèmes de transitions étiquetés (automates) modélisation du parallélisme = produit(s) d’automates communicants Attention : plusieurs notions de parallélisme/communication = plusieurs types de produits Conclusion Méthodes formelles de développement Méthodes formelles de développement Conclusion Partie IV CNAM Grenoble – PR – 19 mars 2010 Le produit synchrone < 61 / 61 > CNAM Grenoble – PR – 19 mars 2010 Méthodes formelles de développement < 60 / 61 >