QCM : Synchronisation et interblocages (23 questions)

Questions et réponses du QCM

1. Dans les primitives P/V ou les mutex étudiés, que signifie l’absence de réquisition ?

Une ressource acquise est libérée par le système dès qu’un autre processus la demande.
Une ressource devient disponible dès que son détenteur commence à attendre.
Un détenteur doit conserver sa ressource jusqu’à la fin de tous les processus en attente.
Une ressource acquise ne peut pas être retirée de force à son détenteur.

Une ressource acquise ne peut pas être retirée de force à son détenteur.

Explication

L’absence de réquisition signifie que le système ne peut pas retirer de force une ressource déjà acquise, dans le cadre des primitives considérées. Cela ne signifie pas que le détenteur ne peut jamais la libérer volontairement.

2. Dans un graphe d’allocation de ressources, que signifie un arc R → P ?

Le processus P attend un exemplaire de la ressource R.
Un exemplaire de la ressource R est alloué au processus P.
Le processus P libère un exemplaire de la ressource R.
La ressource R attend que le processus P la demande.

Un exemplaire de la ressource R est alloué au processus P.

Explication

Un arc orienté de R vers P indique qu’un exemplaire de R est alloué à P. La relation d’attente est représentée dans l’autre sens, par un arc P → R.

3. Quelle démarche convient pour résoudre un problème de synchronisation à l’aide de sémaphores ?

Ramener le problème à un cas connu, regrouper les attentes sous un seul sémaphore et laisser les variables annexes sans protection.
Ramener le problème à des cas connus, repérer les attentes, associer un sémaphore à chaque attente unique et protéger les variables critiques annexes.
Créer un sémaphore pour chaque variable, puis remplacer les attentes par des vérifications répétées de leur valeur.
Protéger les variables annexes, puis choisir les sémaphores sans repérer les endroits où les threads doivent attendre.

Ramener le problème à des cas connus, repérer les attentes, associer un sémaphore à chaque attente unique et protéger les variables critiques annexes.

Explication

La démarche consiste à reconnaître les cas typiques, localiser les attentes, associer un sémaphore à chaque attente unique et protéger les variables critiques annexes. Créer un sémaphore par variable ne découle pas de cette méthode et ne tient pas compte des attentes à traiter.

4. Quelle association entre type d’entité et mécanismes de synchronisation est correcte ?

Pour les threads, le sémaphore sert à l’exclusion mutuelle et le mutex à l’attente d’événement; pour les processus, une condition sert aux deux.
Pour les threads, le mutex sert à l’attente d’événement et la condition à l’exclusion mutuelle; pour les processus, un sémaphore sert aux deux.
Pour les threads, le mutex sert à l’exclusion mutuelle et la condition à l’attente d’événement; pour les processus, un sémaphore peut servir aux deux.
Pour les threads, le mutex et le sémaphore servent à l’exclusion mutuelle; pour les processus, une condition sert à l’attente d’événement.

Pour les threads, le mutex sert à l’exclusion mutuelle et la condition à l’attente d’événement; pour les processus, un sémaphore peut servir aux deux.

Explication

Le mutex est associé à l’exclusion mutuelle entre threads, tandis que la condition sert à attendre un événement; un sémaphore peut remplir ces deux rôles pour des processus. L’option qui inverse les rôles du mutex et de la condition attribue à chacun la fonction de l’autre.

5. Quelle relation existe entre un interblocage et un cycle dans un graphe d’allocation lorsque des ressources peuvent avoir plusieurs exemplaires ?

Un cycle implique un interblocage, mais un interblocage peut exister sans cycle.
Un interblocage et un cycle sont équivalents, quel que soit le nombre d’exemplaires.
Un cycle et un interblocage sont indépendants, quel que soit le nombre d’exemplaires.
Un interblocage implique un cycle, mais un cycle peut exister sans interblocage.

Un interblocage implique un cycle, mais un cycle peut exister sans interblocage.

