Unix - e2i5 - Synchronisation des processsus : sémaphores et variables d'exclusion mutuelle



Documents pareils
Programmation système

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

Cours de Systèmes d Exploitation

Cours 6 : Tubes anonymes et nommés

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

Cours Programmation Système

Introduction aux Systèmes et aux Réseaux

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

Gestion des processus

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

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

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

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

Introduction à la programmation concurrente

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

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

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

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

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

Projet gestion d'objets dupliqués

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Problèmes liés à la concurrence

Année Universitaire 2009/2010 Session 2 de Printemps

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

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

QUELQUES CONSEILS POUR LA MAINTENANCE DE VOTRE ORDINATEUR

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

Conception de circuits numériques et architecture des ordinateurs

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

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre 2. Classes et objets

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours de Génie Logiciel

gestion des processus La gestion des processus

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

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

Licence Sciences et Technologies Examen janvier 2010

Compte-rendu de projet de Système de gestion de base de données

Synchro et Threads Java TM

Généralités sur le Langage Java et éléments syntaxiques.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

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

Réalisation d'un seeder BitTorrent en CPC Stage de TRE sous la direction de J. Chroboczek et G. Kerneis

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

Recherche dans un tableau

Algorithmique et Programmation, IMA

Programmation Objet - Cours II

Éléments d'architecture des ordinateurs

Guide d'utilisation du Serveur USB

Chapitre 4 : Exclusion mutuelle

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

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

l'ordinateur les bases

Chapitre 4 : Outils de communication centralisés entre processus

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

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

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

SweetyPix, mode d'emploi

Cours Langage C/C++ Programmation modulaire

Vers l'ordinateur quantique

Symantec Backup Exec 12.5 for Windows Servers. Guide d'installation rapide

Sauvegarde avec Windows 7

Cours A7 : Temps Réel

ORACLE TUNING PACK 11G

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

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

I. Introduction aux fonctions : les fonctions standards

MEDIAplus elearning. version 6.6

UE Programmation Impérative Licence 2ème Année

3. La SGA ou System global Area

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

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

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

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Acer erecovery Management

Partie 7 : Gestion de la mémoire

Propagation sur réseau statique et dynamique

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

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0

Back up Server DOC-OEMSPP-S/6-BUS-FR-17/05/11

Algorithmes d'apprentissage

Chapitre 10. Les interfaces Comparable et Comparator 1

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

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

Implémentation des SGBD

Les bases de données Page 1 / 8

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

Chapitre 2 Accès aux partages depuis votre système d'exploitation

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

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Transcription:

Unix - e2i5 - Synchronisation des processsus : sémaphores et variables d'exclusion mutuelle Laurent Bobelin Polytech 2012 L.Bobelin (MESCAL) 2012 1 / 27

1 Rappels Processus IPC 2 Synchronisation entre processus Problèmes de synchronisation Famine Inversion de priorité Les philosophes Section critique 3 Implémentation en C sous Linux Implémentation System V Implémentation POSIX L.Bobelin (MESCAL) 2012 1 / 27

Rappels Processus Dénition Un processus est un l d'exécution qui s'exécute sur une machine Plusieurs processus cohabitent simultanément, souvent liés entre eux par des liens de famille. Les processus se partagent les ressources de la machine (périphériques, CPU, chiers...) Pourquoi interagir avec les processus? Les processus interagissent entre eux et doivent donc pouvoir communiquer entre eux Le système doit pouvoir avertir les processus en cas de défaillance d'un composant du système L'utilisateur doit pouvoir gérer les processus (arrêt, suspension,..) Les méthodes de communications entre processus sont souvent désignés par l'acronyme IPC : Inter-Process Communications L.Bobelin (MESCAL) 2012 2 / 27

Rappels IPC IPC Il existe de multiples moyens de réaliser une communication inter-processus : Par chiers ( tout système) Signaux (Unix/Linux/MacOS, pas vraiment sous Windows) Sockets ( tout système) Files d'attente de message ( tout système) Pipe/tubes (tout système POSIX, Windows) Named pipe/tubes nommés (tout système POSIX, Windows) Sémaphores (tout système POSIX, Windows) Mémoire partagée (tout système POSIX, Windows) Passage de message : MPI, RMI, CORBA...... Aujourd'hui on s'intéresse aux sémaphores. L.Bobelin (MESCAL) 2012 3 / 27

