La interfaz de terminal de la Séptima Edición de Unix 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 la Séptima Edición de Unix . Ha sido reemplazada en gran medida por la interfaz de terminal POSIX .
Conceptos y descripción general
La interfaz de terminal proporcionada por Seventh Edition Unix y UNIX/32V , y también presentada por BSD versión 4 como el antiguo controlador de terminal , era simple y estaba orientada principalmente a los teletipos como terminales. La entrada se introducía línea por línea, y el controlador de terminal del sistema operativo (y no los propios terminales) proporcionaba capacidades básicas de edición de línea. El núcleo mantenía un búfer donde se realizaba la edición. Las aplicaciones que leían la entrada del terminal recibían el contenido del búfer solo cuando returnse pulsaba la tecla para finalizar la edición de línea. La tecla enviada desde el terminal al sistema borraba ("eliminaba") 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 tecla enviada desde la terminal al sistema borraría el último carácter del final del búfer de edición y normalmente se mostraría como un símbolo '', que los usuarios tendrían que reconocer como una indicación de "borrado" del carácter precedente (los teletipos no son físicamente capaces de borrar caracteres una vez impresos en el papel). [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]@@##
Desde el punto de vista de la programación, un dispositivo terminal tenía velocidades de transmisión y recepción en baudios , caracteres de "borrar" y "eliminar" (que realizaban la edición de línea, como se explicó), caracteres de "interrupción" y "salida" (que generaban señales a todos los procesos para los que el terminal era un terminal de control), caracteres de "inicio" y "parada" (utilizados para el control de flujo del software ), un carácter de "fin de archivo" (que actuaba como un retorno de carro excepto que era descartado del búfer por la read()llamada al sistema y, por lo tanto, potencialmente causaba que se devolviera un resultado de longitud cero) y varios indicadores de modo que determinaban si el controlador de terminal del kernel emulaba el eco local , si el control de flujo del módem estaba habilitado, las longitudes de varios retardos de salida, la asignación 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 la séptima edición de Unix eran:
- modo de línea (también llamado modo "cocido")
- En el modo de línea, la disciplina de línea realiza todas las funciones de edición de línea, reconoce los caracteres de control "interrupción" y "salida" y los transforma en señales que se envían a los procesos. Los programas de aplicación que leen desde la terminal reciben líneas completas una vez que el usuario ha finalizado la edición de línea pulsando Intro. [ 2 ] [ 7 ]
- modo de corte
- El modo cbreak es uno de los dos modos de lectura carácter a carácter. ( Stephen R. Bourne se refirió a él en tono de broma ( Bourne 1983 , p. 288) como un modo "medio cocido" y, por lo tanto, "poco hecho"). La disciplina de línea no realiza edición de línea, y las secuencias de control para las funciones de edición de línea se tratan como entrada de caracteres normal. Los programas de aplicación que leen desde la terminal reciben los caracteres inmediatamente, tan pronto como están disponibles en la cola de entrada para ser leídos. Sin embargo, los caracteres de control "interrupción" y "salida", así como los caracteres de control de flujo del módem, todavía se manejan de manera especial y se eliminan del flujo de entrada. [ 8 ] [ 9 ]
- modo sin procesar
- El modo sin procesar es el otro de los dos modos de lectura carácter por carácter. La disciplina de línea no realiza edición de línea, y las secuencias de control tanto para las funciones de edición de línea como para los distintos caracteres especiales ("interrupción", "salir" y control de flujo) se tratan como entrada de caracteres normal. Los programas de aplicación que leen desde el terminal reciben los caracteres inmediatamente y reciben todo el flujo de caracteres sin alteraciones, tal como proviene del propio dispositivo terminal. [ 10 ] [ 8 ] [ 9 ]
En la interfaz de terminal POSIX, estos modos han sido reemplazados por un sistema de solo 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.
Terminales de control
En la séptima edición de Unix no existía el control de trabajos de terminal y un grupo de procesos no se consideraba lo que se considera hoy en día.
Cada proceso del sistema tenía un único terminal de control o ninguno. Un proceso hereda su terminal de control de su proceso padre. Se adquiría un terminal de control cuando un proceso sin terminal de control open()utilizaba un archivo de dispositivo de terminal que no era el terminal de control de 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 . (Esto reemplazó las llamadas al sistema stty()y de la Sexta Edición de Unix). [ 12 ] [ 13 ] Aunque los caracteres "borrar" y "eliminar" eran modificables desde sus valores predeterminados de y , durante muchos años después de la inercia del desarrollo de la Séptima Edición, significaron que eran los valores predeterminados preestablecidos en los controladores de dispositivos de terminal, y en muchos sistemas Unix, que solo alteraban la configuración del dispositivo de terminal 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 las solicitudes de inicio de sesión y contraseña tenía que corregirse utilizando los caracteres de teclas de edición histórica heredados de las terminales de teletipo. [ 4 ]gtty()#@
Las constantes simbólicas, cuyos valores eran fijos y definidos, y las definiciones de la estructura de datos de la interfaz programática se definieron en el sgtty.hencabezado del sistema. [ 8 ]
ioctl()operaciones
Las ioctl()operaciones fueron las siguientes:
La sgttybestructura de datos
Una de las estructuras de datos utilizadas 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 ; // Indicadores de control };A diferencia de la interfaz de terminal POSIX, la interfaz de terminal Unix de séptima edición registraba las velocidades de transmisión de entrada y salida 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 velocidad en baudios era como en el nombre (siendo los dos últimos "externo A" y "externo B"). Establecer una velocidad en baudios de cero obligaba al controlador del terminal a colgar un módem (si el terminal era un dispositivo módem). [ 14 ]
Los campos sg_erasey sg_killeran simplemente los valores de los caracteres "borrar" y "eliminar", respectivamente, tomando por defecto los valores (ASCII) para ' # ' y ' @ ' respectivamente. [ 14 ]
El sg_flagscampo especificaba varios indicadores de control de entrada y salida, como se muestra en la siguiente tabla.
La tcharsestructura de datos
Una de las estructuras de datos utilizadas 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 ; // Salida char t_startc ; // Inicio char t_stopc ; // Parada char t_eofc ; // Fin de archivo char t_brkc ; // Interrupción (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 de -1 en cualquier campo deshabilitaba su reconocimiento por parte del controlador de terminal. [ 16 ]
Referencias
- ↑ Bourne 1983 , pág. 8.
- 1 2 Bourne 1983 , págs . 130-131.
- 1 2 Bourne 1983 , pág. 287.
- 1 2 Christian 1988 , pág. 26.
- ^ Leffler y col. 1989 , pág. 262.
- ↑ Bourne 1983 , págs . 132-133.
- ^ Leffler y col. 1989 , pág. 259 – 260.
- 1 2 3 Bourne 1983 , pág. 288.
- ^ Leffler y col. 1989 , pág. 260.
- ↑ Bourne 1983 , pág. 132.
- ↑ Bourne 1983 , pág. 130.
- ↑ Bourne 1983 , pág. 133.
- ↑ Christian 1988 , pág. 393.
- 1 2 3 Bourne 1983 , pág. 286.
- ↑ Zlotnick 1991 , pág. 166.
- 1 2 Bourne 1983 , pág. 289.
Bibliografía
- Bourne, Stephen R. (1983). El sistema UNIX . Serie internacional de ciencias de la computación. Addison-Wesley. ISBN 978-0-201-13791-0.
- Christian, Kaare (1988). El sistema operativo UNIX (2.ª ed.). John Wiley & Sons. ISBN 978-0-471-84781-6.
- Leffler, Samuel J.; McKusick, Marshall Kirk ; Karels, Michael J.; Quarterman, John S. (1989). "Manejo de terminales". Diseño e implementación del sistema operativo UNIX 4.3BSD . Serie Addison-Wesley en ciencias de la computación. Addison-Wesley. ISBN 978-0-201-06196-3.
- Zlotnick, Fred (1991). "Control de dispositivos terminales". El estándar POSIX.1: una guía para programadores . Benjamin/Cummings Pub. Co. ISBN 978-0-8053-9605-8.
- Interfaces de programación de aplicaciones
- Bell Labs Unices
- Distribución de software de Berkeley
- terminales de computadora
- Comunicación técnica