Conception Multitâches. (LACATRE / Vx Works) Jean-Philippe Babau



Documents pareils
Exécutif temps réel Pierre-Yves Duval (cppm)

Cours 6 : Tubes anonymes et nommés

Temps Réel. Jérôme Pouiller Septembre 2011

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Bases de programmation. Cours 5. Structurer les données

Introduction à la programmation concurrente

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Cours Programmation Système

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

PROJET ALGORITHMIQUE ET PROGRAMMATION II

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Problèmes liés à la concurrence

Conception des systèmes répartis

REALISATION d'un. ORDONNANCEUR à ECHEANCES

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Les structures de données. Rajae El Ouazzani

Conventions d écriture et outils de mise au point

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Les processus légers : threads. Système L3, /31

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Structure d un programme


OS Réseaux et Programmation Système - C5

Projet gestion d'objets dupliqués

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Qualité du logiciel: Méthodes de test

ORDONNANCEMENT CONJOINT DE TÂCHES ET DE MESSAGES DANS LES RÉSEAUX TEMPS RÉELS 4. QUELQUES EXEMPLES DU DYNAMISME ACTUEL DU TEMPS RÉEL

Cours de Systèmes d Exploitation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Ordonnancement temps réel

Playing with ptrace() for fun and profit

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Modélisation des interfaces matériel/logiciel

Architecture des ordinateurs

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Implémentation Matérielle des Services d un RTOS sur Circuit Reconfigurable

Introduction aux Systèmes et aux Réseaux

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Chap III : Les tableaux

La carte à puce. Jean-Philippe Babau

Programmation système de commandes en C

Introduction à la Programmation Parallèle: MPI

Les structures. Chapitre 3

Chapitre VI- La validation de la composition.

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre 4 : Exclusion mutuelle

Eléments de spécification des systèmes temps réel Pierre-Yves Duval (cppm)

Cours de Programmation Impérative: Zones de mémoires et pointeurs

IFT Systèmes d exploitation - TP n 1-20%

Cours d initiation à la programmation en C++ Johann Cuenin

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique et Programmation, IMA

Programmation C. Apprendre à développer des programmes simples dans le langage C

3IS - Système d'exploitation linux - Programmation système

Synchro et Threads Java TM

eps Network Services Alarmes IHM

Cours A7 : Temps Réel

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Java Licence Professionnelle CISII,

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

<Insert Picture Here> Solaris pour la base de donnés Oracle

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Programmation système en C/C++

Initiation. àl algorithmique et à la programmation. en C

Introduction à l informatique temps réel Pierre-Yves Duval (cppm)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

1 Mesure de la performance d un système temps réel : la gigue

Compression de Données - Algorithme de Huffman Document de Conception

Protocole de configuration dynamique des hôtes pour IPv6 (DHCPv6)

Le prototype de la fonction main()

PIC EVAL Dev Board PIC18F97J60

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Programmation système I Les entrées/sorties

Le modèle client-serveur

Introduction au langage C

PROGRAMME DU CONCOURS DE RÉDACTEUR INFORMATICIEN

Ethernet Industriel Réseaux Ethway Coupleur Ethernet sur Automates Programmables. Plan. Contexte

4. Outils pour la synchronisation F. Boyer, Laboratoire Sardes

LEs processus coopèrent souvent pour traiter un même problème. Ces

NFP111 Systèmes et Applications Réparties

Introduction. Adresses

Algorithmique I. Algorithmique I p.1/??

Les fichiers. Chapitre 4

Le langage C. Séance n 4

Introduction aux systèmes temps réel. Iulian Ober IRIT

Exercices INF5171 : série #3 (Automne 2012)

Cours 1: Java et les objets

Introduction : les processus. Introduction : les threads. Plan

Environnements de développement (intégrés)

Structure fonctionnelle d un SGBD

Mise en oeuvre TSM 6.1

Transcription:

Conception Multitâches (LACATRE / Vx Works) Jean-Philippe Babau Département Informatique, laboratoire CITI INSA Lyon 1

