QIO - QIO

QIO (Очередь ввода / вывода) - термин, используемый на нескольких компьютерах операционные системы разработан бывшим Корпорация цифрового оборудования (DEC ) из Мэйнард, Массачусетс.

Операции ввода-вывода в этих системах инициируются вызовом QIO ​​на ядро. Существует два типа QIO - ввод-вывод очереди, ввод-вывод очереди и ожидание.

Для QIO без ожидания вызов возвращается немедленно. Если запрос успешно поставлен в очередь, фактическая операция выполняется асинхронно. По завершении статус возвращается в двойном слове статуса QIO. Запрос QIO также может указывать, что завершение устанавливает флаг события или выпустить Асинхронная системная ловушка (AST ).

Вызов также может быть выполнен как QIOW (очередь ввода-вывода и ожидание завершения), что позволяет выполнять синхронный ввод-вывод. В этом случае операция ожидания события-флага объединяется, поэтому вызов не возвращается, пока операция ввода-вывода не завершится или не завершится ошибкой.

Следующие операционные системы реализовали QIO (W):

Аргументы QIO в VMS

В VMS аргументами вызова QIO являются:

  • В флаг события установить, когда операция завершится. Невозможно нет указать флаг события; флаг 0 действителен. Совершенно допустимо иметь несколько одновременных операций, которые по завершении устанавливают один и тот же флаг события. Затем приложение должно решить любую путаницу, которую это может вызвать, или просто проигнорировать этот флаг события.
  • В канал, небольшое целое число, ранее связанное с устройством. На этом уровне все операции с дисковыми файлами и каталогами (анализ имен файлов, поиск в каталогах, открытие / закрытие файлов) выполняются соответствующими запросами QIO.
  • В код функции быть исполненным. 6 бит назначаются базовому коду (например, чтение, запись), а еще 10 бит - для «модификаторов», значение которых зависит от базового кода.
  • Необязательный Блок состояния ввода / вывода (IOSB), который очищается вызовом QIO ​​и заполняется после завершения операции ввода-вывода. Первые два байта содержат статус завершения (успех, достигнут конец файла, тайм-аут, ошибка ввода-вывода и т. Д.), А следующие два байта обычно возвращают количество байтов, прочитанных или записанных в ходе операции. Значение последних четырех байтов зависит от операции.
  • Необязательный AST рутина для вызова после завершения операции.
  • Дополнительный параметр (значение которого зависит от вызывающего), передаваемый в процедуру AST.
  • Частично стандартизованный список до шести параметров, известный как P1 через P6. Первые два параметра обычно определяют начальный адрес буфера ввода / вывода (P1) и счетчик байтов ввода / вывода (P2). Остальные параметры зависят от операции и конкретного устройства. Например, для компьютерный терминал, P3 может быть временем для завершения чтения, тогда как для дисковод, это может быть номер начального кадра передачи.

Завершение QIO

Есть три разных способа определить, когда операция ввода-вывода в очереди завершена:

  1. Когда устанавливается флаг события.
  2. Когда первые два байта IOSB становятся ненулевыми.
  3. Когда выполняется процедура AST.

Необычные QIO, требующие сложной обработки

Простые QIO, такие как запросы на чтение или запись, обслуживаются либо самим ядром, либо драйверами устройств. Некоторые более сложные запросы, в частности, связанные с ленточными накопителями и операциями на уровне файлов, первоначально выполнялись вспомогательным управляющим процессором (ACP) (задача специального назначения с собственным отображением адресов).

В Файлы-11 Файловая система ODS-1 на RSX-11 был реализован библиотекой подпрограмм, которая взаимодействовала с задачей с именем F11ACP с использованием специального набора QIO, называемого «ACP QIO». Эквивалентная функциональность для управления устройствами с магнитной лентой была предоставлена ​​задачей под названием MTAACP.

Первоначально файловая система Files-11 ODS-2 была предоставлена ​​F11BACP на VMS, но функциональность F11BACP была позже включена в ядро ​​VMS для экономии накладных расходов на переключение контекста процесса, и теперь называется XQP (eXtended Qio Processor).

IO $ _READPROMPT

Вероятно, самый сложный из возможных запросов QIO - это вызов драйвера терминала VMS IO $ _READPROMPT с модификатором IO $ M_TIMED; этому QIO требуются все шесть дополнительных параметров:

  • P1 это адрес буфера, в который поступают входные символы
  • P2 - длина буфера, ограничивающая максимальное количество символов для чтения. Если буфер заполнен, чтение завершится успешно, даже если пользователь не введет символ конца строки. Допускается ноль, и в этом случае чтение будет успешно завершено считыванием нуля символов.
  • P3 - максимальное количество секунд ожидания ввода дополнительных данных. Это используется только в том случае, если присутствует модификатор IO $ M_TIMED, а значение нуля означает ноль секунд: чтение будет немедленно прекращено, поэтому единственно возможным вводом будет то, что было «напечатано заранее» пользователем.
  • P4 - это адрес необязательной «маски терминатора», определяющей, какие символы ASCII завершают чтение. Если опущено, по умолчанию используются обычные разделители строк VMS, включая возврат каретки (но не перевод строки). Можно указать маску с нет терминаторы строки, и в этом случае чтение будет завершено только тогда, когда буфер заполнится или истечет время ожидания.
  • P5 - это адрес строки приглашения, которая будет отображаться пользователю перед принятием ввода. Преимущество предоставления этого запроса вместо предыдущей операции записи заключается в автоматическом повторном отображении в любой ситуации, требующей обновления входной строки во время чтения (например, после того, как сообщение оператора было передано на терминал, или пользователь нажимает CTRL / R, чтобы снова отобразить строку).
  • P6 длина строки приглашения.

При соответствующем выборе вышеперечисленных параметров можно выполнять как ввод, так и вывод терминала с помощью одного вызова, нет необходимости использовать обычный вызов IO $ _WRITEVBLK для вывода терминала.

использованная литература