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

Java книги

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