\documentclass{bschlangaul-aufgabe} \bLadePakete{mathe,grafik} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 5}, Thematik = {Transaktionen T1 und T2}, Referenz = 66116-2021-F.T1-TA2-A5, RelativerPfad = Examen/66116/2021/03/Thema-1/Teilaufgabe-2/Aufgabe-5.tex, ZitatSchluessel = examen:66116:2021:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Transaktionen}, EinzelpruefungsNr = 66116, Jahr = 2021, Monat = 03, ThemaNr = 1, TeilaufgabeNr = 2, AufgabeNr = 5, } Gegeben sind die folgenden transaktionsähnlichen Abläufe. (Zunächst wird auf das Setzen von Sperren verzichtet.) Hierbei steht R(X) für ein Lesezugriff auf X und W(X) für einen Schreibzugriff auf X. \index{Transaktionen} \footcite{examen:66116:2021:03} \begin{center} \begin{tabular}{|l|l|} \hline T1 & T2 \\\hline R(A) & R(D) \\ A := A-10 & D := D-20 \\ W(A) & W(D) \\ R(C) & R(A) \\ R(B) & A := A+20 \\ B := B+10 & W(A) \\ W(B) & \\\hline \end{tabular} \end{center} \noindent Betrachten Sie folgenden Schedule: \begin{center} \begin{tabular}{|l|l|} \hline T1 & T2 \\\hline R(A) & \\ & R(D) \\ & D := D-20 \\ & W(D) \\ & R(A) \\ & A := A+20 \\ & W(A) \\ A := A-10 & \\ W(A) & \\ R(C) & \\ R(B) & \\ B := B+10 & \\ W(B) & \\\hline \end{tabular} \end{center} \begin{enumerate} %% % a) %% \item Geben Sie die Werte von $A$, $B$, $C$ und $D$ nach Ablauf des Schedules an, wenn mit $A = 100$, $B = 200$, $C = \text{true}$ und $D = 150$ begonnen wird. \begin{bAntwort} \begin{description} \item[A] 90 (A := A - 10 := 100 - 10) T2 schreibt 120 in A, was aber von T1 wiederüberschrieben wird. \item[B] 210 (B wird nur in T1 gelesen, verändert und geschrieben) \item[C] true (C wird nur in T1 gelesen) \item[D] 130 (D wird nur in T2 gelesen, verändert und geschrieben) \end{description} \end{bAntwort} %% % b) %% \item Geben Sie den Dependency-Graphen des Schedules an. \begin{bAntwort} \begin{tikzpicture} \node (T1) {$T_1$}; \node (T2) at (2,2) {$T_2$}; \draw[->] (T1.north) -- (T2.west); \draw[->] (T2.south) -- (T1.east); \end{tikzpicture} \end{bAntwort} %% % c) %% \item Geben Sie alle auftretenden Konflikte an. \begin{bAntwort} $R_1(A) < W_2(A)$ resultierende Kante $T_1 \rightarrow T_2$, $R_2(A) < W_1(A)$ resultierende Kante $T_2 \rightarrow T_1$, $W_2(A) < W_1(A)$ resultierende Kante $T_2 \rightarrow T_1$ (bereits vorhanden) \end{bAntwort} %% % d) %% \item Begründen Sie, ob der Schedule serialisierbar ist. \begin{bAntwort} Nicht ohne den Einsatz der Lese- und Schreibsperren, denn der Dependency Graph enthält einen Zyklus, womit er nicht konfliktserialisierbar ist. \end{bAntwort} %% % e) %% \item Beschreiben Sie, wie die beiden Transaktionen mit LOCK Aktionen erweitert werden können, so dass nur noch serialisierbare Schedules ausgeführt werden können. Die Angabe eines konkreten Schedules ist nicht zwingend notwendig. \begin{bAntwort} Hier führt die Verwendung des Zwei-Phasen-Sperrpotokolls zur gewünschten Serialisierbarkeit. (Es muss dabei weder die konservative, noch die strenge Variante verwendet werden, damit es funktioniert). T1 würde zu Beginn die und Lese- und Schreibsperre für A anfordern, den Wert verändern, zurückschreiben und anschließend die Sperren für A zurückgeben. Währendessen könnte T2 „ungestört“ die Schreib- und Lesesperren für D anfordern, D lesen, verändern und schreiben, und die Sperren zurückgeben. T2 bemüht sich nun um die Lesesperre für A, muss aber nun so lange warten, bis T1 die Schreibsperre zurückgegen hat. Dadurch kann man den Lost-Update-Fehler vermeiden und erhält allgemein einen serialisierbaren Schedule. Beispiel für einen konkreten Schedule mit LOCKs (auch wenn nicht zwingend gefordert in der Aufgabenstellung): \begin{tabular}{|l|l|} \hline T1 & T2 \\\hline rLock(A) & \\ xLock(A) & \\ & rLock(D) \\ & xLock(D) \\ R1(A) & \\ & R2(D) \\ A := A-10 & \\ & D := D-20 \\ & W2(D) \\ & unLock(D) \\ & rLock(A) DELAY \\ W1(A) & \\ unLock(A) & \\ & R2(A) \\ & A := A+20 \\ & W2(A) \\ & unLock(A) \\ rLock(C) & \\ R1(D) & \\ unLock(C) & \\ & commit \\ rLock(B) & \\ xLock(B) & \\ R1(B) & \\ B := B+10 & \\ W1(B) & \\ unLock(B) & \\ commit & \\ \hline \end{tabular} \end{bAntwort} \end{enumerate} \end{document}