Vous êtes sur la page 1sur 3

D) Pour chacune des exécutions ci-dessous, décrire les transactions qui seraient placées en

TD Transactions attente dans le cas d’un verrouillage à deux phases. (On ne considèrera pas la suite des
actions d’une transaction mise en attente)
Exercice 0a : Cas concret
1. L1(x), E1(x), L2(z), L1(y), E1(y), C1, L2(x), E2(x), E2(z), C2
A) Pascal veut modifier un nuplet. Il s’aperçoit qu’il est mis en attente parce que ce nuplet est
2. L1(x), E1(x), E3(x), L2(y), L3(y), E3(y), C3, E1(y), C1, L2(x), C2
déjà en cours de modification par Julie. Comment lui expliqueriez-vous la justification 3. L1(x), L2(x), E2(x), C2, L3(x), L4(z), C4, E1(x), E3(y), E3(x), C3, E1(y), E5(x), E1(z),
de cette mise en attente? À quel moment prendra-t-elle fin? C1, E5(y), L5(z), C5
B) Justin a écrit un programme en mode serializable qui crée les fiches de paie de tout le 4. L1(x), L3(y), E1(y), E4(x), E1(t), C1, E5(x), L2(z), L3(z), C3, E2(z), C2, E5(z),
personnel. Il vous annonce qu’il a décidé de n’effectuer qu’une seule fois l’ordre commit, L4(t), C4, L5(t), C5
quand toutes les fiches sont calculées. Comment lui expliqueriez-vous les inconvénients
de ce choix? Exercice 3 : Interblocage de transactions
C) Alphonsine lit un nuplet dans la table des voyageurs et s’aperçoit qu’il manque l’adresse.
On considère un SGBD avec un mécanisme de contrôle de la concurrence d'accès basé sur
Elle demande à Barnabé d’effectuer la correction, et il le fait immédiatement. Pourtant,
deux types de verrous, à savoir des verrous partageables pour la lecture et exclusif pour
Alphonsine ne voittoujours pas l’adresse, même en réaffichant sans cesse son écran. La
l'écriture. Les verrous partageables sont compatibles entre eux et un verrou exclusif n'est
tension monte entre les deux. Que feriez-vous pour les aider?
compatible avec aucun autre type de verrou. Les demandes se font par les primitives VL(a)
(demande de verrou partagé sur l'objet a) et VE(a) (demande de verrou exclusif de l'objet a).
Exercice 1 : Ordonnancement des transactions
A) Quelles sont parmi les exécutions suivantes celles qui produisent des anomalies ? Voici une partie d'ordonnancement de plusieurs transactions. Les actions DEBUT
Li(x) signifie que la transaction i effectue une lecture de la donnée x et Ei(x) que la TRANSACTION sont implicites, la fin de transaction correspond à la validation et on
transaction i effectue une écriture de la donnée x. considère que, à ce moment ou lors d’une annulation, tous les verrous sont libérés.
Ai signifie que la transaction i est défaite (annulation) et Ci que la transaction i est validée En supposant qu'aucun verrou n'est libéré avant la fin de chaque transaction, tracer le graphe
(commit) d'attente des transactions à l'instant 28.
1. L1(x), E1(x), L2(x), E2(y), A1, C2
2. L1(x), E1(x), L2(y), E2(y), A1, C2 Dans ce graphe, les sommets sont les transactions actives et il y a une arrête de Ti vers Tj
3. L1(x), L2(x), L2(y), E2(y), L1(z), A1, C2 étiquetée x si Ti attend que Tj libère l'objet x.
4. L1(x), L2(x), E2(x), E1(x), C1, C2
5. L1(x), L2(x), E2(x), L1(y), C1, C2 Y-a-t-il une situation d’interblocage ? Proposer des solutions pour éviter les interblocages.
6. L1(x), E1(x), L2(x), E2(x), C1, C2 Le verrouillage à deux phases est-il une solution aux problèmes d’interblocages ?
B) Quelles sont, ci-dessous, les exécutions sérialisables ? Temps Transaction Action Temps Transaction Action
1. L1(x), L2(y), E1(y), L2(x), E2(x) 1 T1 VL(a) 16 T8 VE(h)
2. L1(x), L2(y), E1(x), E1(y), L2(x), E2(x) 2 T2 VE(b) 17 T9 VE(g)
3. L1(x), L1(y), L2(y), E2(z), E1(z), E3(z), E3(x) 3 T1 VL(c) 18 T8 VE(e)
4. L1(y), L1(y), E2(z), E1(z), E3(z), E3(x), E1(x) 4 T3 VL(d) 19 T7 Commit
5 T4 VE(b) 20 T9 VL(h)
5. E2(x), E3(z), E2(y), L1(x), E1(z), L3(y) 6 T5 VL(a) 21 T3 VL(g)
6. L1(x), E2(y), L3(y), E3(z), E1(z), E2(x) 7 T2 VE(e) 22 T10 VE(a)
8 T3 VL(f) 23 T6 Commit
Exercice 2 : Verrouillage 9 T2 VE(f) 24 T11 VL(c)
On considère l’exécution concurrente suivante : 10 T5 VE(a) 25 T12 VE(a)
11 T1 Commit 26 T13 VL(c)
L1(x), L2(y), L3(x), E3(x), E1(y), L2(x), C1, C2, C3 12 T6 VE(a) 27 T11 VE(c)
13 T5 Abort 28 T13 VL(a)
A) Trouvez les conflits et montrez que cet ordonnancement n’est pas sérialisable. 14 T6 VE(c) … … …
B) Trouvez l’exécution obtenue à partir de cet ordonnancement par verrouillage à deux 15 T7 VL(g)
phases. On considère que les verrous d’une transaction sont relâchés au Commit et qu’à ce
moment les opérations bloquées en attente de verrou sont exécutées en priorité. Exercice 4 : Concurrence, Gestion Bancaire
C) Ce nouvel ordonnancement peut-il être concerné par des annulations en cascade (si l’une
des transactions remplace son commit par une annulation) ? Les trois programmes suivants peuvent s’exécuter dans un système de gestion bancaire. Débit
diminue le solde d’un compte c avec un montant donné m. Pour simplifier, tout débit est
permis (on accepte des découverts).

1 2
Crédit augmente le solde d’un compte c avec un montant donné m. Transfert transfère un En principe, cette procécure semble très correcte (et elle l’est). Supposons que nous ayons
montant m à partir d’un compte source s vers un compte destination d. L’exécution de chaque trois médecins, Philippe, Alice, et Michel, désignés par p, a et m, tous les trois de garde. Voici
programme démarre par un Start et se termine par un Commit (non montrés ci-dessous). une exécution concurrente de deux transactions 𝑇1 = HorsGarde(‘Philippe’) et 𝑇2 =
HorsGarde(‘Michel’).
Débit (c:Compte; | Crédit (c:Compte; | Transfert (s,d:Compte;
m:Montant) | m:Montant) | m:Montant)
𝑟1(𝑝)𝑟1(𝑎)𝑟1(𝑚 )𝑟2(𝑝)𝑟2(𝑎)𝑟2(𝑚 )𝑤1(𝑝)𝑤2(𝑚 )
begin | begin | begin A) Quel est, avec cette exécution, le nombre de médecins de garde constatés par 𝑇1 et 𝑇2
t := Read(c); | t = Read(c); | Débit(s,m); B) Quel est le nombre de médecins de garde à la fin, quand 𝑇1 et 𝑇2 ont validé?
Write(c,t-m) ; | Write(c,t+m); | Crédit(d,m);
End | end | end C) Au vu des réponses qui précèdent, expliquer pourquoi cette exécution concurrente n’est
pas sérialisable (aide : définir la propriété de la base qui est respectée si les exécutions ont lieu
Le système exécute en même temps les trois opérations suivantes : en série, et constater qu’elle est violée ici).
(1) un transfert de montant 100 du compte A vers le compte B D) Mettons-nous en mode sérialisable, dans lequel l’écriture d’un nuplet est bloquée si une
(2) un crédit de 200 pour le compte A autre transaction a lu ce même nuplet (et ce, jusqu’à la fin de cette autre transaction). Que va-
(3) un débit de 50 pour le compte B t-il se passerdans ce mode avec notre exécution concurrente?

A) Écrire les transactions T1 , T2 et T3 qui correspondent à ces opérations. Montrer que Exercice 6 : Gestion de concurrence par verrouillage/estampillage
l’ordonnancement L1(A),L3(B),E1(A),L2(A),E3(B),L1(B),C3,E2(A),C2,E1(B),C1 est
une exécution concurrente de T1, T2 et T3 . La figure suivante indique une exécution concurrente des deux transactions T1 et T2 qui n'est
B) Mettre en évidence les conflits dans cet ordonnacement et construire le graphe de pas valable parce qu'aucune technique de contrôle de la concurrence n'est utilisée:
sérialisation de cette histoire. Est-il sérialisable ?
C) Quelle est l’exécution obtenue à partir de cet ordonnancement par verrouillage à deux temps T1 T2
phases ? On suppose que les verrous d’une transaction sont relâchés après le Commit t1 begin
de celle-ci. Une opération bloquée en attente d’un verrou bloque le reste de sa t2 begin
transaction. Au moment du relâchement des verrous, les opérations en attente sont t3 read(A)
exécutées en priorité, dans l’ordre de leur blocage. Quelle est l’exécution H’ obtenue à t4 read(B)
partir de H par verrouillage à deux phases ? On suppose que les verrous d’une t5 read(B)
t6 read(A)
transaction sont relâchés après le Commit de celle-ci. Une opération bloquée en t7 update(B)
attente d’un verrou bloque le reste de sa transaction. Au moment du relâchement des t8 update(A)
verrous, les opérations en attente sont exécutées en priorité, dans l’ordre de leur
blocage. Pour avoir une exécution concurrente valable, on peut utiliser l'une des méthodes suivantes:

