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

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

Если список в суперблоке не полон, номер вновь освобожденного блока включается в этот список. Если, однако, список полон, вновь освобожденный блок становится связным блоком; ядро переписывает в него список из суперблока и копирует блок на диск. Затем номер вновь освобожденного блока включается в список свободных блоков в суперблоке. Этот номер становится единственным номером в списке.

На Рисунке 4.20 показана последовательность операций alloc и free для случая, когда в исходный момент список свободных блоков содержал один элемент. Ядро освобождает блок 949 и включает номер блока в список. Затем оно выделяет этот блок и удаляет его номер из списка. Наконец, оно выделяет блок 109 и удаляет его номер из списка. Поскольку список свободных блоков в суперблоке теперь пуст, ядро снова наполняет список, копируя в него содержимое блока 109, являющегося следующей связью в списке с указателями. На Рисунке 4.20(г) показан заполненный список в суперблоке и следующий связной блок с номером 211.

алгоритм alloc /* выделение блока файловой системы */

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

выходная информация: буфер для нового блока

{

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

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

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

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

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

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

|< Пред. 134 135 136 137 138 След. >|

Java книги

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