QIO

QIO (Queue I/O) is a term used in several computer operating systems designed by the former Digital Equipment Corporation (DEC) of Maynard, Massachusetts.

I/O operations on these systems are initiated by issuing a QIO call to the kernel. The call returns immediately and if the I/O operation is successfully enqueued, it will be done asynchronously with its completion signaled by the raising of an event flag and—if requested—the issuance of an Asynchronous System Trap (AST) to the calling process/task.

Optionally, the call may be issued as QIOW (Queue I/O and Wait for completion), 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(W):

Contents

QIO arguments in VMS

Under VMS, the arguments to the QIO call are:

QIO completion

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 (ACP) (a special purpose task with its own address mapping). The Files-11 ODS-1 file system on RSX-11 was provided by a process called F11ACP; originally, the Files-11 ODS-2 file system was provided by F11BACP on VMS, but the functionality of F11BACP was later rearchitected into the VMS kernel to save the overhead of process context switches and is now called an XQP (eXtended Qio Processor).

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.

References

  1. ^ http://h71000.www7.hp.com/doc/84final/4527/4527pro_091.html#jun_423