
Я читаю документацию Linux о «сигналах», и у меня в голове все еще вертятся следующие вопросы:
1) Обработчик «сигнала»исполнениевыполняется, когда «целевой» процесс получает свойтокен исполненияизПланировщик?
2) Или обработчик «сигнала»исполнениепроисходит вчто бы нипроцесс «контекст» происходитбыть исполняющимкогда был отправлен «сигнал»? (Тот же стиль, что и у аппаратного ISR).
3) Что насчет выполнения процесса?приоритеты? Они теряются, когда имеют дело с «сигналами»?
решение1
1) Обработчик сигнала выполняется при следующемцелевой процессвозвращается из режима ядра в пользовательский режим.
Это происходит либо когда процесс запланирован для повторного запуска после аппаратного прерывания (и он еще не был запущен в режиме ядра), либо когда процесс возвращается из системного вызова (на некоторых архитектурах это одно и то же).
В обычном режиме работы при выходе из режима ядра ваш процесс просто вернется к следующей инструкции после точки, в которой он изначально вышел из пользовательского режима.
Однако, если сигнал ожидает ваш процесс, ядро будетпереписатьконтекст ваших процессов таким образом, что возврат в пользовательский режим вместо этого перейдет к первой инструкции вашего обработчика сигналов, а ваш стек будет изменен так, чтобы он выглядел так, как будто вы выполнили «специальный» вызов подпрограммы обработчика сигналов в точке, где вы изначально вышли из пользовательского режима (возврат из этого «специального» вызова подпрограммы включает в себя выполнение системного вызова для восстановления исходного состояния).
Подробности читайте здесьэтот,этотиэтот.
Так«целевой» процесс может получить свойтокен исполненияизПланировщиклюбое количество раз, прежде чем обработчик сигнала будет окончательно выполнен (если по какой-то причине он останется в режиме ядра).
2) Нет — обработчик сигнала будет выполняться только в контексте пользовательского режима вашего процесса.
3) На самом деле, казни не существует.приоритетыв системе с разделением времени, такой как Linux, если не считатьхорошийценность процесса, поэтому вы не можетесметатьчто-то, чего там нет.
Все усложняется нитями и так называемымив реальном времениполитики планирования, поэтому комментарии выше действительны только для однопоточных процессов, работающих с политиками планирования не в реальном времени (единственный вид процесса, который существовалв старые добрые времена:-).