Explication

Tout interblocage implique la présence d’un cycle dans le graphe, mais un cycle ne garantit pas l’interblocage si certaines ressources ont plusieurs exemplaires. Dans ce cas, un exemplaire peut être libéré et permettre de débloquer un processus malgré le cycle.

6. Que peut-il se produire si plusieurs lecteurs exécutent sans protection l’incrément de nbrl et le test vérifiant si nbrl vaut 1 ?

La variable nbrl se transforme automatiquement en compteur du nombre d’écrivains.
Le compte des lecteurs reste exact, mais un écrivain peut lire pendant une écriture.
Le dernier lecteur peut libérer le sémaphore avant que le premier lecteur le prenne.
Le compte des lecteurs peut devenir incorrect, car ces opérations ne sont pas atomiques.

Le compte des lecteurs peut devenir incorrect, car ces opérations ne sont pas atomiques.

Explication

Sans protection, plusieurs lecteurs peuvent interférer pendant la mise à jour et le test de nbrl, ce qui fausse le compte. Un accès simultané d’un écrivain n’est pas la conséquence précise de ces opérations non atomiques.

7. Avec une politique de priorité aux lecteurs, quand un écrivain peut-il accéder à la donnée ?

Lorsque le nombre de lecteurs en attente devient supérieur à celui des écrivains.
Dès qu’un écrivain a commencé à attendre la donnée.
Dès qu’un lecteur déjà présent a terminé sa lecture.
Lorsque plus aucun lecteur n’est en train de lire.

Lorsque plus aucun lecteur n’est en train de lire.

Explication

Avec la priorité aux lecteurs, l’écrivain attend que tous les lecteurs actifs aient quitté la donnée. La fin de lecture d’un seul lecteur ne suffit pas si d’autres lecteurs lisent encore.

8. Quels mécanismes sont indiqués pour synchroniser des signaux, respectivement pour l’exclusion mutuelle et l’attente d’événement ?

Le masquage pour l’exclusion mutuelle et sigsuspend pour l’attente d’événement.
Un mutex pour l’exclusion mutuelle et une condition pour l’attente d’événement.
sigsuspend pour l’exclusion mutuelle et le masquage pour l’attente d’événement.
Un sémaphore pour l’exclusion mutuelle et un mutex pour l’attente d’événement.

Le masquage pour l’exclusion mutuelle et sigsuspend pour l’attente d’événement.

Explication

Pour synchroniser des signaux, le masquage est indiqué pour l’exclusion mutuelle et sigsuspend pour attendre un événement. Un mutex et une condition sont les mécanismes associés à la synchronisation entre threads, pas ceux indiqués ici pour les signaux.

9. Quelle situation correspond à un interblocage ?

Une ou plusieurs entités d’exécution sont bloquées par leur propre situation et ne peuvent pas se débloquer elles-mêmes.
Un processus ralentit parce qu’il partage une ressource avec plusieurs entités d’exécution.
Une entité termine son travail après qu’un autre processus lui a libéré une ressource.
Une entité suspendue attend une ressource qu’un autre processus peut lui fournir immédiatement.

Une ou plusieurs entités d’exécution sont bloquées par leur propre situation et ne peuvent pas se débloquer elles-mêmes.

Explication

Un interblocage désigne une situation où une ou plusieurs entités sont bloquées de leur propre fait et ne peuvent pas sortir elles-mêmes de ce blocage. Une attente qui peut être résolue par la libération d’une ressource n’a pas nécessairement cette caractéristique.

10. Quelle distinction décrit correctement une condition POSIX et un sémaphore ?

Une condition compte les ressources disponibles, tandis qu’un sémaphore sert à attendre un événement sans autre usage.
Une condition sert à attendre un événement, tandis qu’un sémaphore peut aussi assurer l’exclusion mutuelle ou compter des ressources.
Une condition et un sémaphore servent tous deux à l’attente d’événement, mais seul le sémaphore protège une variable.
Une condition assure l’exclusion mutuelle, tandis qu’un sémaphore sert à réveiller tous les threads en attente.

Une condition sert à attendre un événement, tandis qu’un sémaphore peut aussi assurer l’exclusion mutuelle ou compter des ressources.

Explication

La condition POSIX est spécialisée dans l’attente d’un événement, alors qu’un sémaphore peut aussi servir à l’exclusion mutuelle ou au comptage de ressources. Compter les ressources est donc un usage possible du sémaphore, et non le rôle caractéristique de la condition.

11. Dans le mécanisme lecteurs-écrivains, que fait le dernier lecteur lorsqu’il termine sa lecture ?

Il libère Se après chaque lecture, même si d’autres lecteurs sont actifs.
Il prend Se pour empêcher les lecteurs suivants d’entrer.
Il libère Smut lorsque nbrl revient à 0.
Il libère Se lorsque nbrl revient à 0.

Il libère Se lorsque nbrl revient à 0.

Explication

Le premier lecteur prend Se pour protéger l’accès du groupe, puis le dernier le libère lorsque le nombre de lecteurs retombe à zéro. Smut protège la variable nbrl et ne remplace pas Se pour cette libération.

12. Quel est l’effet de pthread_cond_broadcast lorsqu’il est appelé sur une condition POSIX ?

Il met en attente tous les threads qui exécutent cette condition.
Il mémorise un signal afin de réveiller le prochain thread qui attendra.
Il réveille tous les threads qui attendent sur cette condition.
Il réveille un thread qui attend sur cette condition.

Il réveille tous les threads qui attendent sur cette condition.

Explication

pthread_cond_broadcast réveille tous les threads en attente sur la condition. Le réveil d’un seul thread correspond à pthread_cond_signal, et non à broadcast.

13. Dans quelle situation l’attente active peut-elle être légitime malgré son usage généralement déconseillé ?

Lorsqu’il n’existe pas de support d’attente passive, que de nombreux processeurs sont disponibles ou que les sections critiques sont très courtes et fréquentes.
Lorsqu’un thread attend un événement durant une longue période et que les processeurs sont fortement sollicités.
Lorsqu’une attente passive est disponible et que la condition change rarement au cours de l’exécution.
Lorsqu’une section critique est longue et que le système doit réduire l’activité du processeur.

Lorsqu’il n’existe pas de support d’attente passive, que de nombreux processeurs sont disponibles ou que les sections critiques sont très courtes et fréquentes.

Explication

L’attente active peut se justifier en l’absence d’attente passive, avec de nombreux processeurs disponibles, ou pour des sections critiques très courtes et très fréquentes. Une longue attente sur des processeurs fortement sollicités ne constitue pas une situation favorable à cette technique.

14. Quelle démarche permet d’attendre correctement qu’un événement se produise avec une condition ?

Exprimer l’événement par une assertion, la tester hors section critique dans un if, attendre si elle est fausse et la vérifier au réveil.
Attendre d’abord en section critique, tester l’assertion après le réveil et quitter sans vérifier si elle reste satisfaite.
Tester le signal associé dans une boucle, attendre même si l’assertion est satisfaite et sortir dès qu’un thread est réveillé.
Exprimer l’événement par une assertion, la tester en section critique dans une boucle, attendre si elle est fausse et la vérifier à la sortie.

Exprimer l’événement par une assertion, la tester en section critique dans une boucle, attendre si elle est fausse et la vérifier à la sortie.

Explication

L’événement est décrit par une assertion, qui est testée en section critique dans une boucle; le thread attend si elle n’est pas satisfaite et la vérifie en sortant de la boucle. Un test hors section critique ne respecte pas la démarche indiquée pour protéger ce contrôle.

15. Dans le problème lecteurs-écrivains, quelle règle distingue l’accès des lecteurs de celui des écrivains ?

Un lecteur et un écrivain peuvent accéder ensemble, mais deux écrivains doivent attendre.
Chaque lecteur doit accéder seul, tandis que plusieurs écrivains peuvent écrire ensemble.
Plusieurs lecteurs peuvent lire ensemble, mais un écrivain doit accéder seul à la donnée.
Les écrivains peuvent accéder ensemble, mais les lecteurs doivent lire seuls.

Plusieurs lecteurs peuvent lire ensemble, mais un écrivain doit accéder seul à la donnée.

Explication

Les lectures simultanées sont permises, alors qu’un écrivain doit être seul, sans lecteur ni autre écrivain. La possibilité pour un lecteur et un écrivain de coexister contredit cette exclusion de l’écrivain.

16. Que fait pthread_cond_wait au mutex associé lorsqu’un thread attend puis est réveillé ?

Il le détruit pendant l’attente, puis en crée un nouveau avant le réveil du thread.
Il le conserve pendant l’attente, puis le libère lorsque le thread reprend son exécution.
Il le libère pendant l’attente, puis le reverrouille avant de rendre la main au thread.
Il le libère au réveil, puis le reverrouille après que le thread a repris son exécution.

Il le libère pendant l’attente, puis le reverrouille avant de rendre la main au thread.

Explication

La fonction libère atomiquement le mutex en mettant le thread en attente et le reverrouille avant de rendre la main au thread réveillé. Le conserver pendant l’attente empêcherait notamment un autre thread d’accéder à la section critique protégée par ce mutex.

17. Pourquoi faut-il placer pthread_cond_wait dans une boucle while plutôt que dans un simple if ?

Pour retester la condition après le réveil avant de poursuivre l’exécution.
Pour libérer le mutex avant le premier test de la condition d’attente.
Pour éviter que le thread réveillé reverrouille le mutex associé.
Pour permettre à plusieurs threads de signaler la condition simultanément.

Pour retester la condition après le réveil avant de poursuivre l’exécution.

Explication

La boucle permet de vérifier à nouveau que la condition est satisfaite après le réveil, avant de poursuivre. Un simple if ne garantit pas ce nouveau contrôle et peut laisser le thread avancer alors que la condition attendue ne l’est pas.

18. Quelle distinction décrit correctement l’attente passive et l’attente active ?

L’attente passive bloque le processeur jusqu’à un signal, tandis que l’attente active vérifie la condition une seule fois au réveil.
L’attente passive demande au système de mettre l’activité en pause, tandis que l’attente active vérifie une condition en boucle sur le processeur.
L’attente passive vérifie une condition en boucle sur le processeur, tandis que l’attente active demande au système de mettre l’activité en pause.
L’attente passive relance périodiquement la vérification de la condition, tandis que l’attente active cède le processeur au système.

L’attente passive demande au système de mettre l’activité en pause, tandis que l’attente active vérifie une condition en boucle sur le processeur.

Explication

En attente passive, le système met l’activité en pause; en attente active, le processeur vérifie la condition de façon répétée. L’option qui attribue la vérification en boucle à l’attente passive inverse précisément cette distinction.

19. Que représente un graphe d’allocation de ressources ?

Un graphe non orienté dont les sommets représentent les ressources et les arcs leur ordre d’acquisition.
Un graphe orienté dont les sommets représentent les processus et les arcs leurs communications.
Un graphe non orienté dont les sommets représentent les processus et les ressources, et les arcs leurs priorités.
Un graphe orienté dont les sommets représentent des processus et des ressources, et les arcs leurs allocations ou leurs attentes.

Un graphe orienté dont les sommets représentent des processus et des ressources, et les arcs leurs allocations ou leurs attentes.

Explication

Le graphe d’allocation est orienté : ses sommets représentent des processus et des ressources, et ses arcs indiquent des allocations ou des attentes. Un graphe décrivant les communications entre processus ne rend pas compte de ces relations d’allocation.

