Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 483 из 715



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

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

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

{

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

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

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

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

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

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

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

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

 }

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

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

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

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

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

 }

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

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

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

out:

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

}

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

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

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

Рисунок 9.27.

|< Пред. 481 482 483 484 485 След. >|

Java книги

Контакты: [email protected]