Précédent Index

4   Concurrence (6 points)

Le programme suivant s'exécute dans un système de gestion de commandes pour les produits d'une entreprise. Il permet de commander une quantité donnée d'un produit qui se trouve en stock. Les paramètres du programme représentent respectivement la référence de la commande (c), la référence du produit (p) et la quantité commandée (q).

Commander (c, p, q)
Start
Lecture prix produit p
si q > stock de p alors Abort
sinon
Mise à jour stock de p
Enregistrement dans c du total de facturation
Commit
fin si

N.B. p et c ne sont pas des enregistrements, mais des identifiants pour le produit et la commande. Ainsi, le prix et la quantité de produit en stock sont gardés dans des enregistrements différents.

  1. (1 point) Lesquelles des transactions suivantes peuvent être obtenues par l'execution du programme ci-dessus? Justifiez votre réponse.

    T: r[x] r[y] a
    T': r[x] a
    T'': r[x] w[y] w[z] c
    T''': r[x] r[y] w[y] w[z] c
    


    Solution : Les opérations sur la base de données dans Commander sont: lecture prix, lecture stock, écriture stock et écriture total facturation dans la commande. L'opération peut se terminer par Abort après la lecture du stock ou par Commit à la fin.

    Les seules transactions qui correspondent sont T et T'''. Dans T' et T'' il manque une lecture.


  2. (1 point) Dans le système s'exécutent en même temps trois transactions: deux commandes d'un même produit et le changement du prix de ce même produit. Montrez que l'histoire ci-dessous est une exécution concurrente de ces trois transactions et expliquez la signification des enregistrements qui y interviennent.

    H : r1[x] r1[y] w2[x] w1[y] c2 r3[x] r3[y] w1[z] c1 w3[y] w3[u] c3



    Solution : Les transactions de cette exécution sont:
    T1 : r1[x] r1[y] w1[y] w1[z] c1
    T2 : w2[x] c2
    T3 : r3[x] r3[y] w3[y] w3[u] c3

    T1 et T3 sont les deux commandes du même produit et T2 le changement de prix. x est le prix du produit, y son stock, z et u les totaux de facturation des deux commandes.

  3. (1 point) Vérifiez si H est sérialisable en identifiant les conflits et en construisant le graphe de sérialisation.



    Solution : Les conflits sur x: r1[x]-w2[x], w2[x]-r3[x].
    Les conflits sur
    y: r1[y]-w3[y], w1[y]-r3[y], w1[y]-w3[y].
    Sur
    z et sur u il n'y a pas de conflit.

    Le graphe de sérialisation contient les arcs T
    1 ® T2, T2 ® T3 et T1 ® T3. Il n'y a pas de cycle, donc H est sérialisable.

  4. (1 point) L'exécution H est-elle stricte? Justifiez votre réponse.



    Solution : Après w1[y], on a r3[y] avant la fin de T1, donc H n'évite pas les annulations en cascade, donc elle n'est pas stricte non plus.

  5. (2 points) Quelle est l'exécution obtenue par verrouillage à deux phases à partir de H? Quel prix sera appliqué pour la seconde commande, le même que pour la première ou le prix modifié?

    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, dans l'ordre de leur blocage.



    Solution : Le verrouillage à deux phases (1,5 points sur 2).

    r
    1[x], r1[y] s'exécutent
    w
    2[x] est bloquée en attente de verrou sur x
    w
    1[y] s'exécute (r1[y] ne le bloque pas, c'est la même transaction)
    c
    2 est bloquée car T2 est bloquée (à cause de w2[x] bloquée)
    r
    3[x] s'exécute en partageant le verrou de lecture avec r1[x]
    r
    3[y] est bloquée en attente de verrou sur y, à cause de w1[y]
    w
    1[z] s'exécute
    c
    1 s'exécute et relâche les verrous de T1
    ® w2[x] ne peut pas être débloquée, car r3[x] possède le verrou
    ® c2 aussi reste bloquée à cause de w2[x]
    ® r3[y] est débloquée, donc T3 est aussi débloquée
    w
    3[y], w3[u] s'exécutent
    c
    3 s'exécute et relâche les verrous de T3
    ® w2[x] et c2 sont débloquées et s'exécutent.

    Résultat: r
    1[x] r1[y] w1[y] r3[x] w1[z] c1 r3[y] w3[y] w3[u] c3 w2[x] c2.

    Le changement de prix (w
    2[x]) s'exécute tout à la fin, donc la seconde commande passe avec le même prix que la première (0,5 points sur 2).

Précédent Index