Насколько я понимаю, аппаратная архитектура и операционные системы не предназначены для блокировки процессора.
Любая рационально спроектированная операционная система будет иметь интерфейс системного обслуживания, который выполняет то, что вы говорите,Однако есть много нерациональных операционных систем, которые не работают таким образом на уровне процесса.
Блокировать ввод-вывод проще в программировании, чем неблокирующий ввод-вывод.Позвольте мне привести пример из операционной системы VMS (Windoze работает так же и под одеялом).VMS имеет системные службы, называемые SYS $ QIO и SYS $ QIOW.То есть запрос ввода-вывода в очередь и запрос ввода-вывода в очередь и ожидание.Системные сервисы имеют одинаковые параметры.Одна пара параметров - это адрес подпрограммы завершения и параметры этой подпрограммы.Однако эти параметры редко используются с SYS $ QIOW.
Если вы выполняете вызов SYS $ QIO, он немедленно возвращается.Когда операция ввода-вывода завершается, процедура завершения вызывается как программное прерывание.Затем вам нужно заняться программированием прерываний в вашем приложении.Мы делали это все время.Если вы хотите, чтобы ваше приложение могло одновременно считывать 100 входных потоков, вам нужно это сделать.Это просто сложнее, чем простая блокировка ввода-вывода с одним устройством.
Если бы язык программирования включал такую систему обратного вызова в свои операторы ввода-вывода, он бы отражал VMS / RSX / Windoze.Ada использует концепцию задач для реализации таких систем независимо от операционной системы.
В мире Eunuchs было традиционно создавать отдельный процесс для каждого устройства.Это было проще, пока вам не пришлось читать И писать на каждое устройство.