Пожалуйста, поправьте меня, если я ошибаюсь. Вот мое понимание сигналов:
Насколько я знаю, генерация сигнала
и сигнал доставки 2 разных
вещи. Для того, чтобы генерировать сигнал,
ОС просто устанавливает немного в битаррай
поддерживается в управлении процессом
Блок (ПП) процесса. Каждый бит
соответствует определенному сигналу,
и когда бит установлен, это означает, что
сигнал, соответствующий биту
в ожидании.
Доставка: Перед передачей контроля
вернуться к процессу в режиме пользователя,
Ядро всегда проверяет ожидающий
сигналы для этого процесса. Эта проверка
должно произойти в пространстве ядра, потому что
некоторые сигналы никогда не могут быть проигнорированы
процесс, а именно SIGSTOP и SIGKILL.
Значит ли это, что сигналы могут быть доставлены процессу только тогда, когда ядро планирует этот процесс, т.е. выделяет ему ЦП? Может ли процесс получить сигнал, когда он фактически выполняется на процессоре? Если это так, как это возможно, т.е. как процесс узнает, что сигнал ожидает его (так как он выполняется в режиме пользователя и не может получить доступ к печатной плате)
Скажем, есть многопроцессорная машина, и поэтому существует реальный параллелизм, т.е. одновременно выполняется несколько процессов. Процесс P1 выполняется на процессоре 1, а процесс P2 выполняется на процессоре 2, и теперь процесс P2 (имеющий достаточные привилегии) отправляет сигнал процессу P1. Будет ли этот сигнал доставлен в P1 прямо сейчас, или же он будет доставлен после того, как P1 по какой-то причине освободит ЦП и будет снова перенесен на более позднее время ядром, а затем этот сигнал будет доставлен процессу P1.
Пожалуйста, не говорите, что этот вопрос зависит от реализации. Если вы обнаружите, что правильный ответ определяется реализацией, тогда я ищу ответы в Linux, FreeBSD или любой * nix-платформе, для которой у вас есть знания.
Большое спасибо за вашу помощь и терпение :) 1015 *
Привет
Лали