Temps Réel : Sémaphore

publicité
Temps Réel :
Sémaphore
Promotion Social – E. Benitez
Sommaire



Définition
Nommé et Non-nommé : Différence
Sémaphore Nommé : Fonction
Définition


Résolve les problèmes de coopération et de
compétition
Synchronisation :


Attente d’un processus
Exclusion mutuelle :

Gestion de ressource
Définition



Un sémaphore est un entier non négatif qui
peut uniquement être modifier par les
opérateur signal et wait.
Signal : incrémente de 1 le sémaphore
Wait : décrémente de 1 le sémaphore


Lorsque le sémaphore est nulle. Le demandeur
doit attendre que le sémaphore soit incrémenté
Blocage du processus
Nommé et Non-nommé : Différence

Nommé :



Porte un nom
Connu dans tous l’OS
Persiste à la fin du
programme

Non-nommé :



Possède un identificateur
Hérité par fork
Détruit à la fin du
programme
Sémaphore Nommé : Fonction

1. Création

sem_t * sem_open(const char *name, int oflag, mode_t mode,
unsigned int value);


name : Nom du sémaphore
oflag : mode accès du sémaphore




Pour la création : O_CREAT | O_RDWR
Pour l’ouverture : O_RDWR
mode : droite d’accés du sémaphore=> 0744
Valeur de retour :


-1 : Erreur (utilisation de errno)
Autre : identifiant du sémaphore
Sémaphore Nommé : Fonction

2. Incrémentation

int sem_post(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :


-1 : Erreur (utilisation de errno)
3. Décrémentation

int sem_wait(sem_t *sem); ou int sem_trywait(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :

-1 : Erreur (utilisation de errno)
Sémaphore Nommé : Fonction

5. Fermeture

int sem_close(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :


-1 : Erreur (utilisation de errno)
6. Destruction

int sem_unlink(const char *name);


nom : Nom du sémaphore
Valeur de retour :

-1 : Erreur (utilisation de errno)
Sémaphore Non-Nommé : Fonction

1. Création

sem_t * sem_init(sem_t *sem, int pshared, unsigned int value);


sem : Identifiant du sémaphore à initialisé
pshared : partage avec d’autre processus



Valeur : 1
value : Valeur initiale du sémpahore (>=0)
Valeur de retour :

-1 : Erreur (utilisation de errno)
Sémaphore Non-Nommé : Fonction

2. Incrémentation

int sem_post(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :


-1 : Erreur (utilisation de errno)
3. Décrémentation

int sem_wait(sem_t *sem); ou int sem_trywait(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :

-1 : Erreur (utilisation de errno)
Sémaphore Non-Nommé : Fonction

5. Fermeture

int sem_destroy(sem_t *sem);


sem : identifiant du sémaphore
Valeur de retour :

-1 : Erreur (utilisation de errno)
Téléchargement