stringtranslate.com

Interfaz de terminal Unix de séptima edición

La interfaz de terminal de Unix de Séptima Edición es la abstracción generalizada, que comprende tanto una interfaz de programación de aplicaciones para programas como un conjunto de expectativas de comportamiento para los usuarios, de una terminal tal como estaba disponible históricamente en Unix de Séptima Edición . Ha sido reemplazada en gran medida por la interfaz de terminal POSIX .

Conceptos y descripción general

La interfaz de terminal proporcionada por la Séptima Edición de Unix y UNIX/32V , y también presentada por la versión 4 de BSD como el antiguo controlador de terminal , era simple, en gran parte orientada a los teletipos como terminales. La entrada se ingresaba línea por línea, y el controlador de terminal en el sistema operativo (y no los terminales mismos) proporcionaba capacidades de edición de línea simples. El núcleo mantenía un búfer en el que se realizaba la edición. Las aplicaciones que leían la entrada del terminal recibían el contenido del búfer solo cuando returnse presionaba la tecla en el terminal para finalizar la edición de línea. La tecla enviada desde el terminal al sistema borraba ("mataba") todo el contenido actual del búfer de edición y normalmente se mostraba como un símbolo ' ' seguido de una secuencia de nueva línea para mover la posición de impresión a una nueva línea en blanco. La clave enviada desde la terminal al sistema borraría el último carácter del final del buffer de edición, y normalmente se mostraría como un símbolo ' ', que los usuarios tendrían que reconocer como indicativo de un "borrado" del carácter precedente (los teletipos no son físicamente capaces de borrar caracteres una vez que han sido impresos en el papel). [1] [2] [3] [4] [5]@@##

Desde un punto de vista de programación, un dispositivo terminal tenía velocidades de transmisión y recepción en baudios , caracteres de "borrado" y "eliminación" (que realizaban la edición de línea, como se explicó), caracteres de "interrupción" y "salida" (que generaban señales para todos los procesos para los que el terminal era un terminal de control), caracteres de "inicio" y "detención" (utilizados para el control de flujo de software ), un carácter de "fin de archivo" (que actuaba como un retorno de carro excepto que la llamada del sistema lo descartaba del búfer read()y, por lo tanto, potencialmente causaba que se devolviera un resultado de longitud cero) y varios indicadores de modo que determinaban si el eco local era emulado por el controlador de terminal del núcleo, si el control de flujo del módem estaba habilitado, las longitudes de varios retrasos de salida, el mapeo para el carácter de retorno de carro y los tres modos de entrada. [6]

Modos de entrada

Los tres modos de entrada para terminales en Unix de Séptima Edición eran:

Modo de línea (también llamado modo "cocinado")
En el modo de línea, la disciplina de línea realiza todas las funciones de edición de línea y reconoce los caracteres de control de "interrupción" y "salida" y los transforma en señales enviadas a los procesos. Los programas de aplicación que leen desde la terminal reciben líneas completas, después de que el usuario haya completado la edición de línea presionando Enter. [2] [7]
modo cbreak
El modo cbreak es uno de los dos modos de caracteres por vez. ( Stephen R. Bourne se refirió a él en broma (Bourne 1983, p. 288) como un modo "a medio cocinar" y, por lo tanto, "raro"). La disciplina de línea no realiza ninguna edición de línea, y las secuencias de control para las funciones de edición de línea se tratan como una entrada de caracteres normal. Los programas de aplicación que leen desde la terminal reciben caracteres inmediatamente, tan pronto como están disponibles en la cola de entrada para ser leídos. Sin embargo, los caracteres de control de "interrupción" y "salida", así como los caracteres de control de flujo del módem, aún se manejan de manera especial y se eliminan del flujo de entrada. [8] [9]
modo crudo
El modo sin procesar es el otro de los dos modos de caracteres por vez. La disciplina de línea no realiza ninguna edición de línea, y las secuencias de control tanto para las funciones de edición de línea como para los diversos caracteres especiales ("interrupción", "salida" y control de flujo) se tratan como una entrada de caracteres normal. Los programas de aplicación que leen desde el terminal reciben caracteres inmediatamente y reciben el flujo de caracteres completo sin modificaciones, tal como llegó desde el dispositivo terminal. [10] [8] [9]

En la interfaz de terminal POSIX, estos modos han sido reemplazados por un sistema de sólo dos modos de entrada: canónico y no canónico . El manejo de caracteres especiales que generan señales en la interfaz de terminal POSIX es independiente del modo de entrada y se puede controlar por separado.

Control de terminales

En la Séptima Edición de Unix no había control de trabajos de terminal y se consideraba que un grupo de procesos no era lo que se considera hoy en día.

