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:

Subrutina Descripción
termino mundial Dispositivos de terminal
sptr Impresora serie (mandatosplp )
SLIP Línea serie Internet Protocol (mandatoslattach )
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:

Subrutina Descripción
tcdrenaje Espera a que se complete la salida
flujo tct Realiza funciones de control de flujo
tcflush Descarta datos de la cola especificada

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:

Subrutina Descripción
tcgetpgrp Obtiene el ID de grupo de procesos en primer plano
tcsetpgrp Establece el ID de grupo de procesos en primer plano

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.