ELE-542 Systèmes ordinés en temps réels. Cours # 10 Contrôle d accès et synchronisation



Documents pareils
Cours de Systèmes d Exploitation

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

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

Introduction à la programmation concurrente

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

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

Problèmes liés à la concurrence

Partie 7 : Gestion de la mémoire

Structure fonctionnelle d un SGBD

Ordonnancement temps réel

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

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

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

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Chapitre 4 : Exclusion mutuelle

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

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

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

GPA770 Microélectronique appliquée Exercices série A

Les structures de données. Rajae El Ouazzani

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

L exclusion mutuelle distribuée

Introduction : les processus. Introduction : les threads. Plan

On appelle variable condition une var qui peut être testée et

Initiation à LabView : Les exemples d applications :

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

Le langage C. Séance n 4

Génie Logiciel avec Ada. 4 février 2013

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Systemes d'exploitation des ordinateurs

Introduction à la Programmation Parallèle: MPI

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

Cours de Base de Données Cours n.12

Dynamic Host Configuration Protocol

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

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

Projet Active Object

Architecture des ordinateurs

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Cours Bases de données 2ème année IUT

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Programmation d Applications Concurrentes et Distribuées (INF431)

1. Systèmes d entrée/sortie 2. Systèmes de fichiers 3. Structure de mémoire de masse (disques)

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Conventions d écriture et outils de mise au point

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

Métriques de performance pour les algorithmes et programmes parallèles

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

Gestion des processus

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

Synchro et Threads Java TM

gestion des processus La gestion des processus

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Cours A7 : Temps Réel

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Bases de données avancées Concurrence d'accès et reprise

Annexe 6. Notions d ordonnancement.

Qualité du logiciel: Méthodes de test

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

Initiation au HPC - Généralités

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Module BDR Master d Informatique (SAR)

Expérience 3 Formats de signalisation binaire

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Un ordonnanceur stupide

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

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

Chapitre 2. Classes et objets

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

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

Configuration automatique

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

2. Comprendre les définitions de classes

Ordonnancement temps réel

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

LOG4430 : Architecture et conception avancée

Gestion distribuée (par sockets) de banque en Java

Programmer en JAVA. par Tama

Université de La Rochelle. Réseaux TD n 6

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Chapitre 2. Les processus. 2.1 Introduction. 2.2 les différents états d un processus

Manipulation 4 : Application de «Change».

Analyse du temps de réponse des systèmes temps réel

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

1 Description générale de VISFIELD

Systèmes Répartis. Mr. Mehrez Boulares, Mr. Nour Ben Yahia

Transcription:

ELE-542 Systèmes ordinés en temps réels Cours # 10 Contrôle d accès et synchronisation Jean-Marc Beaulieu et Bruno De Kelper Site internet: http://www.ele.etsmtl.ca/academique/ele542/ Systèmes ordinés en temps réel Cours 10 1 Queues de messages Objets qui permettent de transmettre un message (i.e. une variable de la dimension d un pointeur). Une queue permet d emmagasiner plusieurs messages (OS_MAX_QS). Les messages sont gardés dans un tampon circulaire. Ajout d un message à la fin (OSQPost) FIFO Tête (IN) Queue (OUT) Ajout d un message au début (OSQPostFront) LIFO Queue (OUT) Tête (IN) Une tâche peut spécifier le délai maximum qu elle veut attendre. Une queue peut simuler un sémaphore à valeur entière (pas très inefficace). Systèmes ordinés en temps réel Cours 10 2 Contrôle d'accès et synchronisation cours 10 1

