Как процесс, выполняющийся в пространстве ядра, узнает о возникновении неожиданных (асинхронных) событий?

У меня есть два вопроса:

1) Процесс ядра. Когда процесс выполняется в режиме ядра, он не получает никаких сигналов.

Вместо этого процесс ставит себя в wait-queue, когда он ожидает получить завершение любого события. Например, завершение I/O event. На этом этапе процесс не делает ничего. После запуска события (ядро ​​устанавливает trap? Правильно, если неверно), и, наконец, процесс просыпается и возобновляется.

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

2) Процесс пользовательского пространства. Является ли ядро ​​всегда устанавливающим trap для интронизации процесса, выполняющегося в пространстве пользователя, чтобы установить, что сигнал получен? (Как только pending-signals-mask установлен?)

Пожалуйста, ответьте на этот вопрос относительно реализации в Linux (или это вкусно).