2016-04-12 2 views
2

J'ai trouvé this un texte génial expliquant beaucoup de choses sur les appareils TTY. Il se concentre sur la relation entre un appareil ATS et un shell (et ses emplois générés). Mais il en dit peu sur la relation entre l'émulateur de terminal et le dispositif TTY; et maintenant je me pose des questions à ce sujet. Je ai googlé, mais je ne pouvais pas trouver les réponses ...Quelle est la relation entre un émulateur de terminal et un périphérique TTY?

1) Quel type de logique d'entrée est responsable de l'émulateur de terminal? Il envoie simplement chaque code de caractère (reçu par l'événement de fenêtre) à l'appareil TTY, ou il fait un traitement plus compliqué avant/pendant la transmission au TTY? Et comment ces codes de caractères sont envoyés à l'appareil TTY? Via le fichier?

2) Après un processus de premier plan appelant write() au fichier de dispositif TTY, a.k.a. stdout/stderr, que se passe-t-il? Comment ces données atteignent le processus de l'émulateur de terminal, de sorte qu'il peut être rendu? Encore une fois, via le fichier?

3) L'émulateur de terminal est-il responsable de "l'allocation" d'un téléscripteur? Les périphériques TTY peuvent être créés "à la volée" par le noyau, ou y a-t-il un nombre limité de périphériques TTY disponibles que le noyau peut gérer?

+0

Via des dispositifs pseudoterminaux (pty). L'article lié les mentionne brièvement, mais ils sont au cœur de votre question, alors vous voudrez peut-être chercher une explication plus approfondie. Commencez par googler "pty". –

Répondre

2

Tout d'abord, répondez vous-même à ce qu'est un terminal.

Historiquement, les dispositifs terminaux qui transformaient les caractères de sortie des programmes en dessins visibles dans certains périphériques de sortie (une imprimante ou un tube à rayons cathodiques) et envoyaient des caractères d'entrée aux programmes (ligne série. De ce point de vue, un émulateur de terminal est une application logicielle qui s'exécute normalement sur un ordinateur qui n'a pas été conçu pour servir de terminal afin de se comporter comme tel. Normalement, cela signifie qu'il recevra l'entrée d'une ligne série pour la sortie à l'utilisateur (par exemple dans une fenêtre spécifique sur l'écran) et traitera l'entrée de l'utilisateur sur cette fenêtre et l'enverra à un ordinateur distant pour traitement dans le programme Là. Par contre, les lignes tty étaient des lignes série utilisées pour envoyer et recevoir des caractères. Sous UNIX, ils avaient un pilote commun, qui traitait les caractères reçus du terminal réel. Par exemple, le pilote unix recueille tous les caractères, autorisant certaines modifications via l'utilisation de la touche de retour arrière, et ne rend ces données disponibles au programme exécuté sur l'ordinateur qu'après que l'utilisateur (le terminal) a envoyé la clé RETURN.

Il y a quelque temps, la nécessité d'avoir des périphériques terminaux virtuels (périphériques qui n'ont pas un terminal réel derrière, mais un autre programme à la place) où nécessaire pour exécuter plusieurs programmes programme le périphérique de connexion (par exemple , pour ne pas renvoyer les caractères de mot de passe au terminal, ou pour faire le caractère par entrée de caractères, au lieu de ligne par ligne) et pour permettre aux programmes de conduite dans le programme TTY virtuel d'agir sur ces programmations.

terminaux virtuels viennent par paires et les programmes émulant terminaux reçoivent le côté maître du terminal virtuel, l'exécution du programme réel dans la partie esclave (par exemple un shell de connexion pour permettre une fenêtre pseudoterminal base)

Maintenant, la répond à vos questions:

1) La logique d'entrée du terminal est gérée au niveau du pilote de terminal virtuel de l'équipement esclave, comme si le programme qui le gère possède un contrôle complet du mappage de caractères ou de l'entrée ligne/brut.D'ailleurs, le programme attaché au côté maître n'obtient que les caractères bruts, sans aucune interprétation, de sorte qu'il peut, par exemple, envoyer un caractère Control-C pour interrompre le programme s'exécutant du côté de l'esclave. 2) lorsque le programme qui s'exécute du côté esclave écrit, cette écriture passe par le pilote tty, qui fait toutes les hypothèses de discipline de ligne (par exemple pour ajouter un caractère CR avant tout caractère LF pour faire un Séquence CRLF, en cas de mode de fonctionnement cuit terminal) le programme fonctionnant du côté maître recevra les caractères bruts (même, par exemple un Ctrl-C écrit par le programme) En entrée, le dispositif tty convertit le caractère d'entrée (cas d'un Ctrl-C) et envoie le signal approprié au groupe de processus attaché à ce pseudo-terminal. 3) Historiquement, les terminaux apparaissaient comme des paires de périphériques (comme un type spécifique de pilote de périphérique de caractères de terminal), et en tant que tels, ils avaient des nœuds avec des paires de numéros majeurs/mineurs. Cela a limité leur nombre à une valeur d'administration correctement configurée. De nos jours, linux, par exemple, permet l'allocation dynamique de périphériques, ce qui permet d'allouer dynamiquement des paires de périphériques. Mais le nombre maximum continue à être borné (pour des raisons d'efficacité et de mise en œuvre)