µc/os-ii Queues de messages OSQCreate OSQPost OSQPostFront OSQPend OSQAccept OSQFlush OSQQuery Création Retourne un pointeur sur le bloc événement Envoi d un message dans la queue (à la fin) Envoi d un message dans la queue (au début de la queue) Réception d un message et attend si nécessaire Réception d un message mais n attend pas Vide la queue (sans traiter les messages) Retourne un ensemble d informations sur la queue Tâche ISR Réf. : Labrosse, chap. 6 OSQPost() OSQCreate() OSQPostFront() OSQPostOpt() OSQFlush() Queue OSQPost() OSQPostFront() OSQPostOpt() OSQFlush() OSQAccept() OSQPend() OSQAccept() OSQQuery() Plusieurs messages (32 bits) Tâche Systèmes ordinés en temps réel Cours 10 3 µc/os-ii Queues de messages OS_EVENT *OSQCreate(void **queue, INT8U taille) (IN) queue = pointeur vers un tableau de pointeur qui sert de queue (IN) taille = nombre maximum de message que peut contenir la queue (OUT) Retourne un pointeur sur le bloc événement void *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) (IN) pevent = Pointeur vers la queue de message (IN) Timeout en ticks ( 0 = infini) (OUT) err = Code d erreur (OUT) Retourne un pointeur vers le message pris dans la queue INT8U OSQPost(OS_EVENT *pevent, void *msg) (IN) pevent = Pointeur vers la queue de message (IN) msg = pointeur vers le message (ne pas utiliser NULL) (OUT) Retourne un code d erreur INT8U OSQPostFront(OS_EVENT *pevent, void *msg) (IN) pevent = Pointeur vers la queue de message (IN) msg = pointeur vers le message (ne pas utiliser NULL) (OUT) Retourne un code d erreur Systèmes ordinés en temps réel Cours 10 4 Réf. : Labrosse, chap. 6 Contrôle d'accès et synchronisation cours 10 2

