Архитектура операционной системы UNIX

       

Освобождение области


Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение счетчика ссылок на индекс, установленное в алгоритме allocreg. Ядро освобождает все связанные с областью физические ресурсы, такие как таблицы страниц и собственно страницы физической памяти. Предположим, например, что ядру нужно освободить область стека, описанную на . Если счетчик ссылок на область имеет нулевое значение, ядро освободит 7 страниц физической памяти вместе с таблицей страниц.

алгоритм detachreg /* отсоединить область от процесса */ входная информация: указатель на точку входа в частной таблице областей процесса выходная информация: отсутствует { обратиться к вспомогательным таблицам процесса, имеющим отношение к распределению памяти, освободить те из них, которые связаны с областью; уменьшить размер процесса; уменьшить значение счетчика ссылок на область; если (значение счетчика стало нулевым и область не явля- ется неотъемлемой частью процесса) освободить область (алгоритм freereg); в противном случае /* либо значение счетчика отлично от 0, либо область является не- отъемлемой частью процесса */ { снять блокировку с индекса (ассоциированного с об- ластью); снять блокировку с области; } }

Рисунок 6.26. Алгоритм отсоединения области



Содержание раздела