LACATRE Abréviation de Langage d Aide à la Conception d Applications Temps Réel Langage graphique version textuelle Langage de programmation des ETR Facilite la communication entre concepteurs Génération automatique de code Vérification de propriétés Création / destruction LACATRE : principe Forme graphique Forme textuelle Acquisition 132 info Bal 50 TASK(Acquisition,132) FOREVER send_to_mbx(bal,info,,); END_TASK... int Acquisition(void) { /* local varaibles of the task < Acquisition> */ /* body of the task <Acquisition> */ for (;;) { msgqsend(bal,(char*)&info,sizeof(info),wait_forever,msg_pri_normal); } } Code C/VxWorks 2

LACATRE : les objets Les objets programmables A la tâche l alarme la routine d interruption Les objets configurables le sémaphore la boîte aux lettres G M la ressource AND l événement message, paramètres LACATRE : les actions Symbole graphique les connecteurs lignes de liaison décor connecteurs sur barre de progression création destruction connecteurs sur barres d état mess avec contrôle de flux connecteurs sur barre de progression mess connecteurs sur barres d action sans contrôle de flux 3

LACATRE : formes algorithmiques Si-alors-sinon condition variable val1 Cas-parmi val2 val3 other Tant que condition Faire toujours condition Répéter juqu à LACATRE : formes algorithmiques Procédure nom Appel Code /* code to add */ Les aspect transformationnels sont traités en C Les structures sont liés aux autres objets temps réel 4

nomtache priorite LACATRE : la tâche paramètres textuels séquence d initialisation barre de bouclage barre de progression barre d état LOCAL int taskid ; C/VxWorks int nomtache(void) { /* declaration variables locales*/ /* instructions d initialisation */ for ( ; ; ) /* forever */ { /* instructions */ /* attente */ /*instructions */ } return 0} LACATRE : la tâche Création Destruction NomTache prio C/VxWorks LOCAL int taskid ; taskid =taskspawn("aff",prio,0,10000, NomTache,0,0,0,0,0,0,0,0,0,0); status = taskdelete(taskid ); exit() ; /* autodestruction */ Destruction lorsque toutes les ressources sont libérées Protection contre la destruction! attention! tasksafe (); taskunsafe(); 5

LACATRE : la tâche Suspension Réactivation nomtache prio Auto-suspension C/VxWorks tasksuspend(taskid) ; tasksuspend(0); /* autosuspension */ taskresume(taskid) ; LACATRE : la tâche Changement de priorité # nomtache prio Lecture de priorité? C/VxWorks status = taskpriorityset(taskid,,priority) ; status = taskpriorityget(taskid, &priority) ; Sommeil duree nomtache prio C/VxWorks taskdelay(duree); /* en ticks (60 ticks par secondes par defaut)*/ 6

Autres primitives Pas de représentation graphique nom = taskname(taskid) renvoie le nom de la tâche (char*) takid = tasknametoid(" AFF") renvoie l id d une tâche pour un nom donné takid = taskidself() renvoie l id de la tâche appelante Existe = taskidverify(taskid) vérifie l existence d une tâche taskidlistget(); taskisready(taskid) ; LACATRE : le sémaphore barre de dépôt SemName valmax SemName valmax valinit valinit barre de retrait barre d état décor (priorité) Création Destruction semid = sembcreate(sem_q_fifo SEM_Q_PRIORITY, SEM_FULL SEM_EMPTY) ; semid = semccreate(sem_q_fifo SEM_Q_PRIORITY, initcount) ; status = semdelete(semid) ; C/VxWorks 7

LACATRE : le sémaphore Dépôt nbunité semname nbunité temps Retrait C/VxWorks status = semgive(semid) ; status = semflush(semid) ; /* déblocage de toutes les tâches en attente */ status = semtake(semid, temps WAIT_FOREVER NO_WAIT) ; LACATRE : la boîte aux lettres barre de dépôt balname nbmaxmess balname nbmaxmess Création barre de retrait barre d état décor (priorité) Destruction msgqid = msgqcreate(nbmaxmess, longueurmax, SEM_Q_FIFO SEM_Q_PRIORITY) ; status = msgqdelete(msgqid) ; C/VxWorks 8

