Intereting Posts
Проблема ввода @ символа в командной строке под HP-UX Почему Vim не может открыть текстовый файл размером 100 МБ, если у меня 16 ГБ оперативной памяти? Требуются ли оба смягчения, когда audit2allow предлагает и restorecon, и правило принудительного применения одного типа? Как узнать, подлинность консоли? Как отправить аудиовыход через фильтр верхних частот в ALSA? Как заставить GNOME 3 работать в Debian Wheezy под VMware? Серийный порт RaspberryPi Как извлечь данные после поля в файле ошибка при загрузке общих библиотек. невозможно открыть общий объектный файл: нет такого файла или каталога systemd: network-online.target достигается до network.target Блокировка определенного внешнего IP-порта: соединение портов в RedHat? Найти символы в файле Что делает этот expr в сценарии оболочки? Перепишите команду find, которая использует sed -i для AIX Открытый LDAP предназначен для работы с командой passwd для Linux?

Сведения об исполнении сигнала

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

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

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

3) Как насчет приоритетов процесса? Снимаются ли они при работе с «сигналами»?

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

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

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

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

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

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

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

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


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