subsistema tty
AIX® es un sistema operativo multiusuario que permite el acceso de los usuarios desde dispositivos conectados local o remotamente. La capa de comunicación que soporta esta función es el subsistema tty.
La comunicación entre los dispositivos de terminal y los programas que los leen y escriben está controlada por la interfaz tty. Entre los ejemplos de dispositivos tty se encuentran:
- Módems
- terminales ASCII
- Consolas del sistema
- Impresoras serie
- Xterms o aixterms en X-Windows
Esta visión general proporciona información sobre los temas siguientes:
Objetivos del subsistema TTY
El subsistema tty es responsable de:
- Control del flujo físico de datos en líneas asíncronas (incluida la velocidad de transmisión, el tamaño de los caracteres y la disponibilidad de la línea)
- Interpretación de los datos mediante el reconocimiento de caracteres especiales y la adaptación a las lenguas nacionales
- Control de trabajos y acceso de terminal utilizando el concepto de control de terminal
Una terminal de control gestiona las operaciones de entrada y salida de un grupo de procesos. El archivo especial tty da soporte a la interfaz de terminal de control. En la práctica, los programas de usuario raramente abren archivos de terminal, como por ejemplo dev/tty5. Estos archivos se abren mediante un mandato getty o rlogind y se convierten en los dispositivos de entrada y salida estándar del usuario.
módulos de subsistema tty
Para realizar sus tareas, el subsistema tty se compone de módulos o disciplinas. Un módulo es un conjunto de reglas de proceso que rigen la interfaz para la comunicación entre el sistema y un dispositivo asíncrono. Los módulos se pueden añadir y eliminar dinámicamente para cada tty.
El subsistema tty da soporte a tres tipos principales de módulos:
- controladores tty
Los controladores tty, o disciplinas de hardware, controlan directamente el hardware (dispositivos tty) o pseudo-hardware (dispositivos pty). Realizan la entrada y salida real en el adaptador proporcionando servicios a los módulos por encima de él. Los servicios son control de flujo y semántica especial cuando se está abriendo un puerto.
Se proporcionan los siguientes controladores tty:
Controlador Descripción cxma Controlador PCI asíncrono de 128 puertos. cxpa Controlador PCI asíncrono de 8 puertos. lft Terminal de función baja. El nombre de tty es /dev/lftY, donde Y > = 0. sa Adaptador PCI EIA-232 asíncrono de 2 puertos. SF Receptores/transceptores asíncronos universales (UART) en la placa del sistema. La sección Controladores TTY proporciona más información.
- Disciplinas de línea
Las disciplinas de línea proporcionan edición, control de trabajos e interpretación de caracteres especiales. Realizan todas las transformaciones que se producen en las corrientes de datos de entrada y salida. Las disciplinas de línea también realizan la mayor parte del manejo de errores y la supervisión de estado para el controlador tty.
Se proporcionan las siguientes disciplinas de línea:
- Módulos convertidores
Módulos de conversor o disciplinas de correlación, conversión o correlación, caracteres de entrada y salida.
Se proporcionan los siguientes módulos convertidores:
Conversor Descripción nls Soporte de idioma nacional para la correlación de terminales; este conversor convierte los caracteres de entrada y salida en la corriente de datos, basándose en las correlaciones de entrada y salida definidas para el puerto (consulte el mandato setmaps ) lc_sjis y uc_sjis Conversor superior e inferior utilizado para convertir caracteres de varios bytes entre el estándar industrial japonés desplazado (SJIS) y el código EUC japonés avanzado (AJEC) manejado por la disciplina de línea ldterm . Módulos de conversor proporciona más información sobre los conversores.
Estructura de subsistema TTY
El subsistema tty se basa en STREAMS. Esta estructura basada en STREAMS proporciona modularidad y flexibilidad, y habilita las características siguientes:
- Personalización fácil; los usuarios pueden personalizar su entorno de subsistema de terminal añadiendo y eliminando módulos de su elección.
- Módulos reutilizables; por ejemplo, el mismo módulo de disciplina de línea se puede utilizar en muchos dispositivos tty con configuraciones diferentes.
- Fácil adición de nuevas características al subsistema terminal.
- Proporcionar una interfaz tty homogénea en dispositivos heterogéneos.
La estructura de una corriente de tty está formada por los módulos siguientes:
- La cabecera de corriente, procesando las solicitudes del usuario. El cabezal de corriente es el mismo para todos los dispositivos tty, independientemente de qué disciplina de línea o controlador tty esté en uso.
- Un convertidor superior opcional (uc_sjis por ejemplo), un módulo convertidor que se ha desplazado por encima de la disciplina de línea para convertir datos en sentido ascendente y descendente.
- La disciplina de línea.
- Un conversor inferior opcional (lc_sjis por ejemplo), un módulo conversor que se encuentra por debajo de la disciplina de línea para convertir datos en sentido ascendente y descendente.
- Un módulo de correlación de caracteres opcional (nls), un módulo convertidor que se coloca encima del controlador tty para dar soporte a la correlación de terminales de entrada y salida.
- El final de la secuencia: un controlador tty.
A menos que sea necesario, los módulos de internacionalización no están presentes en la secuencia tty.
Para una impresora serie, los módulos de internacionalización normalmente no están presentes en la corriente; por lo tanto, la estructura es más simple.
Servicios comunes
Los archivos /usr/include/sys/ioctl.h y /usr/include/termios.h describen la interfaz para los servicios comunes proporcionados por el subsistema tty. El archivo ioctl.h , que utilizan todos los módulos, incluye la estructura winsize , así como varios mandatos ioctl. El archivo termios.h incluye las subrutinas y tipos de datos compatibles con POSIX .
Los servicios proporcionados se agrupan y se discuten aquí de acuerdo con sus funciones específicas.
Servicios de control de hardware
Se proporcionan las subrutinas siguientes para el control de hardware:
| Subrutina | Descripción |
|---|---|
| velocidad cfgetispeed | Obtiene velocidad en baudios de entrada |
| cfgetospeed | Obtiene velocidad en baudios de salida |
| velocidad cfsetispeed | Establece la velocidad en baudios de entrada |
| cfsetospeed | Establece la velocidad en baudios de salida |
| tcsendbreak | Envía una interrupción en una línea de datos serie asíncrona |
Servicios de control de flujo
Se proporcionan las subrutinas siguientes para el control de flujo:
Información y control de terminal
Se proporcionan las subrutinas siguientes para la información de terminal y el control:
| Subrutina | Descripción |
|---|---|
| isatty | Determina si el dispositivo es un terminal |
| setcsmap | Lee un archivo de correlación de conjunto de códigos y lo asigna al dispositivo de entrada estándar |
| tcgetattr | Obtiene estado de terminal |
| tcsetattr | Establece el estado de terminal |
| ttylock, ttywait, ttyunlocko ttylocked | Controla las funciones de bloqueo de tty |
| nombre_tt | Obtiene el nombre de un terminal |
Servicios de tamaño de ventana y terminal
El kernel almacena la estructura winsize para proporcionar una interfaz coherente para el tamaño de terminal o ventana actual. La estructura winsize contiene los campos siguientes:
| Campo | Descripción |
|---|---|
| ws_row | Indica el número de filas (en caracteres) en la ventana o terminal |
| ws_col | Indica el número de columnas (en caracteres) en la ventana o terminal |
| ws_xpixel | Indica el tamaño horizontal (en píxeles) de la ventana o terminal |
| ws_ypixel | Indica el tamaño vertical (en píxeles) de la ventana o terminal |
Por convenio, un valor de 0 en todos los campos de estructura winsize indica que la estructura todavía no se ha configurado.
| Subrutina | Descripción |
|---|---|
| termdef | Consulta las características del terminal. |
| TIOCGWINSZ | Obtiene el tamaño de ventana. El argumento de esta operación ioctl es un puntero a una estructura winsize , en la que se coloca el tamaño de ventana o terminal actual. |
| TIOCSWINSZ | Establece el tamaño de ventana. El argumento de esta operación ioctl es un puntero a una estructura winsize , que se utiliza para establecer la información de tamaño de ventana o terminal actual. Si la nueva información difiere de la anterior, se envía una señal SIGWINCH al grupo de procesos de terminal. |
Servicios de gestión de grupos de procesos
Se proporcionan las subrutinas siguientes para la gestión de grupos de procesos:
Operaciones de tamaño de almacenamiento intermedio
Las siguientes operaciones ioctl se utilizan para establecer el tamaño de los almacenamientos intermedios de entrada y salida de terminal. El argumento de estas operaciones es un puntero a un entero que especifica el tamaño del almacenamiento intermedio.
| Operaciones | Descripción |
|---|---|
| TXSETIHOG | Establece el límite de salto para el número de caracteres de entrada que se pueden recibir y almacenar en los almacenamientos intermedios tty internos antes de que el proceso los lea. El límite de salto predeterminado es de 8192 caracteres. Una vez que se alcanza el límite de salto más un carácter, se registra un error en el registro de errores y se vacía el almacenamiento intermedio de entrada. El número de hog no debe ser demasiado grande, ya que el almacenamiento intermedio se asigna desde la memoria fijada por el sistema. |
| TXSETOHOG | Establece el límite de salto para el número de caracteres de salida almacenados en el almacenamiento intermedio para la entrada de eco. El límite de salto predeterminado es de 8192 caracteres. Una vez que se alcanza el límite de salida de salto, los caracteres de entrada ya no se repiten. El número de hog no debe ser demasiado grande, ya que el almacenamiento intermedio se asigna desde la memoria fijada por el sistema. |
Sincronización
El subsistema tty aprovecha la sincronización proporcionada por STREAMS. Los módulos de corriente tty se configuran con la sincronización de nivel de par de colas. Esta sincronización permite la paralelización del proceso para dos corrientes diferentes.