LACATRE : la boîte aux lettres messid Dépot balname temps messid Retrait status = msgqsend(msgqid,buffer,noctets,temps NO_WAIT WAIT_FOREVER, MSG_PRI_NORMAL MSG_PRI_URGENT ) ; val = msgqreceive(msgqid,buffer,noctets,temps WAIT_FOREVER NO_WAIT ) ; /* renvoie le nombre d octets copiés */ C/VxWorks LACATRE : la ressource type de ressource : G, F, D ou R barre d accès resid D M barre d accès barre d état type de protection : M, I, L ou O Création D M Destruction semid = semmcreate(sem_q_fifo SEM_Q_PRIORITY SEM_DELETE_SAFE SEM_INVERSION_SAFE) ; /* etat SEM_FULL */ status = semdelete(semid) ; C/VxWorks si protection par sémaphore 9

LACATRE : la ressource Ecriture ressid F temps M temps Lecture Libération status = semtake(semid, temps WAIT_FOREVER NO_WAIT) ; status = semgive(semid) ; /* semflush interdit */ C/VxWorks si protection par sémaphore LACATRE : l interruption source barre d état itroutine barre de progression Création itroutine Destruction intconnect(adressevecteur,itroutine,parametre) ; itroutine(int val) { } C/VxWorks 10

Déclenchement LACATRE : l interruption itroutine nomtache Masquage / démasquage itroutine nomtache C/VxWorks lock = intlock() ; intunlock (lock) ; C/VxWorks status = intdisable (level) ; status = intenable ( level) ; Interruptions sous VxWorks Primitives autorisées semgive msgqsend write (pipe) tasksuspend wdstart, wdcancel Primitives interdites : primitives bloquantes msgqreceive, semtake semgive sur un sémaphore d'exclusion mutuelle, semflush tasklock printf (appel d une primitive bloquante) Interruptions logicielles getchar () ; control C 11

LACATRE (extensions) : l alarme tempo A alroutine barre de progression barre d état Création tempo A alroutine Destruction LOCAL WDOG_ID wdid ; wdid = wdcreate(); C/VxWorks status = wddelete(wdid ) ; LACATRE (extensions) : l alarme Activation tempo A alroutine Arrêt status = wdstart(wdid,tempo,alroutine,param); C/VxWorks status = wdcancel(wdid); Déclenchement tempo A alroutine dep nomtache 12

Et les autres RTOS Chaque RTOS défini des objets et des services spécifiques Cf. cours OS pour l embarqué Manipulation de concepts de haut niveau Par exemple la ressource LACATRE À implémenter avec le RTOS utilisé Manipulation de concepts de bas niveau Concept spécifique à un cible Comportement spécifique à une cible Sémaphore à compte de VxWorks : pas de prise/libération de n jetons Portage des architectures multitâches limité Concepts Formalisme graphique Principes Conception Aspect réactif et concurrents Tâches Communication avec l environnement externe Échange d information Prédictibilité Statique / dynamique Vérification, mise au point Distribution 13

Principes généraux Spécification Un événement externe séquence d actions Contraintes temps réel (échéances) Politiques de réaction aux fautes temporelles Reconfiguration Mise en place de tâches Réalisation des actions Lien avec l environnement Respects des contraintes temps réel Priorité Phases de l application Création / destruction / suspension / réactivation Moteur / exception Réutilisation Processus Pilotes, applications, Type de tâches Initiale activée au lancement de l application Ordinaire liée à un événement externe ou interne tâches matérielles - tâches logicielles liée à une alarme périodique - activée par une autre tâche liée à une interruption boucle infinie avec attente sémaphore (binaire ou à compte) boîte aux lettres Mécanisme spécifique de synchronisation Tâche de fond toujours active exécutée lorsque toutes les autres tâches sont terminées 14

Mise en place de l architecture logicielle Déclenchement des tâches Exécution des actions Prise en compte des événements Concurrence et coopération Contraintes de temps Initialisation des données et services Échange de données Création / destruction des éléments Déclenchement Traitement périodique Traitement régulier Traitement du signal Scrutation d un procédé ou de l environnement Nombres d activation Synchronisation des actions Plusieurs tâches périodiques Traitement à date fixe Traitement des interruptions 15

