O Torvalds Linus

Сайт о *nix системах и всем что с ними связано

Новую голову очереди ожидания можно создать с помощью макроса

DECLARE_WAIT_QUEUE_HEAD (паше), КОТОрЫЙ СТаТИЧеСКИ объявляет НОВуЮ Переменную с именем паше в качестве головы очереди ожидания и инициализирует ее ПОЛЯ lock И task list. Функция init waitqueue head () может быть ИСпользована для инициализации головы очереди ожидания, для которой переменная была выделена динамически.

ФуНКЦИЯ init waitqueue entry (q,p) инициализирует Структуру q ТИПа wait queue t Следующим образом:

q ->flags = 0; q ->task = р;

q ->func = default_wake_function;

He эксклюзивный процесс p будет разбужен функцией defauit_wake_ function о, которая является интерфейсной функцией для try_to_wake_up().

Read the rest of this entry »

Очереди ожидания

Mar-11-2012 By root

Очереди ожидания по-разному применяются в ядре; в частности, они используются при обработке прерываний, синхронизации процессов и в хронометрировании. Некоторое событие, например, завершится дисковая операция, освободится системный ресурс или истечет заданный интервал времени. Очереди ожидания реализуют условное ожидание событий: процесс, которому нужно ждать наступления какого-то события, встает в соответствующую очередь и освобождает процессор.

Поскольку очереди ожидания модифицируются обработчиками прерываний и основными функциями ядра, двунаправленные списки должны быть защищены от попыток одновременного обращения, которые могут привести к непредсказуемым результатам. Синхронизация достигается с помощью спин – блокировки lock, хранящейся в голове очереди. Поле task list является головой списка ожидающих процессов.

Read the rest of this entry »