Операционная система SVR4 предлагает набор системных вызовов [11], которые обеспечивают универсальные возможности обработки сигналов как ОС SVR3, так и BSD, а также поддерживается устаревший механизм ненадежных сигналов.
Также может иметь смысл заглянуть на сайт grant-avto.ru, ведь именно там можно узнать много нового на тему http://www.grant-avto.ru/gazel.html. Тема купить газель может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт grant-avto.ru, и тема купить газель начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема купить газель очень подробно представлена на сайте grant-avto.ru. Трудно найти более детальное освещение темы купить газель чем это сделано на сайте grant-avto.ru. Спасибо сайту grant-avto.ru за такое доскональное преподнесение темы купить газель.
Ниже представлены основные функции SVR4 для работы с сигналами.
♦ sigprocmask(how, setp, osetp);
♦ Аргумент setp используется для изменения маски блокируемых сигналов. Если how имеет значение SIG_BL0CK, то маска setp объединяется операцией ИЛИ с существующей. Если how определено как SIG_ UNBLOCK, то сигналы, заданные в setp, деблокируются по существующей маске блокированных сигналов. Если how равняется SIG_SETMASK, то происходит замена текущей маски на набор, определенный в setp. При возврате из функции osetp содержит значение маски перед модификацией.
♦ sigaltstack(stack, old_stack);
♦ Задает новый стек stack для обработки сигналов. Альтернативный стек (если он требуется) необходимо определять перед установкой обработчика. Остальные обработчики используют стек, заданный по умолчанию. После возврата из функции в переменной old_stack содержится указатель на предыдущий альтернативный стек.
♦ sigsuspend(sigmask);
♦ Устанавливает маску блокируемых сигналов в значение sigmask и переводит процесс в состояние сна до тех пор, пока этому процессу не будет отправлен сигнал, который не игнорируется и не заблокирован. Если такой сигнал был послан и при изменении маски он будет разблокирован, произойдет немедленный выход из функции.
♦ sigpending(setp);
♦ Возвращает в setp набор сигналов, ожидающих процесс. Вызов не производит никаких изменений в состоянии сигналов и используется только для получения информации.
♦ sigsendset(procset, sig);
♦ Расширенная версия kill. Посылает сигнал sig набору процессов, заданных в procset.
♦ sigaction(signo, act, oact);
♦ Определяет обработчик для сигнала signo. Является аналогом вызова sigvec в ОС BSD. Аргумент act указывает на структуру sigaction, содержащую диспозицию сигналов (SIG_IGN, SIG_DFL или адрес обработчика), маску, ассоциированную с сигналом (аналогичную маске вызова sigvec), а также один или несколько следующих флагов:
SA_N0CLDST0P He генерировать сигнал SIGCHLD, когда процесс-потомок приостановлен
SA_RESTART Автоматический рестарт системного вызова при прерывании его сигналом
SA_ONSTACK Обработка сигнала с альтернативным стеком, если такой стек был указан через sigaltstack
SA_NOCLDWAIT Используется только с SIGCHLD. Просит систему не создавать процессы-зомби, если потомки вызывающего процесса завершают свою работу. Если процесс далее вызовет wait, то он будет находиться в режиме ожидания до тех пор, пока не завершат работу все его потомки
SA_SIGINFO Обеспечивает дополнительную информацию
для обработчика сигнала. Используется для обработки
аппаратных исключений и т. д.
SA_NODEFER Позволяет не блокировать автоматически сигнал в течение выполнения его обработчика
SA_RESETHAND Сбрасывает действия на заданные по умолчанию перед вызовом обработчика
♦ Флаги SA_NODEFER и SA_RESETHAND используются для совместимости с изначальной реализацией механизма ненадежных сигналов. Во всех случаях переменная oact возвращает данные, установленные перед вызовом sigaction.
♦ Интерфейс совместимости
♦ Для обеспечения совместимости с предыдущими версиями система SVR4 также поддерживает вызовы signal, sigset, sighold, sigrelse, sigignore и sigpause. Системы, не требующие совместимости на бинарном уровне, могут реализовывать эти вызовы в виде библиотечных функций.
Все перечисленные системные вызовы (кроме указанных в последнем пункте списка) полностью удовлетворяют стандарту POSIX.1 по имени, передаваемым параметрам и семантике.
Реализация сигналов
Для эффективной реализации сигналов ядру необходимо содержать некоторое состояние в области и и в структуре ргос. В этом разделе описывается реализация сигналов в системе SVR4, которая отличается от аналогичного набора ОС BSD именами некоторых переменных и функций. Область и содержит информацию, требующуюся для правильного запуска обработчиков сигналов, которую составляют нижеперечисленные поля области и.
Структура ргос содержит определенные поля, относящиеся к созданию и отправке сигналов, в том числе:
p_cursig
P_sig
p_hold
pjgnore
Текущий сигнал, в данный момент обрабатываемый Маска ожидающих сигналов Маска блокируемых сигналов Маска игнорируемых сигналов
Рассмотрим далее реализации на уровне ядра различных функций, относящихся к доставке сигналов.
После вырабатывания сигнала ядро проверяет структуру ргос процесса, которому этот сигнал предназначен. Если сигнал необходимо проигнорировать, то ядро на этом завершит обработку, не предпринимая никаких действий. В иных случаях он будет добавлен в набор ожидающих сигналов, расположенный в поле р cursig1. Так как p_cursig2 является всего лишь битовой маской, где каждому сигналу отводится только один бит, ядро не может записать в нее несколько повторных экземпляров одного сигнала. Следовательно, процесс будет знать только об одном приходе ожидающего сигнала.
Если процесс находится в прерываемом сне и сигнал не заблокирован, то ядро системы разбудит такой процесс для получения сигнала. Более того, сигналы управления заданиями, такие как SI6ST0P или SI6C0NT, напрямую приостанавливают или продолжают функционирование процесса без проведения их доставки.
Опубликовал katy
July 06 2015 15:42:53 ·
0 Комментариев ·
3264 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.