QIO ( Queue I / O ) es un término utilizado en varios sistemas operativos de computadora diseñados por la antigua Digital Equipment Corporation ( DEC ) de Maynard , Massachusetts .
Las operaciones de E / S en estos sistemas se inician emitiendo una llamada QIO al kernel . Hay dos tipos de QIO: E / S en cola, E / S en cola y Espera.
Para QIO sin esperar, la llamada regresa inmediatamente. Si la solicitud se pone en cola correctamente, la operación real se produce de forma asincrónica. Al finalizar, el estado se devuelve en la palabra doble de estado de QIO. La solicitud QIO también puede especificar que la finalización establezca un indicador de evento o emita una Trampa del sistema asincrónico ( AST ).
La llamada también puede emitirse como QIOW (E / S en cola y Esperar a que se complete), lo que permite E / S sincrónicas. En este caso, la operación de espera de evento se combina para que la llamada no regrese hasta que la operación de E / S finalice o falle.
Los siguientes sistemas operativos implementaron QIO (W):
Argumentos de QIO en VMS
En VMS, los argumentos de la llamada QIO son:
- El indicador de evento que se establecerá cuando se complete la operación. No es posible no especificar una bandera de evento; el indicador 0 es válido. Está perfectamente permitido tener varias operaciones simultáneas que establezcan el mismo indicador de evento al finalizar. Depende de la aplicación resolver cualquier confusión que esto pueda causar, o simplemente ignorar ese indicador de evento.
- El canal , un pequeño número entero previamente asociado con el dispositivo. En este nivel, todas las operaciones en archivos y directorios de disco (análisis de nombre de archivo, búsqueda de directorio, apertura / cierre de archivos) se realizan mediante las solicitudes de QIO adecuadas.
- El código de función que se va a realizar. Se asignan 6 bits al código básico (como leer, escribir), con 10 bits más para "modificadores" cuyo significado depende del código básico.
- El bloque de estado de E / S opcional (IOSB) , que se borra mediante la llamada QIO y se completa al finalizar la operación de E / S. Los primeros dos bytes contienen el estado de finalización (éxito, finalización del archivo alcanzado, tiempo de espera, error de E / S, etc.), mientras que los dos bytes siguientes normalmente devuelven el número de bytes leídos o escritos en la operación. El significado, si lo hay, de los últimos cuatro bytes depende de la operación.
- La rutina AST opcional que se invoca cuando se completa la operación.
- Un parámetro adicional (cuyo significado depende de la persona que llama) para pasar a la rutina AST.
- Una lista parcialmente estandarizada de hasta seis parámetros conocidos como P1 a P6 . Los dos primeros parámetros suelen especificar la dirección de inicio del búfer de E / S (P1) y el recuento de bytes de E / S (P2). Los parámetros restantes varían con la operación y el dispositivo en particular. Por ejemplo, para una terminal de computadora , P3 podría ser el momento para permitir que se complete la lectura, mientras que, para una unidad de disco , podría ser el número de bloque inicial de la transferencia.
Finalización de QIO
Hay tres formas diferentes de detectar cuándo se ha completado la operación de E / S en cola:
- Cuando se activa la bandera del evento.
- Cuando los dos primeros bytes del IOSB se vuelven distintos de cero.
- Cuando se ejecuta la rutina AST.
QIO inusuales que requieren un procesamiento complejo
Los QIO simples, como las solicitudes de lectura o escritura, son atendidos por el propio kernel o por los controladores de dispositivo. Ciertas solicitudes más complicadas, específicamente aquellas que involucran unidades de cinta y operaciones a nivel de archivo, fueron originalmente ejecutadas por un Procesador de Control Auxiliar (ACP) (una tarea de propósito especial con su propia asignación de direcciones).
El sistema de archivos Files-11 ODS-1 en RSX-11 se implementó mediante una biblioteca de subrutinas que se comunicaba con una tarea denominada F11ACP mediante un conjunto especial de QIO denominado "ACP QIO". La funcionalidad equivalente para controlar dispositivos de cinta magnética fue proporcionada por una tarea llamada MTAACP.
Originalmente, el sistema de archivos Files-11 ODS-2 fue proporcionado por F11BACP en VMS , pero la funcionalidad de F11BACP se incorporó más tarde al kernel de VMS para ahorrar la sobrecarga de los cambios de contexto del proceso, y ahora se llama XQP (Procesador Qio extendido) .
IO $ _READPROMPT
Probablemente, la solicitud QIO única más compleja posible es la llamada IO $ _READPROMPT del controlador de terminal VMS con el modificador IO $ M_TIMED; este QIO requiere los seis parámetros adicionales:
- P1 es la dirección del búfer en el que se reciben los caracteres de entrada
- P2 es la longitud del búfer, lo que limita el número máximo de caracteres a leer. Si el búfer está lleno, la lectura se completará correctamente, incluso si el usuario no escribe un carácter de terminación de línea. Se permite cero, en cuyo caso la lectura terminará correctamente con cero caracteres leídos.
- P3 es el número máximo de segundos para esperar más entradas. Esto solo se usa si el modificador IO $ M_TIMED está presente, y un valor de cero significa cero segundos: la lectura terminará inmediatamente, por lo que la única entrada posible será lo que el usuario haya "escrito con anticipación".
- P4 es la dirección de la "máscara de terminación" opcional, que especifica qué caracteres ASCII terminan la lectura. Si se omite, este valor predeterminado es los delimitadores de línea habituales de VMS, incluido el retorno de carro (pero no el salto de línea). Es posible especificar una máscara sin terminadores de línea, en cuyo caso la lectura solo se completará cuando el búfer esté lleno o cuando haya transcurrido el tiempo de espera.
- P5 es la dirección de una cadena de solicitud que se mostrará al usuario antes de aceptar la entrada. La ventaja de proporcionar este mensaje, en lugar de una operación de escritura previa, es que se vuelve a mostrar automáticamente en cualquier situación que requiera una actualización de la línea de entrada mientras la lectura está en curso (como después de que se haya transmitido un mensaje del operador al terminal o el usuario presiona CTRL / R para volver a mostrar la línea).
- P6 es la longitud de la cadena de mensajes.
Mediante la elección adecuada de los parámetros anteriores, es posible realizar tanto la entrada como la salida del terminal con una llamada, no es necesario utilizar la llamada IO $ _WRITEVBLK normal para la salida del terminal.