Cada proceso del sistema tenía un único terminal de control o no tenía ninguno. Un proceso hereda su terminal de control de su padre. Se adquiría un terminal de control cuando un proceso sin terminal de control open()adquiría un archivo de dispositivo de terminal que no era ya el terminal de control de algún otro proceso. Todos los procesos que tenían el mismo terminal de control formaban parte de un único grupo de procesos . [11]

Interfaz de programación de aplicaciones

La interfaz programática para consultar y modificar todos estos modos y caracteres de control era la ioctl()llamada al sistema . (Esta reemplazó a las llamadas al sistema stty()y gtty()de la Sexta Edición de Unix.) [12] [13] Aunque los caracteres "borrar" y "matar" eran modificables desde sus valores predeterminados de y , durante muchos años después de la Séptima Edición la inercia del desarrollo significó que eran los valores predeterminados preestablecidos en los controladores de dispositivos terminales, y en muchos sistemas Unix, que solo modificaban la configuración de los dispositivos terminales como parte del proceso de inicio de sesión, en los scripts de inicio de sesión del sistema que se ejecutaban después de que el usuario hubiera ingresado el nombre de usuario y la contraseña, cualquier error en los mensajes de inicio de sesión y contraseña tenía que corregirse utilizando los caracteres clave de edición históricos heredados de los terminales de teletipo. [4]#@

Las constantes simbólicas, cuyos valores fueron fijados y definidos, y las definiciones de la estructura de datos de la interfaz programática fueron definidas en el sgtty.hencabezado del sistema. [8]

ioctl()operaciones

Las ioctl()operaciones fueron las siguientes:

La sgttybestructura de datos

Una estructura de datos utilizada por las llamadas al sistema de terminal es la sgttybestructura, cuya definición en lenguaje de programación C es la siguiente: [14]

struct sgttyb { char sg_ispeed ; // Velocidad de entrada char sg_ospeed ; // Velocidad de salida char sg_erase ; // Borrar carácter char sg_kill ; // Matar carácter char sg_flags ; // Banderas de control } ;                       

A diferencia de la interfaz de terminal POSIX, la interfaz de terminal Unix de Séptima Edición registraba las velocidades de entrada y salida en baudios directamente en la estructura de datos. [15]

Las velocidades de entrada y salida en los campos sg_ispeedy sg_ospeederan las del DEC DH-11, y eran los números del 0 al 15, representados por las constantes simbólicas (en orden ascendente) B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400, B4800, B9600, EXTA, y EXTB, donde la tasa de baudios era la que indica el nombre (siendo las dos últimas "externa A" y "externa B"). Establecer una tasa de baudios de cero obligaba al controlador del terminal a colgar un módem (si el terminal era un dispositivo de módem). [14]

Los campos sg_erasey sg_killeran simplemente los valores de los caracteres "borrar" y "matar", respectivamente, con valores predeterminados (ASCII) para ' # ' y ' @ ' respectivamente. [14]

El sg_flagscampo especifica varios indicadores de control de entrada y salida, como en la siguiente tabla.

La tcharsestructura de datos

Una estructura de datos utilizada por las llamadas al sistema de terminal es la tcharsestructura, cuya definición en lenguaje de programación C es la siguiente: [16]

struct tchars { char t_intrc ; // Interrupción char t_quitc ; // Salir char t_startc ; // Iniciar char t_stopc ; // Detener char t_eofc ; // Fin del archivo char t_brkc ; // Salto (alternativa al carácter LF cableado con el mismo efecto) } ;                           

Los valores de estos campos eran los valores de los distintos caracteres especiales configurables mediante programación. Un valor -1 en cualquier campo deshabilitaba su reconocimiento por parte del controlador de la terminal. [16]

Referencias

  1. ^ Bourne 1983, pág. 8.
  2. ^ Véase Bourne 1983, pág. 130-131.
  3. ^Ab Bourne 1983, pág. 287.
  4. ^Ab Christian 1988, pág. 26.
  5. ^ Leffler y col. 1989, pág. 262.
  6. ^ Bourne 1983, págs. 132-133.
  7. ^ Leffler y col. 1989, pág. 259–260.
  8. ^ abc Bourne 1983, pág. 288.
  9. ^ ab Leffler y otros, 1989, pág. 260.
  10. ^ Bourne 1983, pág. 132.
  11. ^ Bourne 1983, pág. 130.
  12. ^ Bourne 1983, pág. 133.
  13. ^ Cristiano 1988, pág. 393.
  14. ^ abc Bourne 1983, pág. 286.
  15. ^ Zlotnick 1991, pág. 166.
  16. ^Ab Bourne 1983, pág. 289.

Bibliografía