Synchronisation entre processus Accès aux ressources Types d'accès aux ressources Exclusif : un seul processus peut utiliser cette ressource à un instant donné (ex : une imprimante ne peut imprimer qu'un document à la fois). Simultané : quand on dispose de n ressources indiérenciées (ex : n imprimantes, n têtes de lectures sur un disque). Type et mode d'accès Lecture : souvent non exclusif (ex : n processus peuvent lire simultanément la même donnée). Ecriture : écriture simultanée ainsi que lecture de la variable par d'autre processus interdites. Accès : reposent sur l'atomicité des actions. Peuvent concerner des portions de code. L.Bobelin (MESCAL) 2012 4 / 27

Synchronisation entre processus Outils pour la synchronisation des accès Sémaphores Mécanisme de synchronisation fourni par le système (Dijkstra, 1965), permet de gérer les accès de plusieurs processus à une ressource. 2 primitives pour les proc. (+ création et destruction) et 1 compteur : P(x) (Proberen) et V (x) : (Verhogen). x : id (clef) du sémaphore. Compteur (caché) dans le sémaphore i : Initialisation : n = nb. proc. pouvant utiliser la ressource simultanément i-- à chaque fois qu'on autorise un processus à y accéder (P(x)). Si i = 0, on attend qu'un processus appelle V (x). (appel bloquant). i++ quand un processus libère la ressource (V (x)). Verrous et exclusion mutuelle n = 1 : exclusion mutuelle : 1 seul proc. utilise la ressource à la fois. Mécanisme appelé verrou ou mutex (Mutual Exclusion) Cas particulier du sémaphore. L.Bobelin (MESCAL) 2012 5 / 27

Synchronisation entre processus Problèmes de synchronisation Problèmes de synchronisation Problèmes courants interblocage (deadlock) : plusieurs processus ont besoin de ressources simultanément, mais chacun n'en acquière qu'un sous-ensemble. Famine : 1 ou plusieurs processus n'ont pas accès à 1 ou n ressources car d'autre processus + prioritaires les vérouillent. Inversion de priorité : Un processus vérouille la ressource k, puis un processus + prioritaire l'interrompt et essaie de vérouiller k. Solutions possibles (algorithmiques) interblocage (deadlock) : Gérer intelligemment l'ordre d'acquisition Famine : compliqué à éviter, peut de temps à autre être résolu en utilisant l'attente active. Inversion de priorité : Eviter de partager des verrous entre processus de priorités diérentes L.Bobelin (MESCAL) 2012 6 / 27

Synchronisation entre processus Problèmes de synchronisation Interblocage Exemple Soit P1, P2 processus et R1, R2 ressources. P1 et P2 ont tous les 2 besoin de R1 et R2 P1 vérouille R1 P2 vérouille R2 Jamais P1 et P2 ne pourront nir leur exécution : interblocage N'intervient pas nécessairement sur des situations aussi simples Un processus qui attend une ressource est à l'état bloqué (cf cours précédent), d'où le terme d'interblocage. L.Bobelin (MESCAL) 2012 7 / 27

Synchronisation entre processus Famine Famine Exemple : lecteur et écrivains l lecteurs, potentiellement e écrivains Lecture interdit l'écriture. L'écriture interdit la lecture ET l'écriture. Le verrou est sur la donnée partagée. Famine Quand l est bcp plus grand que e : famine pour l'écrivain. Passer par des priorités : dangereux, potentiellement inversion de priorité L.Bobelin (MESCAL) 2012 8 / 27

Synchronisation entre processus Inversion de priorité Inversion de priorité Exemple P1 et P2 2 procesus avec Prio(P1) > Prio(P2) P2 commence à t 0 et prend un verrou sur la ressource R1 P1 est préemptif et tente de prendre le verrou sur R1 : P1 attend que P2 libère le verrou et est donc bloqué. Si un processus P3 de priorité p t.q. Prio(P1) > p > Prio(P2) existe, P3 va s'exécuter seul. Souvent dans des cas plus complexes. Dicile à détecter... L.Bobelin (MESCAL) 2012 9 / 27

