Архитектура операционной системы UNIX

         

Отказы при обращениях к страницам - часть 6


Если бит копирования при записи установлен, но страница используется только одним процессом, ядро дает процессу возможность воспользоваться физической страницей повторно. Оно отключает бит копирования при записи и разрывает связь страницы с ее копией на диске (если таковая существует), поскольку не исключена возможность того, что дисковой копией пользуются другие процессы. Затем ядро убирает запись таблицы pfdata из очереди страниц, ибо новая копия виртуальной страницы располагается не на устройстве выгрузки. Кроме того, ядро уменьшает значение счетчика ссылок на страницу в таблице использования области подкачки, и если это значение становится равным 0, освобождает место на устройстве (см. ).

Если запись в таблице страниц указывает на то, что страница недоступна, и ее бит копирования при записи установлен, выступая поводом для отказа системы защиты, допустим, что система при обращении к странице сначала обрабатывает отказ из-за недоступности данных (обратная очередность рассматривается в ). Несмотря на это, программа обработки отказа системы защиты все равно обязана убедиться в доступности страницы, поскольку при установке блокировки на область программа может приостановиться, а "сборщик" страниц тем временем может выгрузить страницу из памяти. Если страница недоступна (бит доступности сброшен), программа немедленно завершит работу и процесс получит отказ из-за недоступности данных. Ядро обработает этот отказ, но процесс вновь получит отказ системы защиты. Более чем вероятно, что заключительный отказ системы защиты будет обработан без каких-либо препятствий и помех, поскольку пройдет довольно значительный период времени, прежде чем страница достаточно "созреет" для выгрузки из памяти. Описанная последовательность событий показана на .

алгоритм pfault /* обработка отказа системы защиты */ входная информация: адрес, по которому получен отказ выходная информация: отсутствует { найти область, запись в таблице страниц, дескриптор дис- кового блока, связанные с адресом, по которому получен отказ, заблокировать область; если (страница недоступна в памяти) перейти на out; если (бит копирования при записи не установлен) перейти на out; /* программная ошибка - сигнал */ если (счетчик ссылок на страничный блок > 1) { выделить новую физическую страницу; скопировать в нее содержимое старой страницы; уменьшить значение счетчика ссылок на старый стра- ничный блок; перенастроить запись таблицы страниц на новую физи- ческую страницу; } в противном случае /* убрать страницу, поскольку она * никем больше не используется */ { если (копия страницы имеется на устройстве выгрузки) освободить место на устройстве, разорвать связь со страницей; если (страница находится в хеш-очереди страниц) убрать страницу из хеш-очереди; } в записи таблицы страниц установить бит модификации, сбросить бит копирования при записи; пересчитать приоритет процесса; проверить, не поступали ли сигналы; out: снять блокировку с области; }

Рисунок 9.25. Алгоритм обработки отказа системы защиты

Рисунок 9.26. Отказ системы защиты из-за установки бита копирования при записи

Перед завершением программа обработки отказа системы защиты устанавливает биты модификации и защиты, но сбрасывает бит копирования при записи. Она пересчитывает приоритет процесса и проверяет, не поступали ли за время ее работы сигналы, предназначенные процессу, в точности повторяя то, что делается по завершении обработки отказа из-за недопустимости данных.

Рисунок 9.27. Взаимодействие отказа системы защиты и отказа из-за недоступности данных




Содержание  Назад  Вперед