3 Concurrence (6 points)
Un programme de réservation de billets de spectacle a la forme
simplifiée présentée ci-dessous. Il permet à un client dont on connait
le compte bancaire de réserver un nombre de billets désiré.
Les identifiants compte et billets sont
des enregistrements de la base de données, qui contiennent respectivement le
solde du compte bancaire du client et le nombre de billets disponibles.
Réservation (nombre_billets, compte)
disponible := Read (billets)
Write (billets, disponible - nombre_billets)
solde := Read (compte)
Write (compte, solde - prix * nombre_billets)
fin Réservation
-
(1,5 pt) Si deux clients différents veulent réserver des
billets en même temps, trouvez un entrelacement des opérations des deux
transactions qui produise un résultat erroné et justifiez-le par un
exemple numérique.
- (0,5 pt) Laquelle des trois histoires suivantes est une
exécution concurrente de deux réservations de billets par
des clients différents? Justifiez votre réponse.
H: r1[x] w1[x] r2[x] r1[y] w2[x] r2[z]
w1[y] c1 w2[z] c2
H': r1[x] w1[x] r2[x] r1[y] w2[x] r2[y]
w1[y] c1 w2[y] c2
H'': r1[x] r2[x] r1[y] w2[x] w1[x] w2[z]
r2[z] w1[y] c1 c2
- (2 pt) Montrez que H est sérialisable. Montrez que
même si H est déjà sérialisable, le verrouillage à deux phases
modifie l'ordre des opérations. Donnez le résultat du verrouillage à
deux phases appliqué à H. On considère que le relâchement des
verrous d'une transaction se fait au Commit et qu'à ce moment on exécute en
priorité les opérations bloquées en attente de verrou.
- (1 pt) H est-elle recouvrable? Evite-t-elle les
annulations en cascade? Est-elle stricte?
- (1 pt) Considerons que H s'exécute telle quelle (sans
réordonnancement) et qu'au début il y a 100 billets disponibles. Si chaque
client réserve 2 billets et si une panne intervient juste après w2[z],
combien de billets seront disponibles après la reprise, c'est-à-dire
après que le système ait remis la base de données dans un état
cohérent?