QIO ( Queue I/O ) es un término utilizado en varios sistemas operativos de computadoras diseñados por la antigua Digital Equipment Corporation ( DEC ) de Maynard, Massachusetts .
Las operaciones de E/S en estos sistemas se inician mediante una llamada QIO al núcleo . Existen dos tipos de QIO: E/S de cola y E/S de cola con espera.
Para QIO sin espera, la llamada regresa inmediatamente. Si la solicitud se encola correctamente, la operación real se realiza de forma asíncrona. Al finalizar, el estado se devuelve en la palabra doble de estado de QIO. La solicitud QIO también puede especificar que al finalizar se active un indicador de evento o se genere una trampa del sistema asíncrona ( AST ).
La llamada también puede emitirse como QIOW (E/S en cola y espera de finalización), lo que permite la E/S síncrona. En este caso, la operación wait-for-event-flag se combina de manera que la llamada no devuelve ningún resultado hasta que la operación de E/S finalice o falle.
Los siguientes sistemas operativos implementan QIO(W):
Argumentos QIO en VMS
En VMS, los argumentos para la llamada QIO son:
- Indicador de evento que se activa al finalizar la operación. No es posible no especificar un indicador de evento; el indicador 0 es válido. Es perfectamente admisible que varias operaciones simultáneas activen el mismo indicador de evento al finalizar. En ese caso, la aplicación deberá resolver cualquier confusión que esto pueda generar o simplemente ignorar dicho indicador.
- El canal , un número entero pequeño previamente asociado con el dispositivo. En este nivel, todas las operaciones en archivos y directorios de disco (análisis de nombres de archivo, búsqueda de directorios, apertura/cierre de archivos) se realizan mediante las solicitudes QIO correspondientes.
- El código de función que se va a ejecutar. Se asignan 6 bits al código básico (como lectura, escritura), y otros 10 bits a los "modificadores", cuyo significado depende del código básico.
- El bloque de estado de E/S opcional (IOSB) , que se borra con la llamada QIO y se rellena al finalizar la operación de E/S. Los dos primeros bytes indican el estado de finalización (éxito, fin de archivo alcanzado, tiempo de espera agotado, error de E/S, etc.), mientras que los dos bytes siguientes normalmente indican 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 invocará cuando finalice la operación.
- Un parámetro adicional (cuyo significado depende de quien realiza la llamada) que se 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 número de bytes de E/S (P2). Los parámetros restantes varían según la operación y el dispositivo en particular. Por ejemplo, para un terminal de computadora , P3 podría ser el tiempo que se debe esperar para 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
Existen tres formas diferentes de detectar cuándo se ha completado la operación de E/S en cola:
- Cuando se activa el indicador de evento.
- Cuando los dos primeros bytes del IOSB dejan de ser cero.
- Cuando se ejecuta la rutina AST.
QIO inusuales que requieren un procesamiento complejo
Las operaciones QIO simples, como las solicitudes de lectura o escritura, son atendidas por el propio núcleo o por los controladores de dispositivos. Ciertas solicitudes más complejas, en concreto las que involucran unidades de cinta y operaciones a nivel de archivo, eran ejecutadas originalmente 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 del RSX-11 se implementó mediante una biblioteca de subrutinas que se comunicaba con una tarea denominada F11ACP utilizando un conjunto especial de QIO llamado "ACP QIO". La funcionalidad equivalente para controlar los dispositivos de cinta magnética la proporcionaba una tarea denominada MTAACP.
Originalmente, el sistema de archivos Files-11 ODS-2 era proporcionado por F11BACP en VMS , pero la funcionalidad de F11BACP se incorporó posteriormente al núcleo de VMS para ahorrar la sobrecarga de los cambios de contexto de proceso, y ahora se denomina XQP (eXtended Qio Processor).
IO$_READPROMPT
Probablemente la solicitud QIO individual más compleja posible sea la llamada IO$_READPROMPT del controlador de terminal VMS con el modificador IO$M_TIMED ; esta QIO requiere los seis parámetros adicionales:
- P1
- La dirección del búfer en el que se reciben los caracteres de entrada.
- P2
- La longitud del búfer 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 introduce un carácter de fin de línea. Se permite cero caracteres; en ese caso, la lectura finalizará correctamente sin que se hayan leído otros caracteres.
- P3
- Número máximo de segundos de espera para recibir más datos. Esto solo se utiliza si está presente el modificador IO$M_TIMED , y un valor de cero significa cero segundos: la lectura finalizará inmediatamente, por lo que la única entrada posible será la que el usuario haya introducido previamente.
- P4
- La dirección de la "máscara de terminación" opcional, que especifica qué caracteres ASCII finalizan la lectura. Si se omite, se utilizan por defecto 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 ese caso, la lectura solo finalizará cuando el búfer esté lleno o haya transcurrido el tiempo de espera.
- P5
- La dirección de una cadena de mensajes que se mostrará al usuario antes de aceptar la entrada. La ventaja de proporcionar este mensaje, en lugar de como una operación de escritura previa, es que se vuelve a mostrar automáticamente en cualquier situación que requiera actualizar la línea de entrada mientras se está leyendo (por ejemplo, después de que se haya transmitido un mensaje del operador a la terminal o cuando el usuario pulse CTRL/R para volver a mostrar la línea).
- P6
- La longitud de la cadena de solicitud.
Mediante la selección adecuada de los parámetros anteriores, es posible realizar tanto la entrada como la salida de la terminal con una sola llamada, sin necesidad de utilizar la llamada habitual IO$_WRITEVBLK para la salida de la terminal.
Referencias
- ↑ "Manual de referencia de servicios del sistema HP OpenVMS" . Archivado del original el 12/10/2018 . Consultado el 11/10/2018 .
- OpenVMS