Атомарные шаги
Работу пользователя с ФС можно представить в виде последовательности атомарных шагов. Атомарность шага состоит в том, что видимое другим пользователем состояние ФС меняется только при успешном завершении атомарного шага. Другие варианты окончания шага - "мягкие аварии", тупики - не должны менять видимое другим пользователем остояние объектов ФС. Внутри атомарного шага разрешены все операции над объектами ФС: модификация файлов, уничтожение файлов, создание новых объектов - файлов и справочников.
Кроме того, пользователь может сам дать команду ВОЗВРАТ, по которой произойдет возврат состояния объектов ФС к началу атомарного шага.
Для поддержки механизма атомарных шагов ФС представляет пользователю дополнительно три команды: НАЧАЛО, КОНЕЦ, ВОЗВРАТ.
Командой НАЧАЛО начинается атомарный шаг, который будет длиться либо до команды КОНЕЦ, либо будет закончен командой ВОЗВРАТ, по которой из объектов ФС будут изъяты все изменения, занесенные с начала атомарного шага.
Данный механизм служит основой для реализации контрольных точек в ОС ОМ. Задание, выполняемое в ОС ОМ, может целиком выполняться в рамках одного атомарного шага; отдельные шаги задания могут быть приравнены к атомарным шагам или шаг задания может быть разбит на последовательность атомарных шагов.
Атомарный режим не является единственным необходимым, поскольку есть такие применения, которые требуют в случае аварии сохранить состояние файла, наиболее близкое к моменту аварии (например, при использовании интерактивного редактора). Поэтому выбор режима - атомарный или обычный - зависит от пользователя.
Механизм атомарных шагов в ФС ОС ОМ реализуется следующим образом.
При открытии файла на модификацию внутри атомарного шага на диске или через "окно" в массовой памяти ФС выполняет следующие действия:
· копирует файл на другой диск;
· устанавливает таблицу отображения файла на диск в задаче ОБМЕНМД на новое место расположения файла;
· оставляет в справочнике на диске и в массовой памяти исходную таблицу отображения.
При модификации файла запросы на расширение удовлетворяются посредстовм текущей таблицы распределения и фиксируются в отображении файла в задаче ОБМЕНМД. До закрытия файла работа атомарных шагов ничем не отличается от обычных. Различия начинают проявляться с момента закрытия.
Закрытие файла не снимает монопольные синхрозахваты до конца задачи или до конца атомарного шага. Здесь используется двухфазный протокол синхронизации. При закрытии файла из таблицы активных файлов изымается элемент, относящийся к данному файлу и содержащий таблицу отображения файла. Эта таблица отображения заносится в элемент справочника, описывающего данный файл, в виде дублирующей таблицы отображения. До конца атомарного шага или до конца задания в элементе справочника в массовой памяти будут храниться две таблицы отображения: одна описывает отображение на исходный файл, другая - на дубль, с которым и происходит текущая работа. Последующие открытия и модификации файла будут проходить с файлом-дублем. Модификации данного файла могут приводить и к увеличению его размера, и к уменьшению. Все изменения, проходящие с дублем, отражаются в текущей таблице распределения (уничтожение и создание файлов рассмотрим дополнительно).
Теперь опишем, что происходит при конце атомарного шага. Обработка конца атомарного шага происходит строго синхронно. Поскольку синхрозахваты сохраняются до конца атомарного шага и даже после операции закрытия, ФС известны все файлы, модифицированные за время выполнения атомарного шага. Формируется область согласованности, состоящая из имен справочников, в которых описаны модифицированные файлы. Вырабатывается уникальный идентификатор конца атомарного шага.
Затем происходит обработка элементов справочников модифицированных файлов, которая заключается в замене таблиц отображения: исходная таблица отображения заменяется на дубль.
Все области, описанные в исходной таблице отображений, освобождаются и в текущей таблице распределения, и в исходной таблице распределения. Области, описанные в таблице -дубле, отмечаются как занятые в исходной таблице распределения.
После обработки элементов справочников исходная таблица распределения, в которой произошли изменения в результате работы данного атомарного шага, помечается уникальным идентификатором конца атомарного шага и отображается на диск с сохранением предыдущей таблицы распределения.
После отображения таблицы распределения памяти на диск отображается последовательно все справочники, снабженные уникальными идентификаторами. Все эти справочники перечислены в области согласованности. Отображение происходит сначала в один дубль справочника, затем во второй.
Если авария произойдет во время выполнения атомарного шага либо при обработке конца шага до отображения всех справочников в первый дубль, стандартные действия по инициации ФС, описанные в предыдущем разделе, восстановят состояние файлов, в котором они находились на момент начала шага. Если авария происходит после отображения всех справочников в первый дубль, состояние файлов будет новым.
Создание файлов сводится к модификации файла с пустой исходной таблицей отображения. Более интересно уничтожение.
После выполнения уничтожения файла внутри атомарного шага вычеркивание элемента из справочника, относящегося к уничтожаемому файлу, не производится, и синхрозахват на данный файл сохраняется. Память в соответствии с дублирующей таблицей отображения освобождается с коррекцией таблицы распределения. Дублирующая таблица отображения становится пустой. Ситуация, когда при попытке создания файла в справочнике уже присутствует элемент с указанным именем, не всегда рассматривается как коллизия имен. Осуществляется дополнительная проверка: есть ли монопольный синхрозахват на этот файл и каково состояние таблицы-дубля отображения. Если синхрозахват есть и от того же атомарного шага, а таблица-дубль отображения нулевая, то не возникнет коллизия имен.Во всех остальных случаях возникает коллизия.
По такой же схеме, но более эффективно обрабатываются файлы в массовой памяти. Для таких файлов не требуется начальное создание дубля. После закрытия файла он отображается на новое место на диске. При последующих открытиях файл будет браться с этого нового места, при закрытиях - заноситься туда же. По концу атомарного шага исходное состояние файла будет заменено новым.
Поскольку основной режим обработки фалов - перенос файлов в массовую память, то предлагаемый метод не имеет накладных расходов, влияющих на пропускную способность файловой системы.