КИО
Эта статья нуждается в дополнительных цитатах для проверки . ( июль 2009 г. ) |
QIO ( Queue I/O ) — термин, используемый в нескольких компьютерных операционных системах, разработанных бывшей корпорацией Digital Equipment Corporation ( DEC ) из Мейнарда, штат Массачусетс .
Операции ввода-вывода в этих системах инициируются путем вызова ядра QIO . Существует два типа QIO — ввод-вывод в очереди и ввод-вывод в очереди с ожиданием.
Для QIO без ожидания вызов возвращается немедленно. Если запрос успешно поставлен в очередь, фактическая операция происходит асинхронно. По завершении статус возвращается в двойном слове статуса QIO. Запрос QIO также может указывать, что завершение устанавливает флаг события или выдает асинхронную системную ловушку ( AST ).
Вызов также может быть выдан как QIOW (очередь ввода-вывода и ожидание завершения), что обеспечивает синхронный ввод-вывод. В этом случае операция ожидания флага события объединяется, поэтому вызов не возвращается до тех пор, пока операция ввода-вывода не завершится или не завершится неудачно.
Следующие операционные системы реализуют QIO(W):
- РСХ-15
- RSX-11 (включая все варианты)
- RSTS/E (только синхронно, эмулируется системой выполнения RSX )
- OpenVMS [1]
Аргументы QIO в VMS
[ редактировать ]В VMS аргументами вызова QIO являются:
- Флаг события , который будет установлен после завершения операции. Невозможно не указать флаг события; флаг 0 действителен. Вполне допустимо иметь несколько одновременных операций, которые по завершении устанавливают один и тот же флаг события. Тогда приложение должно разобраться в любой путанице, которая может возникнуть, или просто игнорировать этот флаг события.
- Канал — небольшое целое число, ранее связанное с устройством. На этом уровне все операции с файлами и каталогами диска (анализ имени файла, поиск каталога, открытие/закрытие файла) выполняются соответствующими запросами QIO.
- которую Код функции, необходимо выполнить. 6 бит назначены базовому коду (например, чтение, запись), а еще 10 бит предназначены для «модификаторов», значение которых зависит от базового кода.
- Дополнительный блок состояния ввода-вывода (IOSB) , который очищается вызовом QIO и заполняется после завершения операции ввода-вывода. Первые два байта содержат статус завершения (успех, достигнут конец файла, тайм-аут, ошибка ввода-вывода и т. д.), а следующие два байта обычно возвращают количество байтов, прочитанных или записанных в ходе операции. Значение последних четырех байтов, если таковое имеется, зависит от операции.
- Необязательная AST процедура , вызываемая после завершения операции.
- Дополнительный параметр (значение которого зависит от вызывающей стороны), передаваемый в процедуру AST.
- Частично стандартизированный список, содержащий до шести параметров, известный как от P1 до P6 . Первые два параметра обычно определяют начальный адрес буфера ввода-вывода (P1) и количество байтов ввода-вывода (P2). Остальные параметры зависят от операции и конкретного устройства. Например, для компьютерного терминала P3 может быть временем завершения чтения, тогда как для дисковода это может быть номер начального блока передачи.
Завершение QIO
[ редактировать ]Существует три различных способа определения завершения операции ввода-вывода в очереди:
- Когда флаг события установлен.
- Когда первые два байта IOSB становятся ненулевыми.
- Когда выполняется процедура AST.
Необычные QIO, требующие сложной обработки
[ редактировать ]Простые QIO, такие как запросы на чтение или запись, обслуживаются либо самим ядром, либо драйверами устройств. Некоторые более сложные запросы, особенно те, которые связаны с ленточными накопителями и операциями на уровне файлов, изначально выполнялись вспомогательным управляющим процессором (ACP) (задача специального назначения с собственным сопоставлением адресов).
Файловая система ODS-1 Files-11 на 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 требуются все шесть дополнительных параметров:
- П1
- Адрес буфера, в который поступают входные символы
- П2
- Длина буфера, ограничивающая максимальное количество символов для чтения. Если буфер заполнен, чтение завершится успешно, даже если пользователь не введет символ конца строки. Допускается ноль, и в этом случае чтение завершится успешно, прочитав ноль символов.
- П3
- Максимальное количество секунд ожидания дополнительных входных данных. Это используется только в том случае, если Модификатор IO$M_TIMED присутствует, а значение 0 означает ноль секунд: чтение прекратится немедленно, поэтому единственным возможным вводом будет то, что было «введено заранее» пользователем.
- П4
- Адрес дополнительной «маски терминатора», определяющей, какие символы ASCII завершают чтение. Если этот параметр опущен, по умолчанию используются обычные разделители строк VMS, включая возврат каретки (но не перевод строки). Можно указать маску без ограничителей строк, и в этом случае чтение завершится только тогда, когда буфер заполнен или истечет тайм-аут.
- П5
- Адрес строки приглашения, которая будет отображаться пользователю перед принятием ввода. Преимущество предоставления этого приглашения вместо предварительной операции записи заключается в автоматическом повторном отображении в любой ситуации, требующей обновления строки ввода во время чтения (например, после того, как сообщение оператора было передано на терминал или пользователь нажимает CTRL/R, чтобы повторно отобразить строку).
- П6
- Длина строки приглашения.
Путем соответствующего выбора вышеуказанных параметров можно выполнять как ввод, так и вывод терминала одним вызовом, нет необходимости использовать обычный IO$_WRITEVBLK вообще вызывает вывод терминала.