QCM : API POSIX et systèmes concurrents — 11 questions

Questions et réponses du QCM

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

Un langage de programmation complet consacré à la concurrence
Un modèle matériel commun pour les entrées-sorties et le parallélisme
Une implémentation unique imposée à tous les systèmes compatibles
Un ensemble d’API standardisées en C99 pour accéder aux services du système

Un ensemble d’API standardisées en C99 pour accéder aux services du système

Explication

POSIX définit en C99 des API standard permettant d’interfacer notamment les entrées-sorties et la concurrence avec les services des systèmes d’exploitation. La conformité POSIX n’impose toutefois pas nécessairement des comportements internes identiques entre implémentations.

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

POSIX.1 concerne les threads, POSIX.1b les services centraux et POSIX.1c le temps réel
POSIX.1 concerne les entrées-sorties, POSIX.1b la mémoire et POSIX.1c les processus
POSIX.1 concerne le temps réel, POSIX.1b les threads et POSIX.1c les services centraux
POSIX.1 concerne les services centraux, POSIX.1b le temps réel et POSIX.1c les threads

POSIX.1 concerne les services centraux, POSIX.1b le temps réel et POSIX.1c les threads

Explication

La famille POSIX distingue POSIX.1 pour les services centraux, POSIX.1b pour les extensions temps réel et POSIX.1c pour les threads. Confondre POSIX.1 et POSIX.1b revient donc à inverser les services centraux et les extensions temps réel.

3. Quels éléments sont fournis à pthread_create lors de la création d’un thread ?

Un processus parent, une priorité fixe, une pile partagée et un descripteur de fichier
Un fichier d’en-tête, une adresse mémoire, un signal d’arrêt et une valeur de retour
Un identifiant, des attributs, une fonction de démarrage et un argument pour cette fonction
Un verrou global, une fonction de terminaison, un résultat calculé et une horloge système

Un identifiant, des attributs, une fonction de démarrage et un argument pour cette fonction

Explication

pthread_create reçoit notamment un identifiant de thread, des attributs, une fonction de démarrage prenant un void* et l’argument transmis à cette fonction. Les autres ensembles mélangent des éléments de gestion qui ne constituent pas les paramètres décrits pour cette création.

4. Quel est l’effet de pthread_join sur le thread qui l’appelle ?

Il interrompt immédiatement le thread ciblé et libère ses ressources
Il transforme le thread ciblé en processus indépendant du programme
Il le bloque jusqu’à la terminaison du thread ciblé
Il lance le thread ciblé après avoir suspendu le thread appelant

Il le bloque jusqu’à la terminaison du thread ciblé

Explication

pthread_join suspend l’exécution du thread appelant jusqu’à ce que le thread ciblé se termine. Cette fonction n’interrompt pas le thread ciblé et ne le convertit pas en processus distinct.

5. Qu'est-ce qu'un mutex dans la programmation concurrente ?

Un mécanisme permettant de partager des ressources entre plusieurs processus.
Un type de variable conditionnelle utilisée pour suspendre un thread.
Un mécanisme de verrouillage permettant à un seul thread d'accéder à une section critique à la fois.
Un compteur qui limite le nombre d'utilisateurs simultanés d'une ressource.

Un mécanisme de verrouillage permettant à un seul thread d'accéder à une section critique à la fois.

Explication

Un mutex est un mécanisme de verrouillage qui garantit qu'un seul thread peut accéder à une section critique à la fois, évitant ainsi les conflits. Contrairement à un sémaphore, il n'autorise qu'un seul accès, ce qui en fait un outil d'exclusion mutuelle.

6. Quelle politique d’ordonnancement POSIX privilégie la priorité en permettant à un thread de préempter un autre de priorité inférieure ?

SCHED_RR
PTHREAD_PRIO_NONE
SCHED_FIFO
others

SCHED_FIFO

Explication

SCHED_FIFO est la politique qui privilégie la priorité en permettant à un thread de priorité supérieure de préempter un thread de priorité inférieure. La politique SCHED_RR partage le temps entre threads de même priorité selon un quantum, sans privilégier la priorité.

7. Quel est le rôle principal d'une variable conditionnelle dans la programmation concurrente ?

Limiter le nombre d'utilisateurs simultanés d'une ressource.
Gérer l'accès exclusif à une ressource partagée.
Synchroniser l'exécution de plusieurs threads en leur imposant un ordre précis.
Permettre à un thread de se suspendre jusqu'à réception d'un signal d'un autre thread.

Permettre à un thread de se suspendre jusqu'à réception d'un signal d'un autre thread.

Explication

Une variable conditionnelle permet à un thread de se suspendre jusqu'à ce qu'un autre thread lui envoie un signal, facilitant la synchronisation. Contrairement à un mutex ou un sémaphore, elle ne limite pas directement l'accès ou le nombre d'utilisateurs, mais contrôle la suspension et la reprise des threads.

8. En quoi la gestion du temps en temps réel diffère-t-elle de la gestion du temps classique dans les systèmes d'exploitation ?

Le temps réel ne permet pas de gérer des tâches périodiques, contrairement au temps classique qui est adapté à cette gestion.
Le temps réel ne nécessite pas de synchronisation précise, contrairement au temps classique qui doit respecter des horloges exactes.
Le temps réel utilise des échéances absolues pour garantir la périodicité des tâches, tandis que le temps classique ne garantit pas cette périodicité.
Le temps réel se base uniquement sur l'horloge CLOCK_REALTIME, alors que le temps classique utilise uniquement CLOCK_MONOTONIC.

Le temps réel utilise des échéances absolues pour garantir la périodicité des tâches, tandis que le temps classique ne garantit pas cette périodicité.

Explication

Le temps réel utilise des échéances absolues pour assurer la périodicité, ce qui est essentiel pour les applications critiques. La gestion du temps classique, en revanche, ne garantit pas cette périodicité et peut dériver en raison des retards.

9. Quelle est la conséquence principale de l'utilisation de la politique d'ordonnancement SCHED_FIFO dans un système POSIX ?

L’ordonnancement devient aléatoire, dépendant uniquement de l’implémentation spécifique du système.
Les threads de même priorité sont exécutés dans l’ordre FIFO, ce qui peut entraîner une famine pour certains threads.
Un thread de priorité supérieure préempte systématiquement tous les autres threads.
Les threads de priorité inférieure ne peuvent jamais s’exécuter si un thread de priorité supérieure est actif.

Les threads de même priorité sont exécutés dans l’ordre FIFO, ce qui peut entraîner une famine pour certains threads.

Explication

La politique SCHED_FIFO exécute les threads selon leur ordre d’arrivée pour une même priorité, ce qui peut entraîner une famine si un thread de haute priorité monopolise le CPU. La préemption par priorité supérieure est une caractéristique de SCHED_FIFO, mais ne concerne pas tous les threads en général.

10. Comment un verrou de type mutex peut-il être utilisé pour assurer l'exclusion mutuelle dans une section critique d'un programme multithread ?

En initialisant le mutex, en le verrouillant avant la section critique, puis en le déverrouillant après, et enfin en le détruisant.
En créant un mutex, en le partageant entre tous les threads, et en le laissant verrouillé en permanence.
En utilisant un mutex sans le verrouiller, car sa seule déclaration suffit à garantir l'exclusion.
En verrouillant le mutex après la section critique pour empêcher d'autres threads d'entrer.

En initialisant le mutex, en le verrouillant avant la section critique, puis en le déverrouillant après, et enfin en le détruisant.

Explication

Le mutex doit être initialisé, verrouillé avant la section critique, puis déverrouillé après pour assurer une exclusion mutuelle. La destruction intervient en fin d'utilisation. La deuxième option est incorrecte car le mutex ne doit pas rester verrouillé indéfiniment, et la troisième ne garantit pas l'exclusion. La quatrième option inverse l'ordre correct.

11. Quelle caractéristique principale définit un processus dans le contexte de POSIX ?

Une unité d'exécution unique sans partage de mémoire
Un flux d'exécution concurrente partageant la mémoire
Une entité sans espace mémoire propre
Un espace mémoire contenant au moins un thread

Un espace mémoire contenant au moins un thread

Explication

Un processus dans POSIX est un espace mémoire qui contient au moins un thread, permettant l'exécution de plusieurs flux dans un même espace. Contrairement à un thread, il possède une mémoire propre et isolée.

Révisez avec les flashcards

Mémorisez les réponses avec 10 flashcards sur API POSIX et systèmes concurrents.

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 →

Approfondir avec la fiche

Consultez la fiche de révision complète sur API POSIX et systèmes concurrents.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM