Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект ОС(темы1_5).DOC
Скачиваний:
97
Добавлен:
27.05.2015
Размер:
1.81 Mб
Скачать

5.9.2 Протоколирование транзакций

Проблемы, связанные с восстановлением файловой системы, могут быть решены при помощи техники протоколирования транзакций, которая сводится к следую­щему. В системе должны быть определены транзакции {transactions) — недели­мые работы, которые не могут быть выполнены частично. Они либо выполняют­ся полностью, либо вообще не выполняются.

Модель неделимой транзакции пришла из бизнеса. Пусть, например, идет пере­говорный процесс двух фирм о покупке-продаже некоторого товара. В процессе переговоров условия договора могут многократно меняться, уточняться. Пока до­говор еще не подписан обеими сторонами, каждая из них может от него отказать­ся. Но после подписания контракта сделка (транзакция) должна быть выполнена от начала и до конца. Если же контракт не подписан, то любые действия, кото­рые были уже проделаны, отменяются или объявляются недействительными.

В файловых системах такими транзакциями являются операции ввода-вывода, изменяющие содержимое файлов, каталогов или других системных структур файловой системы (например, индексных дескрипторов ufs или элементов FAT). Пусть к файловой системе поступает запрос на выполнение той или иной опера­ции ввода-вывода. Эта операция включает несколько шагов, связанных с созда­нием, уничтожением и модификацией объектов файловой системы. Если все подоперации были благополучно завершены, то транзакция считается выполнен­ной. Это действие называется фиксацией (committing) транзакции. Если же одна или более подопераций не успели выполниться из-за сбоя питания или краха ОС, тогда для обеспечения целостности файловой системы все измененные в рамках транзакции данные .файловой системы должны быть возвращены точно в то состояние, в котором они находились до начала выполнения транзакции.

Так, например, транзакцией может быть представлена операция удаления файла. Действительно, для целостности файловой системы необходимо, чтобы все тре­буемые при выполнении данной операции изменения каталога и таблицы рас­пределения дисковой памяти были сделаны в полном объеме. Либо, если во вре­мя операции произошел сбой, каталог и таблица распределения памяти должны быть приведены в исходное состояние.

С другой стороны, в файловой системе существуют операции, которые не изме­няют состояния файловой системы и которые вследствие этого нет необходимо­сти рассматривать как транзакции. Примерами таких операций являются чтение файла, поиск файла на диске, просмотр атрибутов файла.

Незавершенная операция с диском несет угрозу целостности файловой системы. Каким же образом файловая система может реализовать свойство транзакций «все или ничего»? Очевидно, что решение в этом случае может быть одно — не­обходимо протоколировать (запоминать) все изменения, происходящие в рам­ках транзакции, чтобы на основе этой информации в случае прерывания тран­закции можно было отменить все уже выполненные подоперации, то есть сделать так называемый откат транзакции.

В файловых системах с кэшированием диска для восстановления системы после сбоя кроме отката незавершенных транзакций необходимо выполнить дополни­тельное действие — повторение зафиксированных транзакций. Когда происхо­дит сбой по питанию или крах ОС, все данные, находящиеся в оперативной памяти, теряются, в том числе и модифицированные блоки данных, которые ме-неджер дискового кэша не успел вытолкнуть на диск. Единственный способ вос­становить утерянные изменения данных — это повторить все завершенные тран­закции, которые участвовали в модификации этих блоков. Чтобы обеспечить возможность повторения транзакций, система должна включать в протокол не только данные, которые могут быть использованы для отката транзакции, но и данные, которые позволят в случае необходимости повторить всю транзакцию.1

Для восстановления файловой системы используется упреждающее протоколи­рование транзакций. Оно заключается в том, что перед изменением какого-либо блока данных на диске или в дисковом кэше производится запись в специаль­ный системный файл — журнал транзакций (log file), где отмечается, какая тран­закция делает изменения, какой файл и блок изменяются и каковы старое и новое значения'изменяемого блока. Только после успешной регистрации всех подопера­ций в журнале делаются изменения в исходных блоках. Если транзакция преры­вается, то информация журнала регистрации используется для приведения фай­лов, каталогов и служебных данных файловой системы в исходное состояние, то есть производится откат. Если транзакция фиксируется, то и об этом делается запись в Журнал регистрации, но новые значения измененных данных сохраня­ются в журнале еще некоторое время, чтобы сделать возможным повторение тран­закции, если это потребуется.