Les Systèmes d'exploitation, Ed. Dunod, 2003


Erratum
  1. 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

  2. Dans le chapitre 1, p36, 2ème paragraphe : remplacer dans le texte la variable etat par mode.

  3. 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 classe Parking Monitor est ParkingMonitor sans l'espace.

  4. Chapitre 9, p258, exercice 9.8 contient un erreur.

  5. 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).

  6. 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



  7. Dans l'exercice 7.16, pp. 366-367, les véhicules de type 2 sont plus prioritaires que ceux de type 1 et 3.

  8. 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.