Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по СРОД-10-12.docx
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
989.78 Кб
Скачать

3.6. Модели с блокировками для чтения и записи

    Проводя различия между доступами только чтения и для чтения и записи, можно разработать более детальную модель транзакций, которая будет допускать некоторые виды параллелизма. Различают два вида блокировок:

1.    Блокировки для чтения. RLOCK A (READ-LOCK A), что препятствует записи нового значения А любой другой транзакций во время чтения А транзакций Т. Однако блокировку А для чтения может одновременно установить любое число транзакций. 2.    Блокировки для записи. WLOCK A (WRITE-LOCK). При блокировках для записи никакая другая транзакция не может установить для этого элемента блокировку для чтения, ни блокировку для записи. И блокировки для чтения, и блокировки для записи снимаются операторами UNLOCK (разблокировать). Два расписания эквивалентны, если -   они продуцируют одно и то же значения для каждого элемента; -    каждая блокировка для чтения, применяемая данной транзакцией, встречается в обоих расписаниях, когда блокируемый документ имеет одно и то же значение. В системе поддерживается два типа блокировок:

1.    Х – блокировка (XLOCK – exclusive lock) – блокировка без взаимного доступа. WLOCK обозначает то же самое.

2.    S – блокировка (SLOCK- shared lock) – блокировка с взаимным доступом. RLOCK обозначает то же самое.

X – блокировка записи S – блокировка чтения

1.    Если транзакция Т блокирует кортеж А (Х-блокировка), то запрос любой другой транзакции к А будет отменён.

2.    Если транзакция Т, блокирующая элемент А (S – блокировка), то ·    запрос со стороны транзакции Т2 на Х-блокировку будет отвергнут ·    запрос со строки Т2 на S-блокировку будет принят  Эти правила можно представить в виде матрицы совместимости (рис.3.15). Запрос транзакций Т1 и Т2 к одному элементу А. N-означает конфликтную ситуацию. Т2 – находится в состоянии ожидания. Y – полная совместимость, «–» - отсутствие блокировок.

Рис.3.15. Матрица совместимости транзакций

Проверка сериализуемости: Алгоритм 2. Проверка сериализуемости расписаний с блокировками для чтения/записи. Входные данные. Расписание S для совокупности транзакций T1,…,Tk. Выходные данные. Получение ответа, является ли S сериализуемым. Метод. Строим граф предшествований G следующим образом. Узлы, как и прежде, соответствуют транзакциям. Дуги определяются следующими правилами: 1.    Пусть в S транзакция Ti устанавливает блокировку элемента А для чтения, а Tj – следующая за ней транзакция (если она существует) – устанавливает блокировку А для записи. Тогда строим дугу из Ti  в Tj.   2.    Пусть транзакция Ti  в S блокирует А для записи, а Tj – следующая за ней (если, конечно, такая существует) транзакция – устанавливает блокировку А для записи. Тогда строим дугу Ti -> Tj. 3.    Пусть далее Tm – какая-либо транзакция, блокирующая А для чтения после того, как Ti снимает свою блокировку для записи, но перед тем, как Tj устанавливает блокировку А для записи (если Tj не существует, то Tm – любая транзакция, которая блокирует А для чтения после того, как Ti разблокирует его. Тогда строим дугу Ti -> Tm.      Если граф G имеет циклы, то S не сериализуемо. Если же G ацикличен, то любая его топологическая сортировка определит последовательный порядок для транзакций.         Процесс топологической сортировки определяется следующим образом. Из ацикличности G следует, что в нём существует узел Ti, который не имеет входящих дуг. Занесём Ti  в список, удалив его из графа. Процесс повторяется до тех пор, пока в графе не останется узлов. Порядок перечисления узлов в списке даёт последовательный порядок транзакций.

Пример 3.7: Показано расписание 4-х транзакций.

        Рис.3.16. Расписание транзакций

Первый оператор UNLOCK A выполняется на шаге 3, когда T3 снимает свою блокировку элемента А для записи. За шагом 3 следует блокировка А для чтения транзакциями Т1 и Т2 (шаги 4 и 7) и блокировка этого элемента для записи транзакцией Т4 на шаге (12). Таким образом Т1, Т2 и Т4 должны следовать за Т3 и мы строим дуги из Т3 в эти узлы.

Рис.3.17. Граф проверки сериализуемости

В связи с тем, что Т4 снимает блокировку В для записи на шаге 5, а следующую блокировку В для записи устанавливает Т3 строится дуга из Т4 и Т3. Образуется цикл, свидетельствующий о том, что расписание не является сериализуемым.     Как и в модели, приводимой ранее, достаточной гарантией сериализуемости является двухфазный протокол, в соответствии с которым установление блокировок для чтения и записи предшествует всем операциям разблокирования.

Упражнение для самостоятельного выполнения:

Дано расписание 4-х транзакций (рис.3.18). Постройте граф предшествований и определите, является ли это расписание сериализуемым.

N

T1

T2

T3

T4

1

RLOCK A

2

RLOCK A

3

WLOCK B

4

UNLOCK A

5

WLOCK A

6

UNLOCK B

7

RLOCK B

8

UNLOCK A

9

RLOCK B

10

RLOCK A

11

UNLOCK B

12

WLOCK C

13

UNLOCK A

14

WLOCK A

15

UNLOCK A

16

UNLOCK B

17

UNLOCK C

Рис.3.18. Расписание транзакций