Les Systèmes d'exploitation, Ed. Dunod, 2003
Erratum
- Dans le chapitre 8, p460, le commentaire relatif à
NbEntrant
signifie
// Nombre de voitures présentes sur la passerelle dans le sens entrant
et non pas
//Nombre de voitures voulant emprunter la passerelle
- Dans le chapitre 1, p36, 2ème paragraphe : remplacer dans le texte la variable
etat
parmode
.
- Dans le chapitre 8, les exercices de la section 8.10 (Programmation avec les Threads Java) proposent
des classes qui modélisent un moniteur et qui possèdent un nom qui se termine par
Monitor
. Exemple : le nom de la classeParking Monitor
estParkingMonitor
sans l'espace.
- Chapitre 9, p258, exercice 9.8 contient un erreur.
- Suggestion pour l'exercice 7.3, pp. 324-325
Le risque de débordement risque de ne plus faire respecter la règle 1 de l'exclusion mutuelle. Ce risque est d'autant plus grand que le nombre de processus qui demandent à accéder en S.C est grand. De plus la règle 3 (règle de l'équité) n'est pas toujours garantie : rien n'assure qu'un processus arrivera à un certain moment de son exécution à trouver AX=0. On peut écrire tout de même, à l'aide de la même instruction, une solution où le débordement n'altère pas la règle 1 ; et où ,de plus, la règle 3 est garantie : en assurant que les processus accèdent à la S.C suivant l'ordre de demande/arrivée : Chaque processus qui demande la S.C obtient un numéro (jeton numéroté) ( différent de tous les numéros des processus qui attendent à accéder en S.C : il suffit de prendre max (numéros de processus attendants) +1 ). Le processus courant qui quitte la S.C autorisera au processus qui possède le numéro suivant à accéder en S.C. D'où :
Contexte commun : Num = 0 ; Cur = 0 ;
Prologue :
MOV AX,1
XADD Num,AX /* j'obtiens un numéro dans AX */
Tq: CMP AX,Cur /* est-ce mon tour ? */
JNE Tq /* non : reboucler */
/* oui : j'accède en S.C */
Epilogue :
MOV AX,1
XADD Cur,AX /* je quitte la S.C */
Remarque 1 :
(aucun proc. n'est en S.C) si et seulement si (Num=Cur)
Remarque 2 : considération pratique : entiers codés sur N bits
Le seul cas qui pourrait nuire au bon fonctionnement c'est qu'il y ait plus de 2N demandes simultanées d'accès en S.C (dans ce cas deux processus ou plus obtiendront un même numéro). Si N = 32 ; ça fonctionne bien tant que le nombre de demandes simultanées est ? 232 (4294967296) ; on pourrait diminuer le risque en travaillant sur des double-mots ou quadruple-mots (il est peut être peu probable qu'il y ait plus de 2128 demandes simultanées d'accès en S.C). Mais , il demeure que, du point de vue théorique ce problème n'a pas lieu (pas de limite supérieure pour les entiers).
-
Une autre solution pour l'exercice 7.11, pp. 348-349 , en utilisant uniquement deux sémaphores :
Contexte commun :
Sémaphore Serv initialisé à 0, mutex initialisé à 1 ;
entier K initialisé à 0 ;
Processus Pi Tantque vrai faire
Fabriquer un message ;
P(mutex) ;
Deposer (message, Tampon (K)) ;
K := (K+1) mod M ;
Si K=0 alors V(Serv)
Sinon V(mutex)
Finsi
FinTantque
Processus Ps Tantque vrai faire
P(Serv)
vidage du tampon
V(mutex)
FinTantque
-
Dans l'exercice 7.16, pp. 366-367, les véhicules de type 2 sont plus prioritaires que ceux de type 1 et 3.
-
L'exercice 7.15, pp. 366, est erroné car il présente une situation d'interblocage.
Voici une solution correcte qui utilise un sémaphore et deux entiers:
var s : semaphore init 0;
Processus P1
var n : entier init 1;
Cycle
Première partie
V(n,s) ;
P(n+1,s) ;
n=n+2;
Fin du cycle
Processus 2
var m: entier init 1;
Cycle
Première partie
P(m,s) ;
Deuxième partie
V(m+1,s) ;
m=m+2;
Fin de cycle
Ces suggestions et remarques ont été faites par des lecteurs que je remercie vivement.