Внутреннее устройство ядра Linux 2.4

Newary()


newary() обращается к для распределения памяти под новый набор семафоров. Она распределяет объем памяти достаточный для размещения дескриптора набора и всего набора семафоров. Распределенная память очищается и адрес первого элемента набора семафоров передается в . Функция резервирует память под массив элементов нового набора семафоров и инициализирует ( ) набор. Глобальная переменная used_sems увеличивается на количество семафоров в новом наборе и на этом инициализация данных ( ) для нового набора завершается. Дополнительно выполняются следующие действия:

  • В поле sem_base заносится адрес первого семафора в наборе.
  • Очередь sem_pending объявляетяс пустой.
  • Все операции, следующие за вызовом , выполняются под глобальной блокировкой семафоров. После снятия блокировки вызывается (через sem_buildid()). Эта функция создает уникальный ID (используя индекс дескриптора набора семафоров), который и возвращается в вызывающую программу.



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