Вариант решения задания №7

advertisement
Вариант решения к домашнему заданию 7.
Задача 1 (20 очков)
а) Начальное состояние: A=c, B=d
Упорядоченный график Т1->T2:
Read(c,t), t:=c+2, write(A, c+2)
T1: Read(d,t), t:=d*3, write(B,d*3)
T2: Read(d*3,s), s:=d*3*2=d*6, write(B, d*6)
T2: Read(c+2,s), s:=c+2+3=c+5, write(A,c+5)
A=c+2, B=d
A=c+2, B=d*3
A=c+2, B=d*6
A=c+5, B=d*6
Упорядоченный график Т2->Т1:
T2: Read(d,s), s:=d*2, write(B, d*2)
T2: Read(c,s), s:=c+3, write(A,c+3)
T1: Read(c+3,t), t:=c+3+2=c+5, write(A, c+5)
T1: Read(c*2,t), t:=d*2*3=d*6, write(B,d*6)
A=c, B=d*2
A=c+3, B=d*2
A=c+5, B=d*2
A=c+5, B=d*6
б) Упорядочиваемый график:
Rt1(A,t); Wt1(A,t); Rt1(B,t); Wt1(B,t); Rt2(B,t); Wt2(B,t); Rt2(A,t); Wt2(A,t)
Упорядочиваемый график в силу специфики данной транзакции:
Rt1(A,t); Wt1(A,t); Rt2(B,t); Wt2(B,t); Rt1(B,t); Wt1(B,t); Rt2(A,t); Wt2(A,t)
Неупорядочиваемый график:
Rt1(A,t); Rt2(B,t); Wt2(B,t); Rt2 (A,t); Wt2 (A,t); Wt1(A,t); Rt1(B,t); Wt1(B,t)
в) Имеется 2 упорядоченных графика Т1
T2 и T2
T1.
Дополнительно 10 баллов за ответ: 402 упорядочиваемых графика (предполагая, что
можно переупорядочить перекрывающиеся внутренние действия транзакций).
Правила: запись транзакции T1 должна всегда предшествовать чтению той же переменной
транзакцией T2, либо запись транзакции T2 должна всегда предшествовать чтению той же
переменной транзакцией T1.
Задача 2 (20 очков)
а) 1.
Т1
Т2
Т3
2. Да. Эквивалентный упорядоченный график
Т1
Т2
б) 1.
Т1
Т2
Т3
Т4
2. Нет. В графе предшествования имеется цикл Т1
Т2
Т3
Задача 3 (20 очков)
Удалить 23
Пояснение
Действие
Блокировать и читать корень a
Блокировать и читать узел c
Поскольку узел c в данный момент полон, мы знаем
Что корень не изменится при удалении, следовательно,
мы можем его разблокировать
Блокировать и читать лист g
Если мы удалим 23 из узла g, только один элемент 29
Останется в узле, что меньше разрешенного минимума.
Мы должны перенести элемент от соседа (например) h,
поэтому блокировать и читать лист h.
Помещаем 29 и 31 в узел g, 37 и 41 в узел h.
Узел c будет теперь содержать 29,37 и 43. Чтобы снять
Блокировку как можно раньше, обновляем сначала
узел c и разблокируем его.
Обновить узел g значениями 29 и 31 и разблокировать его.
Обновить узел h значениями 37 и 41 и разблокировать его.
L(a) R(a)
L(c) R(c)
UL(a)
L(g) R(g)
L(h) R(h)
W(c) UL(c)
W(g) UL(g)
W(h) UL(h)
Вставить 35. Здесь нам понадобиться создать новый блок (Create)
прежде, чем мы его сможем заблокировать
Пояснение
Действие
Блокировать и читать корень a
Блокировать и читать узел c
Блокировать и читать узел h
Поскольку h полон, мы должны расщепить его и создать
новый лист j который будет содержать 31 и 35. Запись j может
быть выполнена после обновления узла-родителя c, поэтому мы
разблокируем c как можно раньше. Узел j будет пока находиться в
буфере памяти.
Новый элемент должен быть вставлен в узел c. Поскольку он полон,
он должен быть расщеплен и должен быть создан новый узел k
Узел c будет содержать 23,31 а узел k - 43. 37 будет добавлено к
корню, чтобы адресовать новый блок k.
Обновить корень, добавив 37 и разблокировать его
Обновить узел c и разблокировать его.
Обновить новый узел k и разблокировать его.
Обновить узел h и разблокировать его.
Обновить узел j и разблокировать его
L(a) R(a)
L(c) R(c)
L(h) R(h)
Create(j) L(j)
Create(k) L(k)
W(a) UL(a)
W(c) UL(c)
W(k) UL(k)
W(h) UL(h)
W(j) UL(j)
Задача 4 (20 очков)
а) Проверка T1. Поскольку нет транзакций, прошедших проверку, проверка успешна.
Проверка T2. T1 проверена, но не закончена. Поэтому нужно проверить пересечение
RS(T2) WS(T1) = {B,C} {A} = {}. Поскольку Т1 еще не закончена к моменту
проверки Т2, мы должны еще сравнить множества записи Т1 и Т2. WS(T2)
WS(T1) =
{B} {A} = {}. Следовательно, проверка Т2 успешна.
Проверка T3 (включает сравнение с Т1 и Т2). T1 проверена, но незакончена до старта T3,
поэтому проверяем RS(T3) WS(T1) = {C} {A} = {}. Кроме того, Т1 не закончена к
моменту проверки Т3, поэтому проверяем W(T3) W(T1) = {C} {A} = {}
T2 проверена, но незакончена до старта T3, поэтому проверяем RS(T3)
WS(T2) =
{C} {B} = {}. Кроме того, Т2 не закончена к моменту проверки Т3, поэтому проверяем
W(T3) W(T2) = {C} {B} = {}. Все пересечения пусты, следовательно, проверка
успешна.
б)  Проверка T1. Поскольку нет транзакций, прошедших проверку, проверка успешна.
Проверка T2. T1 проверена, но не закончена. Поэтому нужно проверить пересечение
RS(T2) WS(T1) = {B,C}
и не записыват значение В.
{C} = {C}. Проверка не успешна. Транзакция Т2 отменяется
Проверка T3 (включает сравнение только с Т1, так как Т2 - отменена). T1 проверена, но
незакончена до старта T3, поэтому проверяем RS(T3) WS(T1) = {В}
{С} = {}.
Кроме того, Т2 не закончена к моменту проверки Т3, поэтому проверяем
W(T3) W(T1) = {А} {C} = {}. Проверка успешна.
Задача 5 (20 очков)
а) IX
б) SIX
в) S
г) группового режима не существует (S, IX, SIX не могут сосуществовать одновременно)
д) группового режима не существует (S, IX не могут сосуществовать одновременно)
Download