Запрет обработчику прерываний на блокировку - выбор дизайна. Когда некоторые данные находятся на устройстве, обработчик прерываний перехватывает текущий процесс, подготавливает передачу данных и включает прерывание; до того, как обработчик активирует текущее прерывание, устройство должно зависнуть. Мы хотим, чтобы наш ввод-вывод был занят и наша система реагировала, тогда нам лучше не блокировать обработчик прерываний.
Я не думаю, что "нестабильные состояния" являются существенной причиной. Процессы, независимо от того, находятся они в режиме пользователя или в режиме ядра, должны знать, что они могут быть прерваны прерываниями. Если некоторая структура данных в режиме ядра будет доступна как обработчику прерываний, так и текущему процессу, и существует состояние гонки, тогда текущий процесс должен отключить локальные прерывания, и, кроме того, для многопроцессорных архитектур необходимо использовать спин-блокировки во время критических секций .
Я также не думаю, что если обработчик прерываний был заблокирован, его нельзя разбудить. Когда мы говорим «блокировать», в основном это означает, что заблокированный процесс ожидает некоторого события / ресурса, поэтому он связывает себя с некоторой очередью ожидания для этого события / ресурса. Всякий раз, когда ресурс освобождается, процесс освобождения отвечает за пробуждение процесса (ов) ожидания.
Однако действительно раздражает то, что заблокированный процесс ничего не может сделать во время блокировки; он не сделал ничего плохого в этом наказании, что несправедливо. И никто точно не может предсказать время блокировки, поэтому невинный процесс должен ждать по непонятной причине и неограниченное время.