Exemple 1 (LACATRE) dureemax main P1 Bonjour P2 duree Affiche void Affiche( int valeur ) { printf(" temps = %d\n ", valeur) ; } Exemple 1 (VxWorks) #include <tasklib.h> #include <time.h> #define P2 150 #define dureemax 150 #define duree 10 LOCAL int BonjourId ; int Bonjour(void); int main(void) { BonjourId = taskspawn(" TASK1",P2,0,20000,Bonjour,0,0,0,0,0,0,0,0,0,0); taskdelay(dureemax); taskdelete(bonjourid ); return (0); } int Bonjour(void) { int temps = 0; for(;;) { taskdelay(duree); Affiche( temps ++); } return 0; } 16

Exemple 2 (LACATRE) main P1 Fin 1 1 fini Bonjour P2 duree Affiche int main() { Exemple 2 (VxWorks) FinId = SemBCreate(SEM_Q_FIFO, EMPTY) ; BonjourId = taskspawn(" TASK1",P2,0,20000,Bonjour,0,0,0,0,0,0,0,0,0,0); semtake(finid, WAIT_FOREVER) ; taskdelete (EcrireId ) ; semdelete (FinId ) ; return(0) ; } int Bonjour() { int temps = 0 ; for ( ; ; ) { taskdelay(duree) ; Affiche( temps++ ) ; /* fini */ if (temps == 5 ) semgive(finid) ; } return 0 ; } 17

Tâche périodique periode A alroutine dep nomtache #define periode 100 wdid = wdcreate(); wdstart(wdid,0,alroutine,0); alroutine ( int valeur) { wdstart(wdid,periode,alroutine,0); semgive(dep) ; } C/VxWorks Déclenchement synchronisé Contôle (~RTOS) periodemin A alroutine top Declencheur (priorité forte) T1 T2 tache1 tache2 Application 18

Routine d'it pas de traitements mémorisation des its acquisition datation Serveur d'it traitement lié à l'it immédiat / différé Traitement des interruptions Communication routine/serveur sémaphore booléen sémaphore à compte boite aux lettres donnée sans protection masquage des IT Serveur à scrutation Serveur periode alroutine A itroutine IT TOP 0 2 afaire = 0 Si TOP Si afaire 3 afaire = 0 A 5 4 Fonctionnement Signalement d'une interruption (0) Mémorisation de l interruption (1) Activation du serveur (2) Test sur interruption à traiter (3) Acquittement logiciel (4) Traitement (5) Si IT afaire = 1 1 Variantes Afaire ++, si afaire A(n) 19

Scrutation / événementiel Événementiel évaluation de dmin dynamique du procédé valeur imposée Protection masquage/démasquage Pas de perte de temps Scrutation L application définit son rythme de travail Prédictibilité Obligatoire dans certains domaines (certification) OSEK Time Mise en place des tâches pour l exécution des actions Actions À partir d un événement externe (alarme ou interruption) : suivi du fil d exécution Une tâche = une séquence d actions Gestion des contraintes de temps Priorités des actions -> priorités des tâches Priorité liée à l urgence temporelle (cf. cours d ordonnancement) Gestion des phases et des composants Initialisation / urgence / Découpage en processus 20

Tâches Vs actions (1) 2 actions en séquence A1 A2 1 A1 A2 2 # A1 A2 Ordonnancement des actions (1) IA da IA 1 IB A1 A2 B db IA da1 da2 IA 2 IB A1 B A2 db 21

Tâches Vs actions (2) 2 actions en séquence A1 A2 A1 3 A2 A1 4 G M A2 Ordonnancement des actions (2) 3 IA A1 IA A1 A2 A2 A2 4 IA A1 IA A1 A2 B 22

Suivi du respect des échéances Instrumentation temporelle des tâches X1= now() X2 = now() Activation d une tâche corrective Si (X2 X1) > d trop tard! TacheA action d A ExceptTempA Suivi du respect des échéances Gestion groupée des timeout SET/RESET Attente sur (Now x) timeout SET/RESET G O Liste ordonnée des dates absolues de réveil x A y B Message -> A Set ajout dans la liste les paramètres sont la date de réveil et l adresse de la bal où envoyer le message si expiration Reset retrait de la liste Attente sur la date du prochain réveil Expiration Émission du message 23

