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