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