Откуда происходит блокировка ввода / вывода? - PullRequest
0 голосов
/ 25 мая 2018

Насколько я понимаю, аппаратная архитектура и операционные системы не предназначены для блокировки процессора.Когда требуется выполнить какую-либо операцию блокировки, операционная система регистрирует прерывание и переходит к чему-то другому, следя за тем, чтобы драгоценное время процессора всегда эффективно использовалось.

Меня удивляет, почему большинство языков программированиябыли разработаны с блокирующими API, но самое главное, поскольку операционная система работает асинхронно, когда дело доходит до ввода-вывода, регистрации прерываний и обработки результатов, когда они будут готовы позже, я действительно озадачен как наше программированиеязыковые API избегают этой асинхронности .Как ОС обеспечивает синхронные системные вызовы для нашего языка программирования, используя блокирующие API?

Откуда эта синхронность?Конечно, не на аппаратном уровне.Итак, есть ли где-то бесконечный цикл, который я не знаю о вращении и вращении, пока не произойдет какое-то прерывание?

1 Ответ

0 голосов
/ 25 мая 2018

Насколько я понимаю, аппаратная архитектура и операционные системы не предназначены для блокировки процессора.

Любая рационально спроектированная операционная система будет иметь интерфейс системного обслуживания, который выполняет то, что вы говорите,Однако есть много нерациональных операционных систем, которые не работают таким образом на уровне процесса.

Блокировать ввод-вывод проще в программировании, чем неблокирующий ввод-вывод.Позвольте мне привести пример из операционной системы VMS (Windoze работает так же и под одеялом).VMS имеет системные службы, называемые SYS $ QIO и SYS $ QIOW.То есть запрос ввода-вывода в очередь и запрос ввода-вывода в очередь и ожидание.Системные сервисы имеют одинаковые параметры.Одна пара параметров - это адрес подпрограммы завершения и параметры этой подпрограммы.Однако эти параметры редко используются с SYS $ QIOW.

Если вы выполняете вызов SYS $ QIO, он немедленно возвращается.Когда операция ввода-вывода завершается, процедура завершения вызывается как программное прерывание.Затем вам нужно заняться программированием прерываний в вашем приложении.Мы делали это все время.Если вы хотите, чтобы ваше приложение могло одновременно считывать 100 входных потоков, вам нужно это сделать.Это просто сложнее, чем простая блокировка ввода-вывода с одним устройством.

Если бы язык программирования включал такую ​​систему обратного вызова в свои операторы ввода-вывода, он бы отражал VMS / RSX / Windoze.Ada использует концепцию задач для реализации таких систем независимо от операционной системы.

В мире Eunuchs было традиционно создавать отдельный процесс для каждого устройства.Это было проще, пока вам не пришлось читать И писать на каждое устройство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...