20. Dans un graphe d’allocation, que permet de conclure un cycle si chaque ressource concernée ne possède qu’un exemplaire ?

Le cycle implique un interblocage entre les processus concernés.
Le cycle indique une allocation circulaire, mais pas une attente entre processus.
Le cycle indique une attente qui sera résolue dès qu’une ressource sera réquisitionnée.
Le cycle peut être ignoré, car un seul exemplaire exclut l’interblocage.

Le cycle implique un interblocage entre les processus concernés.

Explication

Lorsque chaque ressource concernée par le cycle n’a qu’un exemplaire, le cycle implique un interblocage. La possibilité qu’un autre exemplaire soit libéré pour débloquer un processus concerne les ressources à plusieurs exemplaires.

21. Un thread reprend après un signal, mais la condition qui justifiait son réveil n’est plus vraie : de quel phénomène s’agit-il ?

D’un réveil trompeur, car la condition a cessé d’être vraie avant la reprise du thread.
D’un réveil perdu, car aucun thread n’attendait lorsque le signal a été émis.
D’un réveil trompeur, car le signal n’a pas été mémorisé en l’absence de thread en attente.
D’un réveil perdu, car le thread réveillé a repris après une modification de la condition.

D’un réveil trompeur, car la condition a cessé d’être vraie avant la reprise du thread.

Explication

Un réveil trompeur désigne la reprise d’un thread alors que la condition qui motivait son réveil n’est plus vraie. Un réveil perdu se produit plutôt lorsqu’un signal est émis sans thread en attente et n’est pas mémorisé.

22. Un processus exécute deux fois P(r1) sur le même sémaphore binaire sans appeler V(r1) entre les deux. Que peut-il se produire ?

Le sémaphore crée un cycle entre deux processus distincts.
Le processus libère r1 au second appel et reprend son exécution.
Le processus est débloqué lorsque le sémaphore est acquis une seconde fois.
Le processus peut se bloquer lui-même lors du second appel à P(r1).

Le processus peut se bloquer lui-même lors du second appel à P(r1).

Explication

Le premier appel acquiert le sémaphore binaire, et le second peut alors bloquer le même processus puisqu’aucun V(r1) n’a libéré la ressource entre les appels. Un interblocage peut donc impliquer un seul processus, et pas nécessairement deux processus en attente l’un de l’autre.

23. Selon les conditions de Coffman, quand un interblocage se produit-il ?

Lorsque l’exclusion mutuelle, la conservation et attente, l’absence de réquisition ou l’attente circulaire est présente.
Lorsque la conservation et attente et l’absence de réquisition sont présentes, sans attente circulaire.
Lorsque l’exclusion mutuelle et l’attente circulaire sont présentes, même si les deux autres conditions manquent.
Lorsque l’exclusion mutuelle, la conservation et attente, l’absence de réquisition et l’attente circulaire sont réunies simultanément.

Lorsque l’exclusion mutuelle, la conservation et attente, l’absence de réquisition et l’attente circulaire sont réunies simultanément.

Explication

Les conditions de Coffman établissent que les quatre conditions doivent être réunies simultanément pour qu’un interblocage se produise. La présence de quelques conditions seulement, par exemple l’exclusion mutuelle et l’attente circulaire, ne suffit pas selon cette règle.

Révisez avec les flashcards

Mémorisez les réponses avec 55 flashcards sur Synchronisation et interblocages.

Dans le problème lecteurs-écrivains, combien de lecteurs peuvent accéder simultanément à la donnée ?

Plusieurs lecteurs.

Dans le problème lecteurs-écrivains, quand un écrivain peut-il accéder à la donnée ?

Seul, sans lecteur ni autre écrivain.

Avec la priorité aux lecteurs, à quelle condition un écrivain accède-t-il à la donnée ?

Lorsqu’aucun lecteur n’est en train de lire.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Synchronisation et interblocages.

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