Exercice 5 : Sérialisabilité, médecins de garde a) les transactions utilisent des verrous exclusifs avec verrouillage en deux phases ; le système
Supposons qu’un hôpital gère la liste de ses médecins dans une table (simplifiée) pratique la détection des verrous mortels ;
Docteur(nom, garde), chaque médecin pouvant ou non être de garde. On doit s’assurer b) les transactions utilisent des verrous exclusifs avec verrouillage en deux phases ; le
qu’il y a toujours au moins deux médecins de garde. La procédure suivante doit permettre de système pratique la prévention des verrous mortels selon la technique "wait-die" (attendre-
placer un médecin au repos en vérifiant cette contrainte. mourir);
c) les transactions utilisent des verrous exclusifs avec verrouillage en deux phases ; le système
/* Une procédure de gestion des gardes */ pratique la prévention des verrous mortels selon la technique "wound-wait" (blesser-
create or replace procedure HorsGarde (nomDocteur VARCHAR) AS attendre) ;
-- Déclaration des variables d) les transactions suivent la méthode d'estampillage et T1 est plus vieille que T2 ;
val nb_gardes;
BEGIN Préciser dans les différents cas, ce qu'il se passe: transaction en attente, transaction tuée,
-- On calcule le nombre de médecin de garde verrou mortel, ...
SELECT count(*) INTO nb_gardes FROM Docteur WHERE garde = true
IF (nb_gardes > 2) THEN
UPDATE Docteur SET garde = false WHERE nom = nomDocteur;
COMMIT;
ENDIF
END;
/

3 4
Exercice 7 : Reprise sur panne

On considère un système multi-utilisateurs qui gère des pannes avec un journal d’opérations
effectuées par les transactions. Le journal contient la séquence d’opérations suivante au
moment d’un crash du système :
(start transaction, T3)
(start transaction, T1)
(write_item, T3, C, 30, 40)
(read_item, T1, A)
(read_item, T4, A)
(read_item, T1, D)
(write_item, T4, A, 30, 20)
(write_item, T1, D, 20, 25)
(commit,T4)
(commit,T1)
(read_item, T2, D)
(checkpoint)
(write_item, T2, D, 15, 25)
(start transaction, T2)
**** crash ****
(read_item, T2, B)
(write_item, T2, B, 12, 18)
(start transaction, T4)
(read_item, T4, D)
(write_item, T4, D, 25, 15)

La syntaxe est la suivante :


 (start transaction, Nom_Transac) : début d’une transaction
 (commit, Nom_Transac) : validation d’une transaction
 (rollback, Nom_Transac) : annulation d’une transaction
 (read_item, Nom_Transac, Nom_objet) : lecture d’un objet par une transaction
 (write_item, Nom_Transac, Nom_objet, Ancienne_valeur,
Nouvelle_valeur) : écriture d’un objet par une transaction
 (checkpoint) : point de reprise

1. En faisant l’hypothèse d’un protocole de mises à jour immédiates, décrire le processus de


reprise. Indiquer les transactions qui sont annulées, qui sont défaites/refaites et préciser s’il
existe un risque d’annulation en cascade.

2. On fait maintenant l’hypothèse d’un protocole de mises à jour différées. Indiquer si ce


nouveau mode de fonctionnement a une influence sur le contenu du journal et préciser les
éventuelles modifications. Décrire ensuite les étapes de la reprise.

3. On considère maintenant un nouveau journal avec le contenu suivant :

(start transaction, T1)


(read_item, T1, A) (start transaction, T2)
(read_item, T1, D) (read_item, T2, B)
(write_item, T1, D, 20,21) (write_item, T2, B, 15, 12)
(commit,T1) (start transaction, T3)
(start transaction, T4) (read_item, T3, A)
(read_item, T4, E) (write_item, T3, A, 30, 35)
(write_item, T4, E, 12, 15) (read_item, T2, D)
(checkpoint) (write_item, T2, D, 21, 25)
(read_item, T4, F) **** crash ****
(write_item, T4, F, 35, 20)
(commit,T4)

a) Décrire la procédure de redémarrage dans le cas d’un protocole “mises à jour


immédiates”.
b) Même question dans le cas d’un protocole “mises à jour différées”.

Vous aimerez peut-être aussi