Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
476 из 715
23), считывает в нее с устройства выгрузки содержимое виртуальной страницы и перенастраивает запись таблицы страниц на страницу с номером 1776. В завершение ядро корректирует дескриптор дискового блока, делая указание о том, что страница загружена, а также запись таблицы pfdata, отмечая, что на устройстве выгрузки в блоке с номером 847 содержится дубликат виртуальной страницы.
алгоритм vfault /* обработка отказа из-за отсутствия (недоступности) данных */
входная информация: адрес, по которому получен отказ
выходная информация: отсутствует
{
найти область, запись в таблице страниц, дескриптор дискового блока, связанные с адресом, по которому получен отказ, заблокировать область;
if (адрес не принадлежит виртуальному адресному пространству процесса) {
послать сигнал (SIGSEGV: нарушение сегментации) процессу;
goto out;
}
if (адрес указан неверно) goto out;/* возможно, процесс находился в состоянии приостанова */
if (страница имеется в кэше) {
убрать страницу из кэша;
поправить запись в таблице страниц;
do while (содержимое страницы не станет доступным) /* другой процесс получил такой же отказ, но раньше */
sleep;
}
else { /* страница отсутствует в кэше */
назначить области новую страницу;
поместить новую страницу в кэш, откорректировать запись в таблице pfdata;
if (страница ранее не загружалась в память и имеет пометку "обнуляемая при обращении")
очистить содержимое страницы;
else {
считать виртуальную страницу с устройства выгрузки
|< Пред. 474 475 476 477 478 След. >|