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

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

алгоритм pfault /* обработка отказа системы защиты */

входная информация: адрес, по которому получен отказ

выходная информация: отсутствует

{

 найти область, запись в таблице страниц, дескриптор дискового блока, связанные с адресом, по которому получен отказ, заблокировать область;

 if (страница недоступна в памяти) goto out;

 if (бит копирования при записи не установлен) goto out; /* программная ошибка — сигнал */

 if (счетчик ссылок на страничный блок › 1) {

  выделить новую физическую страницу;

  скопировать в нее содержимое старой страницы;

  уменьшить значение счетчика ссылок на старый страничный блок;

  перенастроить запись таблицы страниц на новую физическую страницу;

 }

 else { /* убрать страницу, поскольку она никем больше не используется */

  if (копия страницы имеется на устройстве выгрузки)

   освободить место на устройстве, разорвать связь со страницей;

  if (страница находится в хеш-очереди страниц)

   убрать страницу из хеш-очереди;

 }

 в записи таблицы страниц установить бит модификации, сбросить бит копирования при записи;

 пересчитать приоритет процесса;

 проверить, не поступали ли сигналы;

out:

 снять блокировку с области;

}

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

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

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

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

<p>9.2.4 Замещение страниц на менее сложной технической базе</p>
Перейти на страницу:

Все книги серии Серия книг по программному обеспечению издательства prentice hall

Похожие книги