sous-système tty
AIX est un système d'exploitation multi-utilisateurs qui permet l'accès des utilisateurs à partir de périphériques locaux ou distants. La couche de communication qui prend en charge cette fonction est le sous-système tty.
La communication entre les dispositifs terminaux et les programmes qui lisent et écrivent sur eux est contrôlée par l'interface tty. Exemples de dispositifs tty :
- Modems
- Terminaux ASCII
- Consoles système
- Imprimantes série
- Xterms ou aixterms sous X-Windows
Cette présentation fournit des informations sur les rubriques suivantes:
Objectifs du sous-système TTY
Le sous-système tty est responsable de:
- Contrôle du flux physique des données sur les lignes asynchrones (y compris la vitesse de transmission, la taille des caractères et la disponibilité des lignes)
- L'interprétation des données par la reconnaissance des caractères spéciaux et l'adaptation aux langues nationales
- Contrôle des travaux et de l'accès aux terminaux en utilisant le concept de contrôle des terminaux
Un terminal de contrôle gère les opérations d'entrée et de sortie d'un groupe de processus. Le fichier spécial tty prend en charge l'interface de terminal de contrôle. Dans la pratique, les programmes utilisateur ouvrent rarement des fichiers de terminal, tels que dev/tty5. Ces fichiers sont ouverts par une commande getty ou rlogind et deviennent les périphériques d'entrée et de sortie standard de l'utilisateur.
modules de sous-système tty
Pour effectuer ses tâches, le sous-système tty est composé de modules ou de disciplines. Un module est un ensemble de règles de traitement qui régissent l'interface de communication entre l'ordinateur et un périphérique asynchrone. Des modules peuvent être ajoutés et supprimés dynamiquement pour chaque unité tty.
Le sous-système tty prend en charge trois types principaux de modules:
- pilotes tty
Les pilotes tty, ou les disciplines matérielles, contrôlent directement le matériel (périphériques tty) ou le pseudo-matériel (périphériques pty). Ils effectuent l'entrée et la sortie réelles de l'adaptateur en fournissant des services aux modules situés au-dessus. Les services sont un contrôle de flux et une sémantique spéciale lorsqu'un port est ouvert.
Les pilotes tty suivants sont fournis:
Pilote Descriptif cxma Contrôleur PCI asynchrone 128 ports. cxpa Contrôleur PCI asynchrone à 8 ports. Lft Terminal à fonction basse. Le nom de l'unité tty est /dev/lftY, où Y > = 0. sa Carte PCI EIA-232 asynchrone à 2 ports. sf Récepteurs / émetteurs-récepteurs asynchrones universels (UART) sur la carte système. La section Pilotes TTY fournit plus d'informations.
- Disciplines de ligne
Les disciplines de ligne permettent l'édition, le contrôle des travaux et l'interprétation des caractères spéciaux. Ils effectuent toutes les transformations qui se produisent sur les flux de données entrants et sortants. Les disciplines de ligne effectuent également la plupart du traitement des erreurs et de la surveillance du statut pour le pilote tty.
Les disciplines de ligne suivantes sont fournies:
- Modules de conversion
Les modules de convertisseur, ou disciplines de mappage, traduisent ou mappent les caractères d'entrée et de sortie.
Les modules de conversion suivants sont fournis:
Convertisseur Descriptif nls Prise en charge de la langue nationale pour le mappage de terminal ; ce convertisseur convertit les caractères entrants et sortants sur le flux de données, en fonction des mappes d'entrée et de sortie définies pour le port (voir la commande setmaps ) lc_sjis et uc_sjis Convertisseur supérieur et inférieur utilisé pour convertir les caractères multi-octets entre la norme SJIS (ShijeunesJapanese Industrial Standard) et le code AJEC (Advanced Japanese EUC Code) géré par la discipline de ligne ldterm . Modules de convertisseur fournit plus d'informations sur les convertisseurs.
Structure du sous-système TTY
Le sous-système tty est basé sur STREAMS. Cette structure basée sur STREAMS offre une modularité et une flexibilité, et active les caractéristiques suivantes:
- Personnalisation facile ; les utilisateurs peuvent personnaliser leur environnement de sous-système de terminal en ajoutant et en supprimant des modules de leur choix.
- Modules réutilisables ; par exemple, le même module de discipline de ligne peut être utilisé sur de nombreux périphériques tty avec des configurations différentes.
- Ajout facile de nouvelles fonctionnalités au sous-système terminal.
- Mise à disposition d'une interface tty homogène sur des périphériques hétérogènes.
La structure d'un flux tty est constituée des modules suivants:
- La tête de flux, qui traite les demandes de l'utilisateur. La tête de flux est la même pour tous les périphériques tty, quelle que soit la discipline de ligne ou le pilote tty utilisé.
- Un convertisseur supérieur facultatif (uc_sjis par exemple), un module convertisseur inséré au-dessus de la discipline de ligne pour convertir les données en amont et en aval.
- La discipline de ligne.
- Un convertisseur inférieur facultatif (lc_sjis par exemple), un module convertisseur inséré sous la discipline de ligne pour convertir les données en amont et en aval.
- Un module de mappage de caractères facultatif (nls), un module de conversion inséré au-dessus du pilote tty pour prendre en charge le mappage de terminal d'entrée et de sortie.
- La fin du flux: un pilote tty.
Sauf indication contraire, les modules d'internationalisation ne sont pas présents dans le flux tty.
Pour une imprimante série, les modules d'internationalisation ne sont généralement pas présents sur le flux ; par conséquent, la structure est plus simple.
Services communs
Les fichiers /usr/include/sys/ioctl.h et /usr/include/termios.h décrivent l'interface des services communs fournis par le sous-système tty. Le fichier ioctl.h , qui est utilisé par tous les modules, inclut la structure winsize , ainsi que plusieurs commandes ioctl. Le fichier termios.h inclut les sous-routines et les types de données compatibles avec POSIX .
Les services fournis sont regroupés et discutés ici en fonction de leurs fonctions spécifiques.
Services de contrôle du matériel
Les sous-routines suivantes sont fournies pour le contrôle matériel:
| Sous-routine | Descriptif |
|---|---|
| cfgetispeed | Obtient le débit en bauds d'entrée |
| cfgetospeed | Obtient le débit en bauds de sortie |
| cfsetispeed | Définit le débit en entrée en bauds |
| cfsetospeed | Définit le débit en bauds de sortie |
| ctcsendbreak | Envoie une interruption sur une ligne de données série asynchrone |
Services de contrôle de flux
Les sous-routines suivantes sont fournies pour le contrôle de flux:
Informations sur les terminaux et contrôle
Les sous-routines suivantes sont fournies pour les informations et le contrôle de terminal:
| Sous-routine | Descriptif |
|---|---|
| isatty | Détermine si l'unité est un terminal |
| setcsmap | Lit un fichier de mappe de jeux de codes et l'affecte au périphérique d'entrée standard |
| tcgetattr | Obtient l'état du terminal |
| tcsetattr | Définit l'état du terminal |
| ttylock, ttywait, ttyunlockou ttylocked | Contrôle les fonctions de verrouillage tty |
| nom_ttyle | Obtient le nom d'un terminal |
Services de taille de fenêtre et de terminal
Le noyau stocke la structure winsize afin de fournir une interface cohérente pour la taille du terminal ou de la fenêtre en cours. La structure winsize contient les zones suivantes:
| Zone | Descriptif |
|---|---|
| ws_row | Indique le nombre de lignes (en caractères) sur la fenêtre ou le terminal |
| ws_col | Indique le nombre de colonnes (en caractères) dans la fenêtre ou le terminal |
| ws_xpixel | Indique la taille horizontale (en pixels) de la fenêtre ou du terminal |
| ws_ypixel | Indique la taille verticale (en pixels) de la fenêtre ou du terminal |
Par convention, la valeur 0 dans toutes les zones de structure winsize indique que la structure n'a pas encore été configurée.
| Sous-routine | Descriptif |
|---|---|
| termdef | Analyse les caractéristiques du terminal. |
| TIOCGWINSZ | Extrait la taille de la fenêtre. L'argument de cette opération ioctl est un pointeur vers une structure winsize , dans laquelle est placée la taille du terminal ou de la fenêtre en cours. |
| TIOCSWINSZ | Définit la taille de la fenêtre. L'argument de cette opération ioctl est un pointeur vers une structure winsize , qui est utilisée pour définir les informations de taille de fenêtre ou de terminal en cours. Si les nouvelles informations diffèrent de la précédente, un signal SIGWINCH est envoyé au groupe de processus terminal. |
Services de gestion de groupe de processus
Les sous-routines suivantes sont fournies pour la gestion des groupes de processus:
Opérations de taille de mémoire tampon
Les opérations ioctl suivantes sont utilisées pour définir la taille des tampons d'entrée et de sortie du terminal. L'argument de ces opérations est un pointeur vers un entier spécifiant la taille de la mémoire tampon.
| Opérations | Descriptif |
|---|---|
| TXSETIHOG | Définit la limite du nombre de caractères d'entrée pouvant être reçus et stockés dans les mémoires tampon tty internes avant que le processus ne les lise. La limite de cochon par défaut est de 8192 caractères. Une fois que la limite de porc plus un caractère est atteinte, une erreur est consignée dans le journal des erreurs et la mémoire tampon d'entrée est vidée. Le nombre de porcs ne doit pas être trop élevé, car la mémoire tampon est allouée à partir de la mémoire réservée par le système. |
| TXSETOHOG | Définit la limite de cochon pour le nombre de caractères de sortie mis en mémoire tampon pour l'entrée d'écho. La limite de cochon par défaut est de 8192 caractères. Une fois la limite de sortie de porc atteinte, les caractères d'entrée ne sont plus renvoyés. Le nombre de porcs ne doit pas être trop élevé, car la mémoire tampon est allouée à partir de la mémoire réservée par le système. |
Synchronisation
Le sous-système tty tire parti de la synchronisation fournie par STREAMS. Les modules de flux tty sont configurés avec la synchronisation au niveau des paires de files d'attente. Cette synchronisation permet la parallélisation du traitement pour deux flux différents.