Что означает неблокирующий ввод / вывод? - PullRequest
0 голосов
/ 19 мая 2018

Я понимаю, что это означает, что функция ввода-вывода, которая может блокироваться бесконечно, вместо этого немедленно возвращается.У меня вопрос, как это сделать?Что произойдет, если функция должна немедленно вернуться, но устройство ввода-вывода недоступно?Очевидно, что он не может сразу же вернуться с результатами операции ввода-вывода, потому что операция не имела возможности выполнить, поэтому она должна выполнить одно из двух: либо (1) вернуться сейчас с результатом, указывающим на ошибкуили (2) временно верните управление в основную программу и выполните операцию ввода-вывода одновременно с основной программой, затем вернитесь снова после завершения ввода-вывода.Что из этого?Какова точная процедура?Ни один из источников, которые мне удалось найти, не прояснил этот момент.

1 Ответ

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

Функция ввода / вывода делегирует свою работу ядру ОС.Как правило, эти операции являются асинхронными: ОС инструктирует периферийное устройство выполнить операцию и в конечном итоге получает от устройства прерывание, указывающее на успех или сбой.В то же время ОС выполняет много других функций, в том числе позволяет запускать пользовательские программы.

Когда операция ввода-вывода блокируется для пользователя, это означает, что ОС не будет планировать время ЦП для этого пользователя.процесс, пока он не получил прерывание завершения от оборудования.Затем выглядит так, как будто функция вернулась только после завершения.На самом деле он готов вернуться немедленно.Только ОС поддерживает пользовательский процесс в состоянии ожидания до тех пор, пока не будет завершен базовый аппаратный запрос.

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

Приложение:

В Posix неблокирование означает, что если запрос не может быть выполнен немедленно (например, выхотите что-то прочитать, но данные еще не получены), тогда вы получите статус ошибки.Затем вы можете повторно выполнить запрос позже.

...