Découpage de l application Approche modulaire Encapsulation Réutilisation Découpage en phases Plusieurs processus distincts Lien entre les processus Événement déclenchant et événement de fin» Détection et réaction prioritaire (urgence) suspension / activation des activités en cours / nouvelles» Gestion du cycle de vie des activités du système Partage des données Plusieurs modes de fonctionnement par tâches Mode : information partagée Pas de préemption Découpage de l application Processus serveurs Une tâche offre des services aux autres tâches Modèle de communication (cf. serveur ci après) Problème de gestion de la concurrence d accès Inversion de priorité possible pour un appel bloquant Cf. cours ordonnancement Priorité des services pour des événements concurrents File et priorité Rendre la priorité haute : par exemple pour les services I/O Rendre la tâche moins prioritaire : traitements sans délai 24

Définition des tâches Approche événementielle Une tâche est mise en place pour une séquence d action liée à un événement externe et possédant une priorité liée à l urgence temporelle de l événement Approche service Une tâche par processus Une tâche pour un ensemble de services Approche système Une tâche à haute priorité pour exécuter des services de haut niveau non fournis par le RTOS Messages Besoins Requêtes Invocation distante Serveurs Objets Echange d'informations Mise en oeuvre Boite aux lettres Canal Données partagées Variables globales Fichiers Mémoire partagée 25

Echange d'informations Données synchronisées Ecrasement Nouvelle valeur Échange désynchronisé G M Donnee Nombre maximal fixe de données buffer matériel (réseau) 1 à n section critiques NlleDonnee R R R R O O O O read write init Boîte aux lettres (LACATRE) Plus Producteur P1 req balcom Consommateur P2 26

Boîte aux lettres (C/VxWorks) LOCAL MSG_Q_IDbalComId; typedef struct { int num; char message[5]; } info; void Producteur() { int i = 0 ; info msge; for (;;) { semtake(plusid,wait_forever); msge.num = i ++; msge.message = " toto"; msgqsend(balcomid,(char*)&msge, sizeof(info), WAIT_FOREVER, MSG_PRI_NORMAL) ; }} Boîte aux lettres (C/VxWorks) void Consommateur() { info msgr ; balcomid = msgqcreate(10,sizeof(info),msg_q_fifo); for ( ; ; ) { msgqreceive(balcomid,(char*)&msgr,sizeof(info),wait_forever); printf("%i%s\n",msgr.num,msgr.message); }} 27

Communication Client / Serveur Le serveur crée une bal de réception des requêtes Le client envoie une requête dans la bal de réception des requêtes mode d adressage ou de nommage Si réponse nécessaire création d une bal de réponse envoi avec la requête de la bal de réponse attente de la réponse Communication Client/Serveur (LACATRE) Client P1 req balserv Serveur P2 rep balcli 28

Communication client / serveur (VxWorks) LOCAL MSG_Q_ID balservid; LOCAL MSG_Q_ID balcliid; typedef struct { info message ; MSG_Q_ID balrepid ; }MSG; void Client() { MSG reqc; MSG repc; balcliid = msgqcreate(10,sizeof(msg),msg_q_fifo); reqc.message = ; reqc. balrepid = balcliid ; msgqsend(balservid,(char*)& reqc, sizeof(msg), WAIT_FOREVER, MSG_PRI_NORMAL) ; msgqreceive(balcliid,(char*)& repc,sizeof(msg),wait_forever); } Communication client / serveur (VxWorks) void Serveur() { MSG reqs; MSG reps; balservid = msgqcreate(10,sizeof(msg),msg_q_priority); for ( ; ; ) { msgqreceive(balservid,(char*)& reqs,sizeof(info),wait_forever); reps.message = ; reps. balrepid = NULL ; msgqsend(reqs.balrepid,(char*)& reps, sizeof(msg), WAIT_FOREVER, MSG_PRI_NORMAL) ; }} 29

Donnée partagée ( LACATRE) Plus Ecrivain P2 donnee Lecteur P1 Evt G M Donnée partagée (VxWorks) typedef struct { int heure ; int minute ; } horaire; horaire donnee ; semdonneeid = semmcreate(sem_q_priority SEM_INVERSION_SAFE) ;... void Lecteur() { semtake(evtid, WAIT_FOREVER) ; semtake(semdonneeid, WAIT_FOREVER) ; printf("%i %i\n", donnee.heure, donnee.minute ) ; semgive(semdonneeid) ; } 30

