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