Система определяет набор сигналов, которые могут быть доставлены процессу. Сигналы в FreeBSD сделаны по образцу аппаратных прерываний. Процесс может указать подпрограмму уровня пользователя в качестве обработчика, которому должен быть доставлен сигнал. Когда генерируется сигнал, его дальнейшее распространение блокируется до тех пор, пока он не будет перехвачен обработчиком. Перехват сигнала включает сохранение контекста текущего процесса и построение нового контекста, в котором будет запущен обработчик. Затем сигнал доставляется обработчику, который может либо аварийно завершить процесс, либо вернуться в выполняющийся процесс (возможно, после установки значения глобальной переменной). Если обработчик возвращается, сигнал разблокируется и может быть сгенерирован (и перехвачен) снова.
В качестве альтернативы процесс может указать, что сигнал должен быть проигнорирован или что должно быть применено определенное ядром действие по умолчанию. Действием по умолчанию для определенных сигналов является завершение процесса. Это завершение может сопровождаться созданием файла дампа ядра, который содержит образ текущей памяти процесса для использования в отладке после завершения программы.
Некоторые сигналы не могут быть перехвачены или проигнорированы. К этим сигналам относятся SIGKILL, который завершает вышедшие из-под контроля процессы, и сигнал управления заданиями SIGSTOP.
Процесс может выбрать, чтобы сигналы доставлялись в специальный стек таким образом, чтобы были возможны сложные манипуляции стеком программы. Например, язык, поддерживающий сопрограммы, должен предоставить стек для каждой сопрограммы. Система времени выполнения языка может выделять эти стеки, разделяя один стек, предоставленный FreeBSD. Если ядро не поддерживает отдельный стек сигналов, пространство, выделенное для каждой сопрограммы, должно быть увеличено на размер, необходимый для перехвата сигнала.
У всех сигналов один и тот же приоритет. Если ожидают несколько сигналов одновременно, порядок, в котором сигналы доставляются процессу, зависит от реализации. Обработчики сигналов работают с сигналом, который явился причиной блокировки их вызова, но могут иметь место еще и другие сигналы. Предусмотрены такие механизмы, чтобы процессы могли защитить критические разделы кода от появления определенных сигналов.
- 11/05/2010 06:08 - Управление памятью внутри ядра
- 10/05/2010 20:06 - Отдельные отображения файла
- 10/05/2010 11:56 - Проектные решения по управлению памятью BSD
- 10/05/2010 05:46 - Управление памятью
- 09/05/2010 22:28 - Группы процессов и сеансы
- 09/05/2010 05:44 - Управление процессами
- 08/05/2010 19:43 - Службы ядра
- 08/05/2010 13:45 - Организация ядра
- 08/05/2010 03:47 - Ядро
- 07/05/2010 22:30 - Средства FreeBSD и ядро