Fiche de révision : API POSIX et systèmes concurrents

Plan du Cours

  1. Fondements et entités POSIX
  2. Création et gestion des threads
  3. Mutex et exclusion mutuelle
  4. Sémaphores et synchronisation
  5. Variables conditionnelles
  6. Temps et périodicité temps réel
  7. Ordonnancement POSIX
  8. Verrous et systèmes multicœurs

1. Fondements et entités POSIX

Notions clés & Définitions

  • POSIX : ou « Portable Operating System Interface », définit en C99 un ensemble d’API standard pour interfacer les services des systèmes d’exploitation, notamment les entrées-sorties et la concurrence.
  • Processus : un espace mémoire qui contient au moins un thread.
  • Thread : un flux d’exécution concurrent et la plus petite unité de traitement ordonnançable par le système d’exploitation.

Points essentiels

  • La famille POSIX comprend:
    • POSIX.1 pour les services centraux
    • POSIX.1b pour les extensions temps réel
    • POSIX.1c pour les threads

Astuce mémo

Executive → processus → thread

2. Création et gestion des threads

★ À maîtriser

  • La bibliothèque pthread fournit les constructions concurrentes POSIX en C, car le langage C ne possédait pas de support natif des threads avant C11.

  • La création d’un thread avec pthread_create reçoit un identifiant de thread, des attributs, une fonction de démarrage prenant un void* et un argument transmis à cette fonction.

📌 pthread_join bloque le thread appelant jusqu’à la terminaison du thread ciblé.

Compléments

📌 Les déclarations pthread sont définies dans pthread.h et une compilation avec GCC doit notamment utiliser l’option -lpthread, par exemple gcc -o app app.c -lpthread.

Astuce mémo

Un processus comme une maison contenant plusieurs fils d’exécution partageant la mémoire

3. Mutex et exclusion mutuelle

Notions clés & Définitions

  • Mutex : un mécanisme de verrouillage qui n’autorise qu’un thread à la fois dans une section contrôlée et oblige les autres threads à attendre.

Points essentiels

  • 🔄 L’utilisation courante d’un mutex consiste à:
    1. l’initialiser
    2. le verrouiller avant la section critique
    3. le déverrouiller après cette section
    4. le détruire

Astuce mémo

Mutex = un seul entrant ; sémaphore = plusieurs accès possibles

4. Sémaphores et synchronisation

Notions clés & Définitions

  • Sémaphore : limite le nombre d’utilisateurs simultanés d’une ressource à une valeur maximale et sert aussi de mécanisme de signalisation entre threads ou processus.

★ À maîtriser

  • sem_wait décrémente le compteur d’un sémaphore et bloque le thread si le compteur devient négatif, tandis que sem_post incrémente le compteur et peut réveiller un thread en attente.

📌 Un mutex doit généralement être libéré par le thread qui l’a saisi, tandis qu’un sémaphore peut permettre à un thread différent de contrôler la libération.

Compléments

📌 Dans sem_init, une valeur de partage égale à 1 indique que le sémaphore peut être partagé entre processus.

Astuce mémo

Compteur épuisé → thread bloqué ; post → thread réveillé

5. Variables conditionnelles

Notions clés & Définitions

  • Variable conditionnelle : associée à un mutex, permet à un thread de se suspendre jusqu’à ce qu’un autre thread lui envoie un signal.

★ À maîtriser

📌 pthread_cond_wait bloque le thread courant, libère le mutex pendant l’attente, puis reprend le mutex lorsque le thread est réveillé.

Compléments

  • pthread_cond_signal peut libérer un thread bloqué, pthread_cond_broadcast peut libérer tous les threads bloqués, et pthread_cond_timedwait ajoute un délai maximal d’attente.

Astuce mémo

Verrouiller → attendre → être réveillé → reprendre le mutex

6. Temps et périodicité temps réel

Notions clés & Définitions

  • timespec : représente un temps absolu ou relatif avec tv_sec pour les secondes et tv_nsec pour les nanosecondes.

★ À maîtriser

  • Les horloges POSIX principales sont:

    • CLOCK_REALTIME, horloge réelle du système
    • CLOCK_MONOTONIC, temps écoulé depuis le démarrage non modifiable par l’utilisateur
    • CLOCK_THREAD_CPUTIME_ID, temps d’exécution du thread appelant
  • Pour une tâche périodique, il faut calculer les échéances absolues successives et utiliser clock_nanosleep afin d’éviter la dérive d’horloge due aux retards de calcul et de préemption.

Compléments

  • Une valeur de 500 × 10^6 nanosecondes correspond à 500 millisecondes.

Astuce mémo

Sommeil relatif dérive ; échéance absolue reste calée

7. Ordonnancement POSIX

★ À maîtriser

  • POSIX propose notamment les politiques SCHED_FIFO, FIFO par niveaux de priorité, SCHED_RR, ordonnancement circulaire par quantum, et « others », dont le comportement dépend de l’implémentation.

📌 Avec SCHED_FIFO, un thread de priorité supérieure préempte un thread de priorité inférieure et les threads de même priorité sont exécutés dans l’ordre FIFO.

📌 Avec SCHED_RR, un thread cesse d’être exécuté lorsqu’il est bloqué, terminé ou qu’il dépasse son quantum de temps.

Compléments

  • POSIX impose au moins 32 niveaux de priorité distincts, accessibles notamment avec sched_get_priority_max.

Astuce mémo

FIFO privilégie la priorité ; Round-robin partage le quantum

8. Verrous et systèmes multicœurs

Notions clés & Définitions

  • Inversion de priorité : un problème que les politiques de verrouillage POSIX cherchent à résoudre en contrôlant la modification locale de la priorité d’un thread.

★ À maîtriser

  • Les politiques de verrouillage POSIX sont:

    • PTHREAD_PRIO_NONE, sans action
    • PTHREAD_PRIO_PROTECT, protocole de plafond immédiat
    • PTHREAD_PRIO_INHERIT, héritage de priorité
  • Sur un système multicœur, l’exécutif peut mapper et migrer les threads entre cœurs, ce qui affecte les caches, la MMU et les changements de contexte.

Compléments

📌 pthread_setaffinity_np lie un thread à un ou plusieurs cœurs au moyen d’un champ de bits indiquant les processeurs utilisables.

Astuce mémo

Inversion de priorité → héritage ou plafond ; migration → effets sur caches et analyse

Tableaux de synthèse

Mécanismes de synchronisation

MécanismeFonction principaleAccès ou réveil
MutexExclusion mutuelle d’une section critiqueUn seul thread à la fois
SémaphoreComptage de ressources et signalisationNombre maximal fixé par le compteur
Variable conditionnelleSuspension sur une conditionRéveil par signal ou broadcast avec reprise du mutex

Teste tes connaissances

Teste tes connaissances sur API POSIX et systèmes concurrents avec 11 questions à choix multiples et corrections détaillées.

1. Que définit principalement POSIX dans le contexte des systèmes d’exploitation ?

2. Quelle association entre les normes POSIX et leurs domaines est correcte ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de API POSIX et systèmes concurrents avec 10 flashcards interactives.

Qu'est-ce que POSIX définit en C99 ?

Un ensemble d’API standard pour interfacer les services des systèmes d’exploitation.

Quelles normes comprend la famille POSIX ?

POSIX.1, POSIX.1b et POSIX.1c.

Quelle bibliothèque fournit les constructions POSIX en C pour les threads ?

La bibliothèque pthread.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches