Подробности выполнения сигнала

Подробности выполнения сигнала

Я читаю документацию Linux о «сигналах», и у меня в голове все еще вертятся следующие вопросы:

1) Обработчик «сигнала»исполнениевыполняется, когда «целевой» процесс получает свойтокен исполненияизПланировщик?

2) Или обработчик «сигнала»исполнениепроисходит вчто бы нипроцесс «контекст» происходитбыть исполняющимкогда был отправлен «сигнал»? (Тот же стиль, что и у аппаратного ISR).

3) Что насчет выполнения процесса?приоритеты? Они теряются, когда имеют дело с «сигналами»?

решение1

1) Обработчик сигнала выполняется при следующемцелевой процессвозвращается из режима ядра в пользовательский режим.

Это происходит либо когда процесс запланирован для повторного запуска после аппаратного прерывания (и он еще не был запущен в режиме ядра), либо когда процесс возвращается из системного вызова (на некоторых архитектурах это одно и то же).

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

Однако, если сигнал ожидает ваш процесс, ядро ​​будетпереписатьконтекст ваших процессов таким образом, что возврат в пользовательский режим вместо этого перейдет к первой инструкции вашего обработчика сигналов, а ваш стек будет изменен так, чтобы он выглядел так, как будто вы выполнили «специальный» вызов подпрограммы обработчика сигналов в точке, где вы изначально вышли из пользовательского режима (возврат из этого «специального» вызова подпрограммы включает в себя выполнение системного вызова для восстановления исходного состояния).

Подробности читайте здесьэтот,этотиэтот.

Так«целевой» процесс может получить свойтокен исполненияизПланировщиклюбое количество раз, прежде чем обработчик сигнала будет окончательно выполнен (если по какой-то причине он останется в режиме ядра).

2) Нет — обработчик сигнала будет выполняться только в контексте пользовательского режима вашего процесса.

3) На самом деле, казни не существует.приоритетыв системе с разделением времени, такой как Linux, если не считатьхорошийценность процесса, поэтому вы не можетесметатьчто-то, чего там нет.


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

Связанный контент