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

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



алгоритм ialloc /* выделение индекса */

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

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

{

 do  {

  if (суперблок заблокирован)  {

   sleep (пока суперблок не освободится);

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

  }

  if (список индексов в суперблоке пуст) {

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

  искать на диске свободные индексы до тех пор, пока суперблок не заполнится или пока не будут найдены все свободные индексы (алгоритмы bread и brelse);

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

   возобновить выполнение процесса (как только суперблок освободится);

   if (на диске отсутствуют свободные индексы)   return (нет индексов);

   запомнить индекс с наибольшим номером среди найденных для последующих поисков свободных индексов;

  }

  /* список индексов в суперблоке не пуст */

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

  получить индекс (алгоритм iget);

  if (индекс после всего этого не свободен) { /*!!! */

   переписать индекс на диск;

   освободить индекс (алгоритм iput);

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

  }

  /* индекс свободен */

  инициализировать индекс;

  переписать индекс на диск;

  уменьшить счетчик свободных индексов в файловой системе;

  return (индекс);

 }

}

Рисунок 4.12. Алгоритм назначения новых индексов

На Рисунке 4.12 приведен алгоритм ialloc назначения новых индексов.

|< Пред. 125 126 127 128 129 След. >|

Java книги

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