Как работают сигналы

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

Если процесс посылает сигнал другому процессу, используя, например, функцию libc.

1-может ли этот процесс нормально посылать сигнал не заходя в пространство ядра или он должен заходить в пространство ядра когда хочет послать сигнал?

2-и если сначала нужно перейти к ядру, какие шаги для этого предпринимаются?

3-где эти обработчики сигналов? существуют ли они в пространстве пользователя или в пространстве ядра, и как насчет обработчика сигналов по умолчанию?

4-Когда процесс получает сигнал? должен ли он пройти через ядро, чтобы выполнить обработчик сигнала?


person user3718463    schedule 25.08.2014    source источник
comment
если бы обработчик сигнала приложения находился в ядре, то в любой системе unix, по сути, была бы НУЛЕВАЯ безопасность, поскольку каждое приложение могло бы вводить код в пространство ядра, просто сделав его обработчиком сигнала. фактическая механика отправки сигнала находится в ядре, но фактический обработчик остается там, где должен - в пользовательском пространстве.   -  person Marc B    schedule 25.08.2014
comment
Я знаю, что большинство обработчиков сигналов существуют в пользовательском пространстве, но есть ли исключения?   -  person user3718463    schedule 25.08.2014
comment
Понятия не имею, используется ли сигнал внутри ядра. Вероятно, да, но я не уверен, насколько это необходимо, поскольку сигналы больше предназначены для межпроцессного взаимодействия, чем для внутрипроцессного.   -  person Marc B    schedule 25.08.2014
comment
Я думаю, что сигнал прерывания таймера будет в ядре.   -  person Dan    schedule 26.08.2014


Ответы (1)


  • 1 Отправка сигнала в конечном итоге выполняется системным вызовом. Все системные вызовы выполняются ядром.

  • 2 Не уверен, насколько глубоко вы хотите пойти. Первый шаг — чтобы ядро ​​удостоверилось, что вам разрешено отправлять сигнал, а последний — чтобы ядро ​​либо обработало себя, либо доставило сигнал целевому процессу.

  • 3 Большинство обработчиков сигналов находятся в пространстве пользователя, кроме SIGSTOP и SIGKILL, которые учитываются ядром.

  • 4 Нет, такого требования нет. Процесс либо игнорирует, либо обрабатывает сигнал. Обработчик либо стандартный, либо настраиваемый.

person jlliagre    schedule 25.08.2014
comment
хорошо, как работают системные вызовы signal и sigaction, если они не пишут обработчик сигнала в ядро - person user3718463; 26.08.2014
comment
Не уверен, что вы имеете в виду под записью обработчика сигнала в ядро. Обработчик сигнала остается в пространстве пользователя, это код пользовательского пространства, а не ядра. И signal, и sigaction обновляют таблицу, которая является частью контекста процесса. Сигнал, отправленный процессу, также сохраняется в контексте этого процесса. Когда планировщик собирается вернуть ЦП процессу, он проверяет, нужно ли доставлять сигнал. В таком случае пользовательский обработчик может выполняться целевым процессом. - person jlliagre; 26.08.2014