6.5.6 Освобождение области
6.5.6 Освобождение области
Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение счетчика ссылок на индекс, установленное в алгоритме allocreg. Ядро освобождает все связанные с областью физические ресурсы, такие как таблицы страниц и собственно страницы физической памяти. Предположим, например, что ядру нужно освободить область стека, описанную на Рисунке 6.22. Если счетчик ссылок на область имеет нулевое значение, ядро освободит 7 страниц физической памяти вместе с таблицей страниц.
алгоритм detachreg /* отсоединить область от процесса */
входная информация: указатель на точку входа в частной таблице областей процесса
выходная информация: отсутствует
{
обратиться к вспомогательным таблицам процесса, имеющим отношение к распределению памяти, освободить те из них, которые связаны с областью;
уменьшить размер процесса;
уменьшить значение счетчика ссылок на область;
if (значение счетчика стало нулевым и область не является неотъемлемой частью процесса)
освободить область (алгоритм freereg);
else { /* либо значение счетчика отлично от 0, либо область является неотъемлемой частью процесса */
снять блокировку с индекса (ассоциированного с областью);
снять блокировку с области;
}
}
Рисунок 6.26. Алгоритм отсоединения области
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
3.2.1.3. Освобождение памяти: free()
3.2.1.3. Освобождение памяти: free() Когда вы завершили использование памяти, «верните ее обратно», используя функцию free(). Единственный аргумент является указателем, предварительно полученным с использованием другой функции выделения. Можно (хотя это бесполезно) передать
Освобождение обработчика прерывания
Освобождение обработчика прерывания Для освобождения линии прерывания необходимо вызвать функциюvoid free_irq(unsigned int irq, void *dev_id);Если указанная линия не является совместно используемой, то эта функция удаляет обработчик и запрещает линию прерывания. Если линия запроса на
Освобождение параметров
Освобождение параметров int pthread_mutexattr_destroy(pthread_mutexattr_t* attr);Вызов разрушает ранее применявшийся объект - атрибутную запись мьютекса, после чего она уже не может более использоваться для инициализации мьютекса без предварительного выполнения вызова pthread_mutexattr_init().На этом
Освобождение мьютекса
Освобождение мьютекса int pthread_mutex_unlock(pthread_mutex_t* mutex);Функция pthread_mutex_unlock() освобождает мьютекс, на который ссылается переменная mutex. Вызвавший поток должен быть владельцем мьютекса. Если есть потоки, блокированные в ожидании освобождения мьютекса, то поток с наивысшим
Захват и освобождение ждущей блокировки
Захват и освобождение ждущей блокировки Вызов функций ожидания может производиться только внутри блока захвата и освобождения ждущей блокировки:int pthread_sleepon_lock(void);int pthread_sleepon_unlock(void);Функция захвата pthread_sleepon_lock() возвращает следующие значения:EOK — успешное выполнение;EDEADLK
Освобождение блокировки
Освобождение блокировки int pthread_rwlock_unlock(pthread_rwlock_t* rwl);Функция освобождает захваченный любым образом объект блокировки чтения/записи. Если объект был захвачен в режиме множественного использования (блокировки по чтению), то количество его освобождений должно равняться
Захват и освобождение спинлока
Захват и освобождение спинлока int pthread_spin_lock(pthread_spinlock_t* spinner);int pthread_spin_trylock(pthread_spinlock_t* spinner);Это функции захвата и попытки захвата крутящейся блокировки соответственно. Как и для мьютекса, если объект spinner в момент захвата свободен, то поток, вызвавший одну из этих функций,
4.1.3 Освобождение индексов
4.1.3 Освобождение индексов В том случае, когда ядро освобождает индекс (алгоритм iput, Рисунок 4.4), оно уменьшает значение счетчика ссылок для него. Если это значение становится равным 0, ядро переписывает индекс на диск в том случае, когда копия индекса в памяти отличается от
8.6.2. Освобождение дискового пространства
8.6.2. Освобождение дискового пространства Теперь вы знаете, как определить, сколько места займет на диске устанавливаемый пакет, и каков объем свободного пространства на диске. Рассмотрим, что можно сделать, если свободного места не достаточно. Надо заметить, что при
Создание объектов, предусматривающих освобождение ресурсов
Создание объектов, предусматривающих освобождение ресурсов Поскольку многие неуправляемые ресурсы являются столь "драгоценными", что их нужно освободить как можно быстрее, предлагается рассмотреть еще один подход, используемый для "уборки" ресурсов объекта. В качестве
Создание типов, предусматривающих освобождение ресурсов и финализацию
Создание типов, предусматривающих освобождение ресурсов и финализацию К этому моменту мы с вами обсудили два различных подхода в построении классов, способных освобождать свои внутренние неуправляемые ресурсы. С одной стороны, можно переопределить System.Object.Finalize(), тогда
Освобождение объекта Graphics
Освобождение объекта Graphics Если вы внимательно читали несколько последних страниц, то могли заметить, что в некоторых примерах программного кода непосредственно вызывается метод Dispose() объекта Graphics, тогда как в других примерах этого не делается. Поскольку тип Graphics
5.1.5. Контроль и освобождение совместно используемой памяти
5.1.5. Контроль и освобождение совместно используемой памяти Функция shmctl() возвращает информацию о совместно используемом сегменте и способна модифицировать его. Первым параметром является идентификатор сегмента.Чтобы получить информацию о сегменте, укажите в качестве
5.2.1. Выделение и освобождение семафоров
5.2.1. Выделение и освобождение семафоров Функции semget() и semctl() выделяют и освобождают семафоры, функционируя подобно функциям shmget() и shmctl(). Первым аргументом функции semget() является ключ, идентифицирующий группу семафоров; второй аргумент — это число семафоров в группе;
Освобождение места на диске
Освобождение места на диске Несмотря на внушительные размеры современных жестких дисков, количество свободного места на них имеет тенденцию уменьшаться до нуля, и тогда система сообщит, что свободное место на диске почти закончилось и его необходимо очистить (рис. 8.27).