µc/os-ii Queues de messages INT8U OSQPostOpt(OS_EVENT *pevent, void *msg, INT8U opt) (IN) pevent = Pointeur vers la queue de message (IN) msg = pointeur vers le message (ne pas utiliser NULL) (IN) opt = option tel que : OS_POST_OPT_BROADCAST et OS_POST_OPT_FRONT (OUT) Retourne un code d erreur void *OSQAccept(OS_EVENT *pevent) (IN) pevent = Pointeur vers la queue de message (OUT) Retourne un pointeur vers le message (NULL = pas de message) INT8U OSQQuery(OS_EVENT *pevent, OS_Q_DATA *pdata) (IN) pevent = Pointeur vers la queue de message (OUT) pdata = Pointeur vers la structure contenant l information (OUT) Retourne un code d erreur Systèmes ordinés en temps réel Cours 10 5 Réf. : Labrosse, chap. 6 Exemples de synchronisation Problème 1 : Remplissage de bocaux de confiture Séquence : Confiture Horloge Solution sera fait en classe 1 Place bocal 2 Ouvre valve 3 Attend 30 sec. 4 Ferme valve 5 Enlève bocal Bocal Valve Problème de synchronisation Tâches : Tâche Bocal () { while(1) { PlaceBocal(); EnlèveBocal(); Tâche Valve () { while(1) { OuvreValve(); FermeValve(); Tâche Horloge () { while(1) { Attend(30); Systèmes ordinés en temps réel Cours 10 6 Contrôle d'accès et synchronisation cours 10 3

Exemples de synchronisation Problème 2 : Atelier automatisé Séquence : 1 Produit pièce 2 Place pièce 3 Tourne plateau 4 Retire pièce 5 Consomme pièce Producteur Consommateur Solution sera fait en classe Traitement séquentiel : (3) (15) (5) Enlève Consomme pièce (10) (3) Tourne plateau Produit pièce Place Produit pièce 10 13 18 21 36 Systèmes ordinés en temps réel Cours 10 7 Problème 2 : Exemples de synchronisation Atelier automatisé (suite) Traitement concurrent : Producteur Consommateur Enlève Tâches : Produit pièce Tâche Producteur () { while(1) { ProduitPièce(); PlacePièce(); Place Enlève Tourne plateau Produit pièce Place Consomme pièce Tourne plateau Produit pièce 10 13 18 21 36 Problème de synchronisation Tâche Plateau () { while(1) { TournePlateau(); Enlève Place Solution sera fait en classe Tâche Consommateur () { while(1) { RetirePièce(); ConsommePièce(); Systèmes ordinés en temps réel Cours 10 8 Contrôle d'accès et synchronisation cours 10 4

Exclusion mutuelle - MUTEX Le Mutex est un cas particulier de sémaphore. C est un sémaphore binaire qui sert au contrôle d accès à une ressource. Le Mutex utilise la méthode d héritage de priorité pour éviter les inversions de priorité. Une priorité est réservée pour l héritage et est associée au Mutex. Seul le propriétaire du Mutex peut le libérer (contrairement au sémaphore). Un Mutex ne peut pas être utilisé par une ISR (jamais). OSMutexCreate() Tâche OSMutexPost() OSMutexDel() Mutex OSMutexPend() OSMutexAccept() OSMutexQuery() Tâche Réf. : Labrosse, chap. 8 La clé Systèmes ordinés en temps réel Cours 10 9 µc/os-ii Mutex OS_EVENT *OSMutexCreate(INT8U Priorité, INT8U *Erreur) (IN) Priorité = Niveau de priorité associé au Mutex pour l héritage. (OUT) Retourne un pointeur sur le bloc événement void OSMutexPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) (IN) pevent = Pointeur vers le sémaphore (IN) Timeout en ticks ( 0 = infini) (OUT) err = Code d erreur INT8U OSMutexPost(OS_EVENT *pevent) (IN) pevent = Pointeur vers le sémaphore (OUT) Retourne un code d erreur INT16U OSMutexAccept(OS_EVENT *pevent) (IN) pevent = Pointeur vers le sémaphore (OUT) Retourne la valeur de le sémaphore ou 0 INT8U OSMutexQuery(OS_EVENT *pevent, OS_SEM_DATA *pdata) (IN) pevent = Pointeur vers le sémaphore (OUT) pdata = Pointeur vers la structure contenant l information Systèmes ordinés en temps réel Cours 10 10 Réf. : Labrosse, chap. 6 Contrôle d'accès et synchronisation cours 10 5

µc/os-ii Mutex OS_EVENT *OSMutexCreate(INT8U Priorité, INT8U *Erreur) (IN) Priorité = Niveau de priorité associé au Mutex pour l héritage. (IN) Erreur = Code d erreur (ex. : priorité déjà occupée OS_PRIO_EXIST) (OUT) Retourne un pointeur sur le bloc événement void OSMutexPend(OS_EVENT *pevent, INT16U Timeout, INT8U *Erreur) (IN) pevent = Pointeur vers le Mutex (IN) Timeout en ticks ( 0 = infini) (OUT) Erreur = Code d erreur INT8U OSMutexPost(OS_EVENT *pevent) (IN) pevent = Pointeur vers le Mutex (OUT) Retourne un code d erreur INT16U OSMutexAccept(OS_EVENT *pevent) (IN) pevent = Pointeur vers le Mutex (OUT) Retourne la valeur 1 (disponible) ou 0 (occupé) INT8U OSMutexQuery(OS_EVENT *pevent, OS_MUTEX_DATA *pdata) (IN) pevent = Pointeur vers le Mutex (OUT) pdata = Pointeur vers la structure contenant l information Réf. : Labrosse, chap. 8 Systèmes ordinés en temps réel Cours 10 11 µc/os-ii Bloc de contrôle d événement uc/os-ii utilise une structure spéciale appelée bloc de contrôle d événement (ECB) pour gérer les événements tels que : sémaphore, mutex, boite à lettre et queue de message. Une quantité limité de ECB (OS_MAX_EVENTS) est déclaré lorsque de l initialisation de uc/os-ii. Type d événement Utilisé par les sémaphores Type : sémaphore Compteur : 7 Pointeur : Liste d attente : vers une boite à lettre ou queue de message Tâche Tâche Tâche Tâche Tâche Systèmes ordinés en temps réel Cours 10 12 Contrôle d'accès et synchronisation cours 10 6

Interblocages ( Deadlocks ) Définition : Chaque processus d'un ensemble attend un événement qui ne peut être produit que par un autre processus de l'ensemble Ne pas confondre avec BLOCAGE : arrêt d'un processus pour un temps indéterminé Systèmes ordinés en temps réel Cours 10 13 Graphe d'allocation des ressources PROCESSUS P0 P1 P2 RESSOURCE A B classe unité ou instance Requête Allocation Systèmes ordinés en temps réel Cours 10 14 Contrôle d'accès et synchronisation cours 10 7

Graphe d'allocation des ressources relations entre les processus et les ressources R1 R3 P1 P2 P3 R2 R4 relations entre les processus P1 P2 P3 Systèmes ordinés en temps réel Cours 10 15 Utilisation d'une ressource Processus requête UTILISATION allocation relâche Systèmes ordinés en temps réel Cours 10 16 Contrôle d'accès et synchronisation cours 10 8

CONDITIONS D'INTERBLOCAGE (structure) Exclusion mutuelle au moins une ressource n'est pas partageable Pas de «préemption» (réquisition) (comportement) Retient et attend un processus retient des ressources et attend d'autres déjà allouées Attente circulaire ensemble circulaire de processus en attente Systèmes ordinés en temps réel Cours 10 17 CONDITIONS D'INTERBLOCAGE Retient et attend un processus retient des ressources et attend d'autres déjà allouées Attente circulaire ensemble circulaire de processus en attente P2 P3 P1 P4 P5 Systèmes ordinés en temps réel Cours 10 18 Contrôle d'accès et synchronisation cours 10 9

Les quatre conditions sont NÉCESSAIRES, mais NON SUFFISANTES R1 R3 P1 P2 P3 R2 R4 P1 P2 P3 Systèmes ordinés en temps réel Cours 10 19 Conditions non suffisantes R1 R3? P1 P2 P3 Détection des interblocages Dessiner le graphe d allocation des ressources Simplifier (plusieurs itérations) Enlever les processus non-bloqués et libérer leurs ressources R2 P4 R4 Systèmes ordinés en temps réel Cours 10 20 Contrôle d'accès et synchronisation cours 10 10

Exercice Simplifier R1 P1 P2 P3 R2 P4 R3 P5 P6 R4 P7 R5 R6 Systèmes ordinés en temps réel Cours 10 21 RISQUE DE FAMINE Famine (starvation) un processus est retardé indéfiniment par l'action des autres processus pas de famine Attente bornée La synchronisation doit éviter les risques de famine Systèmes ordinés en temps réel Cours 10 22 Contrôle d'accès et synchronisation cours 10 11

Drapeaux d événements Les drapeaux d événements permettent de transmettre un signal à une tâche. Une tâche peut attendre un ou plusieurs drapeaux d événements ou signaux. Les drapeaux d événements servent pour la synchronisation des tâches. 2 types de synchronisation : Synchronisation disjonctive Synchronisation conjonctive Drapeaux Drapeaux POST OR PEND Tâche POST AND PEND Tâche Tâche OSFlagPost() OSFlagDel() OSFlagCreate() OSFlagPend() OSFlagAccept() OSFlagQuery() Tâche ISR OSFlagPost() Groupe de drapeaux d événements OSFlagAccept() OSFlagQuery() Systèmes ordinés en temps réel Cours 10 23 Réf. : Labrosse, chap. 8 ISR µc/os-ii Drapeaux d événements OS_FLAG_GRP *OSFlagCreate(OS_FLAGS Flags, INT8U *Erreur) (IN) Flag = valeur initiale des drapeaux d événements. (OUT) Retourne un pointeur sur le groupe de drapeaux. OS_FLAGS OSFlagPend(OS_FLAGS *pgroupe, OS_FLAG Flags, INT8U Wait_Type, INT16U Timeout, INT8U *Erreur) (IN) pgroupe = Pointeur vers le groupe de drapeaux. (IN) Flags = patron de drapeaux à tester. (IN) Wait_Type = type de synchronisation : OS_FLAG_WAIT_CLR_ALL OS_FLAG_WAIT_SET_ALL OS_FLAG_WAIT_CLR_ANY OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME (IN) Timeout en ticks ( 0 = infini) (OUT) Erreur = Code d erreur (OUT) Retourne l état actuel des drapeaux ou l état après qu ils ont été consumé. Systèmes ordinés en temps réel Cours 10 24 Réf. : Labrosse, chap. 6 Contrôle d'accès et synchronisation cours 10 12

µc/os-ii Drapeaux d événements OS_FLAGS OSFlagPost(OS_FLAG_GRP *pgroupe, OS_FLAGS Flags, INT8U Option, INT8U *Erreur) (IN) pgroupe = Pointeur vers le groupe de drapeaux. (IN) Flags = patron de drapeaux à activer. (IN) Option = met les drapeaux à 0 (OS_FLAG_CLR) ou à 1 (OS_FLAG_SET) (OUT) Erreur = code d erreur (OUT) Retourne la nouvelle valeur des drapeaux du groupe INT16U OSFlagAccept(OSFlagPend(OS_FLAGS *pgroupe, OS_FLAG Flags, INT8U Wait_Type, INT16U Timeout, INT8U *Erreur) (comme pour OSFlagPend) OS_FLAGS OSFlagQuery(OS_FLAG_GRP *pgroupe, INT8U *Erreur) (IN) pgroupe = Pointeur vers le groupe de drapeaux (OUT) Erreur = Code d erreur (OUT) Retourne l état actuel des drapeaux du groupe. Systèmes ordinés en temps réel Cours 10 25 Réf. : Labrosse, chap. 6 Contrôle d'accès et synchronisation cours 10 13