7. Distinctions à préserver dans les raisonnements
| Confusion | Ce qu’il faut expliquer |
|---|---|
| Réveillé = immédiatement exécuté | Le réveil rend prêt; l’ordonnanceur choisit ensuite |
| CPU attribué = accès autorisé | Un thread exécuté doit encore respecter mutex, sémaphore ou prédicat |
| Mutex = préemption interdite | Le propriétaire peut être préempté; les autres ne peuvent pas franchir le verrou détenu |
| Sémaphore = toujours section critique | Un compteur limite des ressources; un sémaphore 0 permet aussi une notification croisée mémorisée |
| Condition = booléen ou jeton | Les données portent le prédicat durable; un signal sans attenteur n’est pas stocké |
| Signal = mutex transmis | L’attenteur doit être ordonnancé, reprendre le mutex et retester |
| Barrière = mutex | La barrière impose une fin collective de phase, sans rendre tous les accès exclusifs |
| Join ou sleep protège glob | Join attend une fin; sleep la retarde. Aucun ne rend une mise à jour partagée atomique |
| Yield garantit un ordre | Il cède selon un modèle; il ne remplace pas une synchronisation pour une permutation |
| Fork partage les globales ordinaires | Les processus ont leurs copies; les threads partagent les données du processus |
| Temps de fin = durée CPU | T=F−A, W=T−B dans les exemples; réponse initiale et attente cumulée diffèrent |
| SJF interrompt à une arrivée courte | La version étudiée est non préemptive; SRT compare le reste et peut interrompre |
| FIFO interdit toute préemption | FCFS du premier modèle est non préemptif; FIFO temps réel est préemptable par une priorité supérieure |
| CFS égalise tous les utilisateurs | L’équité par tâche et celle par groupes configurés sont distinctes |
La qualité d’un raisonnement vient des invariants : autorisations de place/donnée, propriété du mutex, état partagé testé sous le même verrou, nombre d’arrivées à la barrière, quantité CPU reçue et dépendances entre effets. Une sortie observée ne démontre pas que tous les entrelacements respecteront ces invariants.
Les sources sont parfois du code pédagogique ancien : en-têtes manquants pour fork/wait, identifiants th1/th2 non déclarés, nom question6.c différent de l’énoncé, pthread_yield, exit(NULL) et coquilles des slides. Conserver l’original pour sa provenance, adapter une copie si une compilation est demandée et distinguer une propriété du modèle d’une garantie du langage. Le maître explique ces divergences sans déclarer avoir réalisé une compilation ni une validation sur la VM.