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

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



алгоритм getblk

входная информация: номер файловой системы номер блока

выходная информация: буфер, который можно использовать для блока

{

 do if (буфер не найден)  {

  if (блок в хеш-очереди)   {

   if (буфер занят) { /* случай 5 */

    sleep (до освобождения буфера);

    continue; /* цикл с условием продолжения */

   }

   пометить буфер занятым; /* случай 1 */

   удалить буфер из списка свободных буферов;

   return буфер;

  }

  else { /* блока нет в хеш-очереди */

   if (в списке нет свободных буферов) { /*случай 4*/

    sleep (до освобождения любого буфера);

    continue; /* цикл с условием продолжения */

   }

   удалить буфер из списка свободных буферов;

   if (буфер помечен для отложенной переписи) { /* случай 3 */

    асинхронная перепись содержимого буфера на диск;

    continue; /* цикл с условием продолжения */

   }

   /* случай 2 — поиск свободного буфера */

   удалить буфер из старой хеш-очереди;

   включить буфер в новую хеш-очередь;

   return буфер;

  }

 }

}

Рисунок 3.4. Алгоритм выделения буфера

Рисунок 3.5.

|< Пред. 77 78 79 80 81 След. >|

Java книги

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