Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы / MAKE_posix_creprc_sem_sig.DOC
Скачиваний:
27
Добавлен:
01.05.2014
Размер:
146.94 Кб
Скачать

Назначение и основные сведения

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

обработки исключений (деление на 0, использование неверного адреса и др.),

сообщения об асинхронном событии (об окончании операции ввода/вывода, срабатывании таймера и др.),

организации взаимодействия потоков управления.

Сигналы могут генерироваться (посылаться прикладной программе) как операционной системой, так и прикладной программой.

В системе имеется несколько видов сигналов. Каждому сигналу соответствует уникальное положительное число (номер сигнала). Кроме того, для сигналов определены имена. Использовать номера в явном виде не рекомендуется, так как они могут меняться от одной операционной системы к другой, имена же определены стандартом POSIX.

Возможна как асинхронная, так и синхронная обработка сигналов. В случае асинхронной обработки при поступлении сигнала выполнение потока управления приостанавливается и производится обработка сигнала. В этом случае говорят, что сигнал был доставлен. Говорят, что в промежутке времени между генерацией сигнала и его доставкой или приемом онзадержан. Обычно этот интервал времени не заметен для прикладной программы.

Асинхронная обработка сигналов может быть временно запрещена. Запрет обработки сигналов производится в рамках потока, а не прикладной программы. Каждый поток имеет свою собственную маску сигналов, обработка которых запрещена (заблокирована, замаскирована). Если сигнал пришел в тот момент, когда его обработка запрещена, факт прихода сигнала запоминается. В этом случае сигнал будет обработан, когда обработка сигналов будет вновь разрешена, если сигнал не будет ранее обработан синхронным образом.

Прикладная программа может указать способ обработки сигнала. Например, указать функцию обработки сигнала. Вид обработки сигнала регистрируется в рамках системы, а не потока. Если вид обработки какого-либо сигнала не был определен прикладной программой, то используется стандартная (по умолчанию) реакция на сигнал.

Синхронная обработка сигналов производится с помощью функций sigwait(),sigwaitinfo()илиsigtimedwait(). В этом случае поток приостанавливается до тех пор, пока не придет сигнал. Говорят, что сигнал былпринят, если он был обработан синхронным образом.

Типы и имена сигналов

Сигналы можно разбить на две группы

обычные сигналы,

сигналы реального времени.

Рассмотрим основные отличия сигналов реального времени от обычных сигналов.

Пусть повторный сигнал с тем же именем пришел раньше, чем был обработан предыдущий. В этом случае повторный сигнал реального времени будет поставлен в очередь, а обычный сигнал утерян.

В случае обычного сигнала функция обработки сигнала получает только один аргумент - номер сигнала. В случае сигнала реального времени имеется второй аргумент - значение связанное с сигналом (целое число или указатель). Значение сигнала указывается при порождении сигнала.

signal()- указывает обработчик сигнала

sigaction()- опрашивает и/или указывает обработчик сигнала (POSIX)

pause()- приостанавливает задачу до получения сигнала (POSIX)

kill()- посылает сигнал задаче (POSIX)

raise() - посылает сигнал вызвавшей задаче

sigprocmask()- опрашивает и/или изменяет маску сигналов (POSIX)

sigemptyset() - инициализирует пустую маску (все сигналы выключены) (POSIX)

sigfillset() - инициализирует полную маску (все сигналы включены) (POSIX)

sigaddset() - добавляет сигнал к маске сигналов (POSIX)

sigdelset() - удаляет сигнал из маски сигналов (POSIX)

sigismember() - проверяет наличие сигнала в маске сигналов (POSIX)

#include <signal.h>

Соседние файлы в папке Материалы