4.7. Durée de section critique
Le but de ce petit problème est de montrer
l'influence de la durée d'une section critique sur les performances
globales.
La programmation de la réservation de place d'avions
peut s'envisager suivant deux méthodes. Le schéma
général du programme serait le suivant:
var f : fichier;
enrg : t_enregistrement;
début répéter
lecture_terminal ( type, vol, date );
cas type dans consultation: consulter;
réservation: réserver;
sortie:;
fincas;
jusqu'à type = sortie;
fin;
Pour les
deux méthodes, la procédure
consulter est la suivante:
procédure consulter
début début_consult;
lire_enrg (f, vol, date, enrg);
places_libres := enrg.nb_place;
fin_consult;
afficher ( " places disponibles: ", places_libres);
fin;
Dans la
première méthode, la procédure
réserver est la suivante:
procédure réserver;
début début_reserv;
lire_enrg (f, vol, date, enrg);
si enrg.nb_place > 0 alors
afficher ( "il y a de la place; en voulez-vous une? " );
lecture_terminal ( réponse );
si réponse = "oui" alors
enrg.nb_place := enrg.nb_place - 1;
écrire_enrg (f, vol, date, enrg);
finsi;
sinon afficher ( "plus de place ");
finsi;
fin_reserv;
fin;
Dans la
deuxième méthode, la procédure
réserver est la suivante:
procédure réserver;
var OK: booléen;
début début_reserv;
lire_enrg (f, vol, date, enrg);
si enrg.nb_place > 0 alors
enrg.nb_place := enrg.nb_place - 1;
écrire_enrg (f, vol, date, enrg); OK := vrai;
sinon OK := faux;
finsi;
fin_reserv;
si OK alors afficher ( "place réservée ");
sinon afficher ( "plus de place ");
finsi;
fin;
Le
système fournit, pour chaque fichier ouvert, un mécanisme de
verrouillage au moyen de deux opérations. Ces opérations n'ont
aucun effet sur les opérations de lecture et d'écriture sur le
fichier.
- procédure
verrouiller (f) met le processus demandeur dans une file
associée au fichier s'il y a déjà un processus qui a
verrouillé le fichier, sinon pose un verrou sur le
fichier.
- procédure
déverrouiller (f) réactive un des processus de la file
associée au fichier s'il y en a et enlève le verrou s'il n'y en a
pas.
A- Que doivent être les opérations
de début_reserv et
fin_reserv dans chacune des
méthodes? Justifiez.
B- Que doivent être les opérations de
début_consult et
fin_consult dans chacune des deux
méthodes? Justifiez.
C- Comparer les avantages et inconvénients des
deux méthodes, et dites celle qui vous semble
préférable.
Solution de l’exercice
4.7
4.7.1. Question A
La réservation entraîne une lecture d'un
enregistrement pour le modifier éventuellement. Il ne doit pas y avoir
plusieurs processus en train de faire la même opération sur le
même enregistrement, car le résultat serait erroné. Le
verrouillage tel qu'il est proposé permet de garantir qu'un seul
processus peut détenir le verrou. Il doit donc y avoir verrouillage du
fichier dans la procédure
début_reserv, et
déverrouillage dans
fin_reserv.
début_reserv: verrouiller (f);
fin_reserv: déverrouiller (f);
4.7.2. Question B
La consultation ne fait que lire un enregistrement unique. Une
telle lecture depuis le disque est souvent indivisible (lecture d'un secteur),
et il n'est donc pas nécessaire d'utiliser une quelconque contrainte de
synchronisation, et
début_consult et
fin_consult sont vides. Si une
réservation est en cours, et qu'un verrou est posé sur le fichier,
on ne peut dire si la consultation lira l'enregistrement avant ou après
la modification. Cependant si la lecture a lieu avant, le résultat sera
le même que si toute la consultation s'était déroulée
avant le verrouillage, alors que si elle a lieu après, le résultat
sera le même que si toute la consultation s'était
déroulée après le
déverrouillage.
4.7.3. Question C
La première méthode est séduisante car le
demandeur sait qu'à partir du moment où le système lui dit
qu'il y a de la place, il peut la réserver, alors que dans la
deuxième méthode, il peut se voir refuser sa réservation,
puisque consultation et réservation sont deux opérations
séparées. Le gros inconvénient de la première
méthode est que le verrouillage dure plus longtemps: il peut même
durer un temps assez important puisque le programme attend la réponse du
demandeur. Ceci peut durer un temps appréciable si le demandeur n'arrive
pas à se décider ou s'il a été accaparé par
une autre tâche. La durée de la réservation pouvant
atteindre, par exemple 30 secondes, limitera à 2 le nombre de
réservations par minute, ce qui est très faible. Il est probable
d'ailleurs qu'il n'y aura jamais de consultation, le demandeur
préférant faire une réservation puisqu'il peut toujours
changer d'avis par la suite. Dans la seconde méthode, la durée de
verrouillage est limitée et n'excèdera pas 0.1 secondes (2
accès disque), ce qui donnera 600 réservations par minute. La
deuxième méthode est donc de beaucoup préférable,
car elle offre une meilleure disponibilité. Son inconvénient
essentiel est que si le demandeur décide de réserver après
avoir constaté qu'il y avait de la place, sa réservation peut
être refusée, si entre temps les places restantes ont
été réservées par d'autres. Cet inconvénient
est considéré souvent comme peu probable et donc mineur.