Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

QIO ( Queue I / O ) - термин, используемый в нескольких компьютерных операционных системах, разработанных бывшей Digital Equipment Corporation ( 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) (задача специального назначения с собственным отображением адресов).

Files-11 файловой системы ODS-1 на RSX-11 был реализован с помощью библиотеки подпрограмм , которые сообщенной с задачей по имени F11ACP используя специальный набор QIOs под названием «АКТ QIOs.» Эквивалентная функциональность для управления устройствами с магнитной лентой была предоставлена ​​задачей под названием 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 для вывода терминала.

Ссылки [ править ]