Donnée partagée (VxWorks) void Ecrivainr() { semtake(plusid, WAIT_FOREVER) ; } semtake(semdonneeid, WAIT_FOREVER) ; if (donnee.minute < 59 ) { donnee.minute ++ ;} else { if (donnee.heure < 23) { donnee.heure ++ ; donnee.minute = 0 ; } else { donnee.heure = 0 ; donnee.minute = 0 ; } } semgive(semdonneeid) ; Echanges de données Zones de stockage Taille d une zone de stockage (producteur /consommateur) Politique de stockage FIFO, LIFO, politique d écrasement Datation d acquisition des données stockées Validité des données : age, valeurs correctes Du point de vue de l écrivain Si la zone de mémorisation est pleine Perte ou attente Perte de la donnée la plus récente ou de la plus ancienne Mise en attente ( timeout) Evénement lié à l écriture Du point de vue du lecteur Toutes les données doivent être reçues Dernière(s) donnée(s) reçue(s) Attente si pas de données, attente avec timeout 31

Exemple Événement externe evt1 6 7 i opération evt3 Donnée evt2 1 2 3 4 5 Donnée partagée par plusieurs opérations Séquence Exemple Événement externe evt1 6 7 i opération Routine d interruption tâche evt3 Boîte aux lettres evt2 1 2 3 4 5 Donnée interne Donnée partagée en exclusion mutuelle mutex Appel séquentiel message 32

Exemple Événement externe evt1 6 7 i opération Routine d interruption tâche evt3 Boîte aux lettres evt2 1 2 3 4 5 Donnée interne Donnée partagée en exclusion mutuelle mutex Appel séquentiel message Exemple Événement externe i opération evt1 6 7 evt3 Routine d interruption tâche 0 1 2 3 Boîte aux lettres evt2 4 5 Donnée interne Donnée partagée en exclusion mutuelle mutex Appel séquentiel message 33

Création / destruction Principe de base : accès à un objet initialisé (créé) Gestion statique (main) Ordre de création objets de communication tâches IT, alarmes Ordre de destruction Ordre inverse Gestion dynamique tâche «propriétaire» «la tâche crée sa bal» Gestion pseudo-dynamique Création statique d un pool Création dynamique dans la limite du pool Statique prédictible, pire cas dimensionnement coûteux Statique Vs dynamique Dynamique optimisation adaptation environnement inconnu changement de mode mode dégradé Semi dynamique allocation limitée à une borne supérieure Statique / dynamique application programmée en statique superviseur dynamique 34

Vérification Preuves Absence d interblocage Dimensionnement correct des éléments de communication Analyse temps réel Tests Test unitaire des fonctions Test d intégration Enchaînement d actions, tâches Scénarios Combinaison réaliste d événements E1 E1 E2 E1 E2 E1 Prise en compte des contraintes temps réel Comportement estimé de l environnement Mise au point Environnement externe Ensemble complexe avion Coûteux Quelles sont les conséquences sur le procédé si échec du test? Non réalisé lors de la mise au point du logiciel Environnement simulé ou émulé Différentes versions Simulation IT + routine = tâche Émulation logicielle Une tâche-procédé envoie une IT Le test modifie le logiciel par ajout d éléments Test de l ensemble «appli+module de test» Émulation matérielle Module externe spécifique Environnement réel 35

Mise au point Mode trace Fonction, temps Ressources restreintes (IHM, BD, medium de communication Mars PathFinder Modularité Attention aux effets de bord (Ariane V) Intégration Conclusion Formalisme graphique LACATRE Simple pour la communication Complet pour l implémentation Architecture Scrutation / événementiel Concurrence Contrôle dynamique des actions Contraintes de temps Informations échangées Synchronisation Avec/sans écrasement Taille de la zone de stockage Statique / dynamique 36

Conclusion Gestion du temps Indépendante des traitements Vérification Sûreté de fonctionnement Tests sur combinaison d événements Environnement externe 37