Synchronisation entre processus Inversion de priorité Un exemple concret : NASA Mars PathFinder (1997) Le robot explorateur perd des données régulièrement (il est sur Mars). Le contexte Mémoire partagée protégée par un verrou Processus de gestion de bus sur la mémoire partagée priorité haute Ecriture en mémoire partagée (récupération de données), basse priorité Routine de communication, priorité moyenne (pas d'accès mémoire). Pas d'exécution de la gestion de bus pendant un certain temps : redémarrage système. Le problème Ecriture vérouille la mémoire partagé. La gestion du bus attend ce verrou. La routine de communication s'exécute alors, jusqu'au redémarrage. Problème (heureusement) corrigé à distance... L.Bobelin (MESCAL) 2012 10 / 27

Synchronisation entre processus Les philosophes Problème classique : les philosophes n 5 philosophes autour d'une table. Ils passent leur temps à manger ou penser. Devant eux : une assiette de spaghetti. A gauche de chaque assiette : une fourchette. Il leur faut 2 fourchettes pour manger : celles autour de leur assiette. 3 états possibles pour les philosophes : Manger : durée déterminée et nie. Penser : durée indéterminée. Avoir faim : ils veulent manger mais les fourchettes sont prises : durée déterminée et nie. Sinon : famine. Problème Les philosophes doivent manger chacun à leur tour, on veut éviter la famine : Complexe en distribué Local : peut être résolu grâce aux sémaphores L.Bobelin (MESCAL) 2012 11 / 27

Synchronisation entre processus Les philosophes Les philosophes : solution (trop) naïve Fourchettes = ressources partagées (un sémaphore par fourchette). Prendre une fourchette = P(id fork ), la libérer = V (id fork ). Philosophes (proc) et fourchettes (ress.) numérotées de 0 à n. int philosophe(int i,..) {... while (1) { penser(); P(semid[i]); // On attend la fourchette de gauche P(semid[(i + 1) % N]); // On attend la fourchette de droite manger(); V(semid[i]); // On libère la fourchette de gauche V(semid[(i + 1) % N]); // On libère la fourchette de droite } } L.Bobelin (MESCAL) 2012 12 / 27

Synchronisation entre processus Les philosophes Résoudre le problème des philosophes Solution naïve : problèmes Interblocages possibles : si tous les philosophes prennent la fourchette de gauche, tout le monde est bloqué. Famine... Solution quand n est pair Les philosophes d'id pair prennent d'abord la fourchette de gauche, et ensuite celle de droite. Ceux d'id impair font l'inverse (d'abord droite, ensuite gauche). Solution pour le cas général Se baser sur les états des philosophes voisins pour voir si l'on peut manger, et avoir un sémaphore par philosophe. Lorsqu'un philosophe a ni de manger, il réveille ses éventuels voisins qui attendent. Nécessite l'exclusion mutuelle quand on regarde les états de ses voisins! L.Bobelin (MESCAL) 2012 13 / 27

Synchronisation entre processus Les philosophes Solution pour le cas général PrendreFourchette : P(Mutex); si Etat[gauche[i]] Ð Mange et Etat[droite[i]] Ð Mange alors début Etat[i] := Mange; V(SemPriv[i]); fin sinon Etat[i] := Attend; V(Mutex); P(SemPriv[i]); RestitutionFourchette : P(Mutex); si Etat[gauche[i]] = Attend et Etat[gauche[gauche[i]]] Ð Mange alors début Etat[gauche[i]] := Mange; V(SemPriv[gauche[i]]); fin; Idem pour droite; Etat[i] := Pense; V(Mutex); Code philosophe : répéter Penser; DemanderFourchettes; Manger; RestituerFourchettes; jusqu'à plat = vide; Code initialisation : booléen Etat[0..4]; pour i := 0 à 4 faire Etat[i] := Pense; L.Bobelin (MESCAL) 2012 14 / 27

Synchronisation entre processus Section critique Exclusion mutuelle et section critique Exclusion mutuelle : un seul processus à la fois peut utiliser une ressource donnée : Une ressource physique (ex : imprimante) Une variable partagé en écriture en peut être lue Une portion de code ne peut être eectuée simultanément par plusieurs processus : section de code concernée : section critique Avant d'utiliser une ressource, ou d'entrer en section critique, un processus fait une demande explicite : Si la ressource est libre, il la prend et indique qu'elle est utilisée Si la ressource est déjà utilisée, il attend Un sémaphore peut être utilisé pour cela. C'est lui qui indique si la ressource est disponible ou non. Très souvent utile quand on partage des accès ou des variables. L.Bobelin (MESCAL) 2012 15 / 27

Implémentation en C sous Linux Implémentations disponibles 2 implémentations sont disponibles : Une version issue de System V, une version d'unix, qui est un rajout aux fonctionnalités d'origine du système. Une version POSIX, donc plus portable. Chacune a ses forces et ses faiblesses : La version System V est... complexe à utiliser, voire contre-intuitive. POSIX est intuitif. les sémaphores POSIX sont moins gourmands en mémoire, passe mieux à l'échelle et sont supposément plus rapides. System V permet plus de contrôles et d'opérations (permissions, valeurs d'incréments, mais elles ne sont pas souvent nécessaires) Les sémaphores POSIX ne sont pas forcéments persistants. L'avenir semble promis à POSIX, mais l'implémentation complète est moins répandue que celle pour l'interface System V. Puisque l'utilisation est simple et rapide en POSIX, on va s'attacher à la version System V... L.Bobelin (MESCAL) 2012 16 / 27

Implémentation en C sous Linux Implémentation System V Implémentation en C sous Linux Avec la version SystemV d'unix sont apparus 3 nouveaux mécanismes de communications (ou synchronisation) entre les processus locaux : les de messages, sémaphores, mémoire partagée. Ces 3 mécanismes sont extérieurs au système de chiers : Pas de descripteur (pas de référence à un chier) Mécanismes de communication (ou synchronisation) pour des processus sans lien de parenté mais s'exécutant sur la même machine Le système gère une table de les pour chacun de ces mécanismes : Le système assure la gestion de ces les/ipc La commande ipcs donne la liste des IPC courants La commande ipcrm permet de détruire les IPC qui vous appartiennent Chaque IPC dispose d'une identication interne (entier positif ou nul). Les processus qui veulent utiliser ces objets doivent connaître l'identicateur. Les objets sont identiés par un système de clé. L'attribution et la gestion des clés est un des points les plus délicats pour ces objets. L.Bobelin (MESCAL) 2012 17 / 27

Implémentation en C sous Linux Implémentation System V Opérations Soit S la valeur numérique (compteur) d'un sémaphore x : P(x, n) : Si (S n) 0, alors S = S n et le processus continue, sinon le processus est stoppé V (x, n) : S = S + n et tous les processus en attente du sémaphore sont débloqués (dans l'ordre des demandes...) Z(x) : le processus qui eectue cette opération est suspendu jusqu'à ce que S = 0 Quand on parle des opérations P et V sur un sémaphore, on considère que n = 1 Atomicité des opérations P et V (suite non interruptible) Existence d'un mécanisme mémorisant les processus faisant P L.Bobelin (MESCAL) 2012 18 / 27

Implémentation en C sous Linux Implémentation System V Opérations system V En Unix SystemV, l'implémentation des sémaphores est beaucoup plus riche qu'une simple implémentation de P et V : Famille de sémaphores (plusieurs sémaphores d'une même famille). Intérêts : Atomicité des opérations sur tous les membres de la famille Acquisition simultanée d'exemplaires multiples de ressources diérentes Dénition des opérations Pn() et Vn() Diminution ou augmentation de la valeur du sémaphore de n de façon atomique Fonction Z() Les constantes et les prototypes des fonctions sont dénies dans <sys/sem.h> et <ipc.h> L.Bobelin (MESCAL) 2012 19 / 27

Implémentation en C sous Linux Implémentation System V System V : création La fonction semget permet de créer une famille de sémaphores : int semget(key_t clef, int nb_sem, int option); clef : id système de l'ipc (type spécique) nb_sem : nombre de sémaphores dans la famille Les membres de la famille sont numérotés de 0 à nb_sem - 1 option : Ou logique entre plusieurs constantes IPC_CREAT : Crée l'objet (l'ipc) si il n'existe pas IPC_EXCL : avec IPC_CREAT, signale par une erreur que l'objet existe Droit en lecture-écriture Retourne un identicateur pour le sémaphore (ou la famille de sémaphore). Exemple : int semid; int nombre_de_sem = 4; semid = semget(cle, nombre_de_sem, IPC_CREAT IPC_EXCL 0666); if (semid < 0) { printf(erreur semget\n"); exit(0); } L.Bobelin (MESCAL) 2012 20 / 27

Implémentation en C sous Linux Implémentation System V Initialisation d'une famille de sémaphores La fonction semctl permet d'initialiser une famille de sémaphores : int semctl(int semid, int semnum, int option,... /* arg */); Initialisation (et consultation) des valeurs des sémaphores. La fonction semctl rend -1 en cas d'erreur. En fonction de option, semnum et arg ont les valeurs suivantes : SETALL, semnum est ignoré, arg reçoit un pointeur sur un tableau d'entiers courts pour initialiser les valeurs de toute la famille SETVAL, semnum indique le numéro du sémaphore dans la famille, arg reçoit l'entier correspondant à la valeur d'initialisation GETALL et GETVAL permettent de connaître la valeur des sémaphores... IPC_RMID pour supprimer la famille de sémaphore (semnum et arg sont ignorés) L.Bobelin (MESCAL) 2012 21 / 27

Implémentation en C sous Linux Implémentation System V Structure sembuf C'est la structure à remplir (une par sémaphore de la famille, donc un tableau de structures si plusieurs membres) pour demander l'opération à eectuer. Dénie dans <sys/sem.h>. Les ags : IPC_NOWAIT (non bloquant) et SEM_UNDO (terminaison). struct sembuf { unsigned short int sem_num; // numéro du sémaphore dans la short sem_op; //Définition de l'action short sem_flg; //option pour l'opération }; Si sem_op est : > 0 V(semid, n) = 0 Z < 0 V(semid, n) L.Bobelin (MESCAL) 2012 22 / 27

Implémentation en C sous Linux Implémentation System V Opération sur les sémaphores avec semop() La fonction semop permet de réaliser un ensemble d'opérations sur une famille de sémaphores : int semop(int semid, struct sembuf *tab_str, int nb_op); Semid est l'identicateur de la famille tab_str est un tableau de structures sembuf (nb_op structures) nb_op nombre d'opérations à eectuer Retourne 0 si OK, -1 en cas d'échec. Opérations réalisées de façon atomique : Toutes ou aucune : annule les i 1 ième si la nième opération ne peut être eectuée L'ordre des opérations n'est pas indiérent (sauf si toutes bloquantes ou toutes non bloquantes) L.Bobelin (MESCAL) 2012 23 / 27

Implémentation en C sous Linux Implémentation System V Exemple de P() et de V() typedef int SEMAPHORE; Exemple de P() : int P(SEMAPHORE sem) { struct sembuf sb; sb.sem_num = 0; sb.sem_op = -1; sb.sem_flg = SEM_UNDO; return semop(sem, &sb, 1); } Exemple de V() : int V(SEMAPHORE sem) { struct sembuf sb; sb.sem_num = 0; sb.sem_op = 1; sb.sem_flg = SEM_UNDO; return semop(sem, &sb, 1); } L.Bobelin (MESCAL) 2012 24 / 27

Implémentation en C sous Linux Implémentation System V Obtention de la clef Les IPC sont identiés par un mécanisme de clé. Ces clés jouent le rôles de références pour les chiers. Ces clés ont des valeurs numériques. Le type de ces variables est key_t déni dans <sys/types.h> Chaque type d'ipc possède son propre ensemble de clés : Important pour la portabilité des applications. Le problème de clé peut se résoudre avec la fonction ftok : key_t ftok(const char *, int num); Cette fonction rend une clé obtenue à partir du nom d'un chier existant et d'une valeur entière Les mêmes paramètres fourniront les mêmes clés (sauf déplacement de chiers, qui dans ce cas change de numéro d'index...) Avec IPC_PRIVATE (clé privée) quand tous les processus qui utiliseront l'objet IPC sont des descendants de celui qui le crée L.Bobelin (MESCAL) 2012 25 / 27

Implémentation en C sous Linux Implémentation System V Exemples d'obtention de clefs int main() { SEMAPHORE semid;... if ((semid = semget(ipc_private, nb_sem, IPC_CREAT IPC_EXCL 0666)) == -1) /* Erreur */... } Un autre exemple : int main() { SEMAPHORE semid; key_t cle;... if ((cle = ftok("exo2.c", 15)) == -1) /* Erreur */... if ((semid = semget(cle, nb_sem, IPC_CREAT IPC_EXCL 0666)) == -1) /* Erreur */... } L.Bobelin (MESCAL) 2012 26 / 27

Implémentation en C sous Linux Implémentation POSIX Norme POSIX Déclaré dans <semaphore.h>. 2 types de sémaphores : Anonymes : utilisable seulement dans le processus qui l'a créé Nommés : utilisable par des processus indépendants Création, Destruction, structure : sem_t mon_semaphore int sem_init(sem_t *semap, int partage, unsigned int valeur) ; int sem_destroy(sem_t *semap) ; Pour accéder à un sémaphore nommé : sem_t * sem_open(const char * nom, int options, /* mode_t mode, unsigned int valeur */) ; int sem_close(sem_t *semap) ; Opérations : int sem_wait(sem_t * semap) ; équivalent à P(semid) int sem_post(sem_t *semap) ; équivalent à V(semid)... (cf doc) L.Bobelin (MESCAL) 2012 27 / 27