Il n'est pas indispensable de lire cette section; elle peut toutefois renforcer vos connaissances en télécommunications ou Unix.
Les verrous (locks) sont de simples fichiers signifiant qu'un
périphérique est en cours d'utilisation. Ils sont stockés dans
/usr/spool/uucp
ou dans /var/lock
.
Les locks Linux sont nommés LCK..<name
, où <name
est soit le nom d'un périphérique, soit celui d'un site UUCP.
Certains processus créent des verrous pour avoir l'exclusivité
d'utilisations de périphériques particuliers~; par exemple, lors
d'un appel modem, un fichier verrou est créé pour prévenir les
autres processus que le modem n'est pas disponible. Les fichiers
verrous contiennent le PID du processus ayant verrouillé le
périphérique. La plupart des programmes vérifient l'existence
et la validité du verrou, en s'assurant de l'existence dans la
table des processus du programme l'ayant créé. Si le verrou
est valide, le processus cherchant à utiliser le périphérique
verrouillé doit (devrait) stopper. Si le verrou n'est pas valide,
certains programmes l'effacent et créent le leur à la place.
D'autres abandonnent en arguant que le périphérique est en
cours d'utilisation.
``baud'' et ``bps'' sont peut-être les termes les plus fréquemment utilisés à mauvais escient dans le domaine de l'informatique et des télécoms. Beaucoup les utilisent de manière interchangeables, alors qu'ils recouvrent des choses différentes~!
Le débit en bauds mesure le nombre de changements par seconde du signal émis par un modem (modulateur-demodulateur). Par exemple, un débit de 1200 bauds suppose un changement de signal toutes les 833 microsecondes. Les débits courants (en bauds) sont 50, 75, 110, 300, 600, 1200 et 2400. La plupart des modems à hauts débits fonctionne à 2400 bauds. Les lignes téléphoniques vocales ont une bande passante qui rend les débits plus élevés difficiles à atteindre, et on ne peut les maintenir que sur des lignes de qualité irréprochable. ``baud'' vient du nom d'Emile Baudot, l'inventeur du télégraphe asynchrone.
Le débit en bps est le nombre de bits transmis par seconde. Les débits courants (en bps) sont 50, 75, 110, 300, 1200, 2400, 9600, ... 115200. Avec la compression V.42bis, des débits théoriques de 115200 bps sont possibles. C'est ce que la plupart des gens entendent lorsqu'ils mésusent du terme ``baud''.
Donc, si les modems à haut débit font du 2400 bauds, comment peuvent-ils envoyer 14400 bps~? Les modems obtiennent un débit bps > au débit en bauds en codant plusieurs bits par baud. Dés que 2 ou plus bits sont codés sur un seul baud, le débit bps est supérieur au débit en baud. Lorsque votre modem se connecte à 14400 bps, il envoie 6 bits par baud.
Quand cette méprise a-t-elle commencé~? Bin, quand les modems lents d'aujourd'hui étaient les modems haut débit d'antan, les débits en bps étaient les même que les débits en bauds. Un baud transmettait un bit unique. On utilisait donc indifféremment les termes baud et bps, puisqu'ils étaient représentés par les mêmes quantités. Tout ceci a changé avec l'avénement des modems à grande vitesse, lorsque le nombre de bits par baud a dépassé 1.
Les UART (Universal Asyncronous Receiver Transmitter, ou émetteur récepteur asynchrone universel) sont des chips logés sur la carte série de votre PC. Leur rôle est de traduire les données (octets) en bits, d'envoyer chaque bit individuel par la ligne série, et de reconstruire les données en réception. Ils traitent les données par paquet de 8 bits, ou un octet, ce qui est la taille d'un caractère ASCII.
Supposons que l'on ait un terminal connecté à un PC. Le terminal transmet chaque caractère tapé à son UART~; l'UART envoie le caractère sur la ligne série, bit par bit, à une cadence précise~. En réception, l'UART du PC reconstruit le caractère (un octet) en regroupant les bits reçus et le place dans un tampon.
Il existe plusieurs types d'UART~; vous connaissez probablement les UART passifs - le 8250 et le 16450 - et les UART actifs, ou FIFO, tels que le 16550A. Pour comprendre ce qui les différencie, considérons ce qui arrive lorsqu'un UART envoie ou réceptionne un octet.
L'UART ne sait rien faire avec les données, à part les envoyer ou les recevoir. La CPU reçoit une interruption chaque fois qu'un octet est transmis ou reçu. Elle prend alors l'octet reçu dans le registre de l'UART, et le place quelque part en mémoire ou, selon le cas, donne à l'UART un autre octet à transmettre. Les UART 8250 et 16450 ne disposent que d'un octet de mémoire tampon, ce qui impliquent qu'ils doivent interrompre la CPU chaque fois qu'un octet est transmis ou reçu. Pour de faibles vitesses de transmission, cela ne pose pas de problème. En revanche, lorsque l'on atteint des vitesses élevées, la CPU passe son temps à s'occuper des interruptions de l'UART, et n'est pas disponible pour d'autres tâches. Dans certains cas, la CPU ne peut pas assurer le service de l'interruption UART dans les temps, et le flot des données en entrée écrase la mémoire tampon.
Entrée des UART 16550A. Ces puces sont équipées d'un tampon FIFO de 16 octets. Elles peuvent donc recevoir ou émettre 16 octets avant d'interrompre la CPU. Outre le délai de réaction moins critique demandé à la CPU, elles lui permettent de transmettre par paquet de 16 octets. Bien que le seuil d'interruption soit rarement fixé à 16 octets, cela représente un progrès notoire par rapport aux UART passifs, équipés d'un seul octet tampon. La CPU, recevant moins d'interruptions, est plus disponible pour d'autres tâches. Les données ne sont pas perdues, et tout le monde est bien content. (Il existe aussi un UART 16550, mais il fonctionne comme un 16450)
Jusqu'à 38400 bps, les UART 8250 ou 16450 sont un choix raisonnable. Au delà, on peut constater des pertes de données, et une réduction de la vitesse de l'ordinateur. D'autres systèmes d'exploitation pour PC (définition élargie) n'étant pas multitache utilisent mieux les 8250 ou les 16450. C'est pourquoi les utilisateurs ne constatent aucune perte de données, jusqu'à ce qu'ils passent sous Linux.
Certaines cartes multiséries intelligente font l'économie d'UARTs, et les remplacent par des puces DSP effectuant des contrôles supplémentaires, allégeant ainsi la charge de la CPU. Les cartes Cyclades Cyclom, ainsi que les Stallion EasyIO utilisent par exemple des chips RISC CD-1400 de Cirrus Logic.
Ayez toutefois présent à l'esprit que les UART passifs ne sont pas intrinsèquement mauvais, seulement inadaptés aux forts débits. Une souris, ou un terminal peuvent se connecter sans problème sur un UART passif. En revanche, pour un modem rapide, il faut envisager un 16550A.
Pour quelques sous de plus, vous pouvez acheter une carte série équipée de 16550A~; demandez au vendeur quel type d'UART est installé sur la carte. Il est également possible de remplacer des 16450 par des 16550A, les deux puces ayant un brochage compatible. Certaine cartes sont équipée d'UART démontables, et dans le cas contraire, allez-y au fer à souder. Remarquez, il est plus simple d'acheter une nouvelle carte, si vous en vez les moyens. Elles coûtent moins de 50 US$.
/dev/cua
N et /dev/ttyS
N~? La seule différence est dans la manière dont le périphérique est
ouvert. Le périphérique d'entrée /dev/ttyS
N est ouvert
en mode bloquant, jusqu'à ce que CD soit positionné (ie, quelqu'un se
connecte). Ainsi, lorsque l'on souhaite utiliser /dev/cua
N,
il n'y a pas de conflit avec les programmes surveillant /dev/ttyS
N.
La distinction est faite pour permettre l'utilisation d'un port unique en entrée et en sortie.
Chapitre suivant, Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre