C4 Semaphore. Ressources



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

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

Introduction à la programmation concurrente

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

Cours de Systèmes d Exploitation

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

Problèmes liés à la concurrence

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

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

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Threads. Threads. USTL routier 1

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

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

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

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

Synchro et Threads Java TM

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Introduction aux Systèmes et aux Réseaux

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

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

Modélisation des interfaces matériel/logiciel

Ordonnancement temps réel

Introduction : les processus. Introduction : les threads. Plan

Ordinateurs, Structure et Applications

Introduction à la Programmation Parallèle: MPI

Ordinateurs, Structure et Applications

NOTICE INSTALLATION. ARCHANGE WebDAV Office N&B/Couleur KONICA MINOLTA BUSINESS SOLUTIONS FRANCE

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

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

Cours Programmation Système

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

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

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

4. Groupement d objets

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

gestion des processus La gestion des processus

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

Systèmes d exploitation Gestion de processus

VTP. LAN Switching and Wireless Chapitre 4

ACTIVITÉ DE PROGRAMMATION

Programmation C++ (débutant)/instructions for, while et do...while

Les 18 icônes du poste de pilotage (Salle Tecnilab)

Manuel de référence des commandes SMS Advisor Advanced

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

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

TD2 Programmation concurrentielle

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Corrigés des premiers exercices sur les classes

Recherche dans un tableau

Once the installation is complete, you can delete the temporary Zip files..

eps Network Services Alarmes IHM

NOTICE INSTALLATION. ARCHANGE Simplex Office N&B/Couleur KONICA MINOLTA BUSINESS SOLUTIONS FRANCE

Differential Synchronization


Premiers Pas en Programmation Objet : les Classes et les Objets

Arbres binaires de recherche

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Manipulation 4 : Application de «Change».

SERVEUR DÉDIÉ DOCUMENTATION

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)

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

Configurer la supervision pour une base MS SQL Server Viadéis Services

KL5121. Pour activer des sorties en fonction de la position d'un codeur

KPI (Key Performance Indicator) dans MOSS

PERFORMANCE BASE DE DONNÉES

Une introduction à la technologie EJB (2/3)

PROGRAMMATION EVENEMENTIELLE sur EXCEL

PIC EVAL Dev Board PIC18F97J60

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Cours d algorithmique pour la classe de 2nde

Organigramme / Algorigramme Dossier élève 1 SI

Modules InnovationCRM

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

OUTIL DE TRAVAIL COLLABORATIF

GE Security. KILSEN série NK700 Centrale de détection et d alarme Incendie conventionelle. Manuel d utilisation

Notion de thread (1/2)

Gestion des transactions et accès concurrents dans les bases de données relationnelles

progecad NLM Guide de l'utilisateur

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

LOG4430 : Architecture et conception avancée

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

INITIATION AU LANGAGE JAVA

Conception des systèmes répartis

Cours A7 : Temps Réel

Le prototype de la fonction main()

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

Algorithmique et Programmation, IMA

AWS avancé. Surveiller votre utilisation d EC2

Paris Airports - Web API Airports Path finding

Programmation Par Objets

Pré-conditions : Evénement déclencheur : le client souhaite un virement. Description du déroulement du cas : Description des Use cases

Transcription:

C4 Semaphore TRL Yann DOUZE Polytech Paris UPMC - Section E2i3 Source : livre µc/osii de Jean-Jacques Labrosse et les cours de l école polytechnique de Montréal. Ressources Une ressource est une entité utilisée par une tâche : I/O devices: printer, keyboard, display memory: variable, structure, array Une ressource partagée est une entité utilisée par plusieurs tâches. Certaines ressources peuvent être corrompues si consultées par plusieurs tâches simultanément : Il faut obtenir l'accès exclusif à une telle ressource avant de l'utiliser. (mutual exclusion : mutex)

Mécanismes d exclusion mutuelle (1) L exclusion mutuelle est un mécanisme d accès exclusif à une ressource partagée ou à une section de code critique. Méthodes pour assurer l exclusion mutuelle: désactiver/activer les interruptions désactiver/activer l ordonnanceur Utiliser des sémaphores. Mécanismes d exclusion mutuelle (2) Désactivation des interruptions : void Function (void) OS_ENTER_CRITICAL(); // désactive les IRQ Accès aux ressources partagés OS_EXIT_CRITICAL(); // réactive les IRQ Affecte le temps de réponse du système. Approprié pour protection lors de variables partagées avec une ISR.

Mécanismes d exclusion mutuelle (3) Désactivation de l ordonnanceur : void Function (void) OSSchedLock();//désactive l ordonnanceur Accès aux ressources partagés OSSchedUnlock();//réactive l ordonnanceur Inefficace lors de variables partagées avec une ISR Le système a alors un comportement non préemptif. Mécanismes d exclusion mutuelle (4) opération de TestAndSet (Sans RTOS) Désactiver les interruptions Si ( Variable d accés = 0) Mettre la variable à 1; Réactiver les interruptions; Accéder à la resource; Remettre la variable à 0; Sinon // Vous n avez pas accès à la ressource. Réactiver les interruptions;

Semaphore Pour quoi faire? Contrôler l accès à une ressource partagé (exclusion mutuelle) Signalez l occurrence d un événements. Synchronisez deux taches. 2 types de sémaphore : Les sémaphores binaires (0 ou 1) Les sémaphores compteurs : 0 à max (255, 65535, ) Utilisé un semaphore pour accéder à une ressource partagé (1) Contrôle l accès à une ressource partagé : imprimante

Utilisé un semaphore pour accéder à une ressource partagé (2) OS_EVENT *ShareDataSem; void function (void) int err; OSSemPend(ShareDataSem, 0, &err); /*accès à la ressource partagé (les interruptions sont reconnus */ OSSemPost(ShareDataSem); Semaphore Caché

Semaphore Caché int ComSendCmd(char *cmd,char *response,int timeout) Acquérir le sémaphore; Envoyer la commande au device; Attente de réponse (avec timeout) Si (temps terminé) rendre le semaphore; return(error code); Sinon rendre le semaphore; return(no error) Le blocage mutuel: Deadlock Le blocage mutuel (deadlock) est la situation où deux tâches se bloquent mutuellement, chacune d entre elles attendant l accès à une ressource possédée par l autre.

Les mécanismes de communication entre taches (1) Les sémaphores utilisées pour la synchronisation: pour signaler un événement d une tâche vers une autre. pour synchroniser deux tâches dans leur avancement. Synchronisation entre 2 taches Task1() for(;;) Perform operation; Signal Task #2; OSSemPost(sem1) Wait for signal from task #2; OSSemPend(sem2) Continue operation; Task2() for(;;) Wait for signal from task #1; OSSemPend(sem1) Perform operation; Signal Task #1; OSSemPost(sem2)

Fonctions pour les sémaphores Création du séamaphore : OS_EVENT *OSSemCreate(INT16U value); Suppression du sémaphore : OS_EVENT *OSSemDel(OS_EVENT *pevent, INT8U opt, INT8U *err); Incrémente le sémaphore : INT8U OSSemPost(OS_EVENT *pevent); Décrémente le sémaphore : void OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err); // bloquant void OSSemAccept(OS_EVENT *pevent); // non bloquant Renseigne sur l état du sémaphore : INT8U OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *pdata); Exemple sémaphore (communication entre tache) OS_EVENT *Sem; Void main(void) Sem = OSSemCreate(0); /* Création d un sémaphore*/... Void Task1() While(1) OSSemPend(Sem, 0, &err);/* Acquiert Semaphore */ /*La tache est bloqué tant que le semaphore n est pas acquis! */ /* le paramètre 0 signifie que le time out est infini */. Void Task2() While(1) OSSemPost(Sem); /* Release semaphore */. L exemple 1 montre comment on peut utiliser un sémaphore pour protéger l accès à une fonction non réentrante.

Mutex : Définition Mutex = Sémaphore binaire Permet de gérer l accès exclusif à une ressource partagée (écran, variable, structure, mémoire, etc ). En plus : Permet de gérer l inversion de priorité. Exemple : inversion de priorité 3 taches T1, T2 et T3 partagent la même ressource. T1 à la priorité la plus élevé (10) T2 à une priorité moyenne (15) T3 à la priorité la plus basse (20)

Exemple : inversion de priorité (1) Exemple : inversion de priorité (2)

Inversion de priorité Pour gérer l inversion de priorité : Une priorité doit être réservé pour le mutex. La priorité réservé pour le mutex doit être plus élevé que toutes les taches qui vont utiliser ce même mutex. OSMutex

OSMutexCreate() OSMutexCreate() permet de créer et d initialiser un Mutex. OS_EVENT *OSMutexCreate(INT8U prio, INT8U *err); Exemple : OS_EVENT *DispMutex; void main (void) OSInit(); /* Initialize µc/os-ii */ DispMutex = OSMutexCreate(20, &err); /* Create Display Mutex */ OSStart(); /* Start Multitasking */ OSMutexDel() OSMutexDel() permet de supprimer un Mutex. OS_EVENT *OSMutexDel(OS_EVENT *pevent, INT8U opt, INT8U *err); Exemple : OS_EVENT *DispMutex; void Task (void *pdata) while (1) DispMutex = OSMutexDel(DispMutex, OS_DEL_ALWAYS, &err); if (DispMutex == (OS_EVENT *)0) /* Mutex has been deleted */

OSMutexPend() OSMutexPend() est utilisé quand une tache désire avoir l accès exclusif à une ressource partagée. void OSMutexPend(OS_EVENT *pevent, INT16U timeout, INT8U *err); Exemple : OS_EVENT *DispMutex; void DispTask (void *pdata) for (;;) OSMutexPend(DispMutex, 0, &err);. /* The only way this task continues is if the mutex is available */ OSMutexAccept() OSMutexAccept() permet de savoir si une ressource est disponible. OSMutexAccept() est non-bloquant à l inverse de OSMutexPend(). INT8U OSMutexAccept(OS_EVENT *pevent, INT8U *err); Exemple : OS_EVENT *DispMutex; void Task (void *pdata) INT8U value; for (;;) value = OSMutexAccept(DispMutex, &err); if (value == 1). /* Resource available, process */ else. /* Resource NOT available */

OSMutexPost() OSMutexPost() permet de libérer l accès à une ressource partagée (libère le mutex). Un mutex ne peut être libéré que si il a été demandé au préalable (OSMutexPend et OSMutexAccept) INT8U OSMutexPost(OS_EVENT *pevent); Exemple : OS_EVENT *DispMutex; void TaskX (void *pdata) for (;;) err = OSMutexPost(DispMutex); Exemple (1) On reprend l exemple avec 3 taches T1 (10), T2 (15) et T3 (20). OS_EVENT *DispMutex; void main (void) OSInit(); /* Initialize µc/os-ii */ DispMutex = OSMutexCreate(9, &err); /* Create Display Mutex */ OSStart(); /* Start Multitasking */ void TaskPrio10 (void *pdata) for (;;) /* Application code */ OSMutexPend(DispMutex, 0, &err); /* Access Common resource */ err =OSMutexPost(DispMutex); /* Application code */

void TaskPrio15(void *pdata) for (;;) /* Application code */ OSMutexPend(DispMutex, 0, &err); /* Access Common resource */ err =OSMutexPost(DispMutex); /* Application code */ void TaskPrio20 (void *pdata) for (;;) /* Application code */ OSMutexPend(DispMutex, 0, &err); /* Access Common resource */ err =OSMutexPost(DispMutex); /* Application code */ Exemple (2) Inversion de priorité 1. La tache 3 acquiert le mutex. 2. La tache 1 désiré accéder au mutex. 3. Inversion de priorité. La tache 3 prend la priorité 9 jusqu à ce qu il libère le mutex : OSMutexPost() 4. La tache 1 peut ensuite accéder au mutex.