Архитектура операционной системы 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 След. >|