QIO


QIO is a term used in several computer operating systems designed by the former Digital Equipment Corporation of Maynard, Massachusetts.
I/O operations on these systems are initiated by issuing a QIO call to the kernel. There are two types of QIO - Queue I/O, and Queue I/O and Wait.
For QIO without wait, the call returns immediately. If the request is successfully enqueued, the actual operation occurs asynchronously. On completion, status is returned in the QIO status doubleword. The QIO request may also specify that completion set an event flag or issue an Asynchronous System Trap.
The call may also be issued as QIOW, allowing synchronous I/O. In this case, the wait-for-event-flag operation is combined so the call does not return until the I/O operation completes or fails.
The following operating systems implemented QIO:
Under VMS, the arguments to the QIO call are:
There are three different ways to sense when the queued I/O operation has completed:
  1. When the event flag becomes set.
  2. When the first two bytes of the IOSB become nonzero.
  3. When the AST routine executes.

    Unusual QIOs that require complex processing

Simple QIOs, such as read or write requests, are either serviced by the kernel itself or by device drivers. Certain more complicated requests, specifically those involving tape drives and file-level operations, were originally executed by an Ancillary Control Processor .
The Files-11 ODS-1 file system on RSX-11 was implemented by a subroutine library that communicated with a task named F11ACP using a special set of QIOs called the "ACP QIOs." The equivalent functionality for controlling magnetic tape devices was provided by a task named MTAACP.
Originally, the Files-11 ODS-2 file system was provided by F11BACP on VMS, but the functionality of F11BACP was later incorporated into the VMS kernel to save the overhead of process context switches, and is now called an XQP.

IO$_READPROMPT

Probably the most complex single QIO request possible is the VMS terminal driver's IO$_READPROMPT call with the IO$M_TIMED modifier; this QIO requires all six additional parameters:
By appropriate choices of the above parameters, it is possible to do both terminal input and output with the one call, there is no need to use the regular IO$_WRITEVBLK call for terminal output at all.