Les périphériques de stockage parlent à l’ordinateur ; les périphériques d’entrée-sortie parlent aux humains. Un clavier transforme des pressions de doigt en bits, un écran transforme des bits en lumière, une caméra transforme de la lumière en bits, une imprimante transforme des bits en encre. Chacun d’eux est un petit système informatique à part entière, avec des capteurs ou des émetteurs, un contrôleur et un protocole pour dialoguer avec l’hôte. Ce chapitre examine le fonctionnement des plus courants au niveau du périphérique lui-même. La façon dont le système d’exploitation les pilote est traitée dans le chapitre sur les fichiers, périphériques et E/S, et les bus sur lesquels ils se branchent dans le chapitre sur PCI Express et USB.
La section de Tanenbaum sur les périphériques d’E/S date du début des années 2010, et certains de ses périphériques — tubes cathodiques, souris à boule, Wiimote et Kinect — ont disparu depuis. Les principes, pour la plupart, sont restés.
Les claviers : une matrice d’interrupteurs
Sous chaque touche se trouve un interrupteur : un dôme en caoutchouc qui pousse une pastille conductrice contre le circuit imprimé ou, dans les claviers « mécaniques », un interrupteur à ressort séparé pour chaque touche. Un clavier de plus de cent touches ne relie pas chaque interrupteur au contrôleur par son propre fil. Les interrupteurs sont placés aux croisements d’une matrice de lignes et de colonnes : appuyer sur une touche relie sa ligne à sa colonne. Une matrice 8 × 16 dessert 128 touches avec seulement 24 fils.
Le microcontrôleur du clavier balaie la matrice en permanence. Il alimente une ligne à la fois et lit toutes les colonnes : une colonne qui voit la ligne alimentée a un interrupteur fermé à ce croisement. Balayer toutes les lignes prend bien moins d’une milliseconde, et l’opération se répète sans cesse.
Les matrices ont un défaut. Si trois touches situées à trois coins d’un rectangle sont enfoncées — par exemple ligne 1 colonne 1, ligne 1 colonne 2 et ligne 2 colonne 1 —, le courant peut circuler de la ligne 2 à travers ces trois interrupteurs jusqu’à la colonne 2, et le quatrième coin semble enfoncé lui aussi : c’est le ghosting (touche fantôme). C’est la même ambiguïté que celle que décrit Tanenbaum pour les premiers écrans tactiles. Les claviers bon marché détectent ce motif et ignorent la touche en trop, ce qui limite le nombre de touches qu’on peut maintenir à la fois ; les claviers dotés d’une diode en série avec chaque interrupteur bloquent le chemin parasite et prennent en charge le n-key rollover, un nombre quelconque de touches simultanées.
L’anti-rebond
Un contact mécanique ne se ferme pas proprement. Le métal rebondit, et pendant quelques millisecondes l’interrupteur se connecte et se déconnecte plusieurs fois avant de se stabiliser. Lue naïvement, une seule pression ressemble à plusieurs. Le contrôleur doit appliquer un anti-rebond (debouncing) : n’accepter un nouvel état qu’après qu’il est resté stable un certain temps.
Voici un anti-rebond appliqué à une séquence d’échantillons enregistrée, 1 signifiant « contact fermé ». La touche est enfoncée une seule fois, mais les échantillons rebondissent à la descente comme à la remontée :
À essayer : Appuyez sur Step pour exécuter une instruction, Run pour animer ou Continue pour aller au bout ; les boutons L2 à L7 changent de niveau, vers le bas ou le haut.
- /* 1 = contact closed. The key is pressed once, but the contacts bounce. */
- char raw[] = "0001011011111111111110100100000000";
- int main() {
- int stable = 0, count = 0, presses = 0, edges = 0;
- for (int t = 1; raw[t]; t++) {
- int now = raw[t] - '0';
- if (now != raw[t - 1] - '0') edges++; /* a naive reader counts edges */
- if (now == stable) { count = 0; continue; }
- if (++count == 5) { /* 5 equal samples in a row: believe it */
- stable = now;
- count = 0;
- if (stable) presses++;
- }
- }
- printf("rising+falling edges: %d, debounced presses: %d\n", edges, presses);
- return presses;
- }
Le signal brut compte 10 fronts — cinq pressions apparentes —, mais l’anti-rebond ne signale 1 seule pression. Il ne change d’avis qu’après cinq échantillons consécutifs en désaccord avec l’état courant ; les rebonds ne durent jamais aussi longtemps. Les vrais claviers font de même avec quelques millisecondes de lectures stables, parfois avec une minuterie séparée pour chaque touche.
De la touche à l’ordinateur : l’USB HID
Le livre décrit le clavier de PC de l’époque PS/2 : chaque appui et chaque relâchement déclenche une interruption, et le gestionnaire lit le numéro de la touche dans un registre du contrôleur de clavier. Les claviers d’aujourd’hui sont des périphériques USB ou Bluetooth — celui du Mac sur lequel ce chapitre a été écrit est un clavier Bluetooth —, et ils suivent la classe HID (human interface device, périphérique d’interface humaine), commune aux deux bus.
Un clavier USB n’interrompt rien. Le contrôleur hôte l’interroge (polling) à un intervalle fixe demandé par le clavier, jusqu’à une fois par milliseconde pour un périphérique full speed, et le clavier répond par un rapport décrivant son état courant. Dans le rapport « boot » standard de 8 octets :
| Octet | Contenu |
|---|---|
| 0 | touches de modification, un bit chacune : Ctrl, Maj, Alt, GUI gauches (bits 0–3), Ctrl, Maj, Alt, GUI droites (bits 4–7) |
| 1 | réservé |
| 2–7 | jusqu’à six touches actuellement enfoncées, sous forme de codes d’usage (a = 0x04, b = 0x05, …) |
Maintenir Maj gauche et M donne 02 00 10 00 00 00 00 00 : le bit 1 de l’octet des modificateurs est Maj, et 0x10 est M. Il n’y a pas de message « appui » ni « relâchement » : l’hôte compare chaque rapport au précédent pour trouver ce qui a changé. Les six emplacements de touches limitent le rapport boot à six touches simultanées en plus des modificateurs ; les claviers en n-key rollover utilisent un format de rapport plus long. Comme le dit Tanenbaum, transformer les codes de touches en caractères — Maj + M en « M », sur une disposition française ou américaine — est entièrement l’affaire du logiciel.
Les souris fonctionnent de la même façon. Le livre décrit les souris à boule et un protocole série de 3 octets. Une souris moderne possède un capteur optique — une minuscule caméra qui photographie la surface du bureau des milliers de fois par seconde et calcule de combien la texture s’est déplacée d’une image à l’autre — et envoie des rapports HID avec l’état de ses boutons et le déplacement relatif en x et en y depuis le dernier rapport.
Les écrans tactiles
L’écran tactile de tous les téléphones et tablettes est capacitif projeté. Deux couches d’électrodes transparentes, généralement en oxyde d’indium-étain, courent en lignes et en colonnes, séparées par un mince isolant ; chaque croisement forme un petit condensateur. Un doigt, conducteur et couplé à la masse, détourne une partie du champ aux croisements situés sous lui et modifie leur capacité.
Le contrôleur mesure la capacité mutuelle de chaque croisement individuellement : il alimente une ligne à la fois et mesure la charge couplée dans chaque colonne — la même idée de balayage que pour une matrice de clavier. Comme chaque croisement est mesuré séparément, deux doigts produisent deux taches distinctes, et le ghosting qui affligeait les écrans résistifs et infrarouges disparaît. Le contrôleur transforme la grille de mesures en coordonnées de nombreuses fois par seconde ; reconnaître les tapotements, balayages et pincements est l’affaire du système d’exploitation.
Tanenbaum remarque qu’un stylo ou un doigt ganté n’a aucun effet sur un écran capacitif. C’est toujours vrai des objets ordinaires, mais les stylets actifs comme l’Apple Pencil émettent leur propre signal, que l’écran détecte, et certains gants sont fabriqués avec des bouts de doigts conducteurs.
Les écrans : LCD et OLED
Les tubes cathodiques dont part le livre ont disparu. Les écrans plats reposent sur deux technologies principales.
Un LCD (écran à cristaux liquides) ne produit pas de lumière ; il la filtre. Un rétroéclairage traverse un polariseur, une couche de cristaux liquides, des filtres de couleur et un second polariseur. Un champ électrique appliqué à chaque sous-pixel modifie la façon dont le cristal liquide fait tourner la polarisation de la lumière, et donc la quantité qui traverse le second polariseur. Chaque sous-pixel possède son propre transistor en couche mince qui maintient sa tension entre deux rafraîchissements : c’est une matrice active, comme le décrit Tanenbaum. La conception nématique en hélice (TN) qu’explique le livre ne se trouve plus guère que dans les dalles bon marché ; les conceptions IPS et VA offrent de meilleurs angles de vision et un meilleur contraste. Comme le rétroéclairage est toujours allumé derrière le cristal, les noirs ne sont jamais complètement noirs ; les rétroéclairages mini-LED le divisent en milliers de zones qui s’atténuent indépendamment.
Un écran OLED (diode électroluminescente organique), que le livre présente comme « à l’horizon », est devenu la norme dans les téléphones, et il est courant dans les ordinateurs portables, les tablettes, les téléviseurs et les moniteurs. Chaque sous-pixel est sa propre source de lumière. Un pixel noir est simplement éteint, si bien que le contraste est pratiquement infini, et il n’y a pas de rétroéclairage à alimenter. Principales faiblesses : les matériaux organiques vieillissent à l’usage, le bleu le plus vite, si bien qu’une image fixe affichée très longtemps peut laisser une légère trace (le marquage, ou burn-in), et une très forte luminosité est plus difficile à obtenir qu’avec un rétroéclairage.
Les écrans se rafraîchissent aussi plus vite. Le livre donne 60 à 100 rafraîchissements par seconde ; les téléphones et les portables fonctionnent aujourd’hui couramment jusqu’à 120 Hz, et les moniteurs de jeu bien plus vite.
Le livre affirme aussi que « n’importe quelle couleur peut être construite » en mélangeant rouge, vert et bleu. Ce n’est pas tout à fait vrai. Trois primaires ne peuvent produire que les couleurs situées à l’intérieur du triangle qu’elles délimitent sur un diagramme de chromaticité, la gamme de couleurs (gamut) de l’écran ; les couleurs très saturées situées en dehors ne peuvent pas être affichées. Des gammes standard comme sRGB et la gamme plus large Display P3 utilisée par les appareils Apple indiquent précisément quel triangle couvre un écran.
Le tampon d’image
Quelle que soit la technologie de la dalle, l’image provient d’un tampon d’image (framebuffer) : une mémoire qui contient une valeur par pixel, que le contrôleur d’affichage lit ligne par ligne à chaque rafraîchissement. Tanenbaum l’appelle mémoire vidéo (video RAM), une mémoire dédiée sur la carte graphique. Sur Apple silicon, il n’y a pas de mémoire vidéo séparée : les tampons d’image résident dans la même DRAM unifiée que tout le reste, et un moteur d’affichage intégré à la puce les lit.
Ce Mac a deux moniteurs identiques. system_profiler SPDisplaysDataType indique pour chacun Resolution: 5120 x 1440, @ 60.00Hz. Avec 4 octets par pixel — 8 bits chacun pour le rouge, le vert et le bleu, plus 8 bits inutilisés ou alpha, la disposition habituelle :
| Grandeur | Calcul | Résultat |
|---|---|---|
| pixels par écran | 5 120 × 1 440 | 7 372 800 |
| octets par image | × 4 | 29 491 200 octets = 28,1 Mio |
| octets par seconde, un écran | × 60 | 1,77 Go/s |
| les deux écrans | × 2 | 3,54 Go/s |
Le simple balayage des deux écrans lit donc 3,5 Go/s de mémoire, en continu. Le trafic réel est plus élevé : le serveur de fenêtres compose l’image finale à partir des tampons propres à chaque fenêtre, et chaque tampon est généralement doublé ou triplé pour que l’écran n’affiche jamais une image à moitié dessinée. L’exemple du livre — 1920 × 1080 à 3 octets par pixel, 6,2 Mo par image, 155 Mo/s à 25 images par seconde — montre à quel point les écrans ont grandi : une de ces images est presque cinq fois plus grande, et elle est rafraîchie plus de deux fois plus souvent.
La couleur indexée que décrit le livre, avec un index de 8 bits dans une palette de 256 entrées pour économiser la mémoire, a disparu des ordinateurs. La mémoire est assez bon marché pour stocker directement la couleur de chaque pixel, et les écrans HDR et à gamme étendue utilisent 10 bits ou plus par canal.
Les caméras
Le capteur d’un appareil photo numérique est une matrice de photosites, chacun recueillant la charge libérée par la lumière qui tombe sur lui pendant l’exposition (l’effet photoélectrique relève du niveau de la physique). Un convertisseur analogique-numérique transforme chaque charge en un nombre, généralement de 10 à 14 bits dans les capteurs actuels.
Le livre dit que la plupart des appareils utilisent des capteurs CCD et que « certains » seulement utilisent des CMOS. La situation s’est complètement inversée : pratiquement tous les capteurs d’appareils photo actuels, des téléphones aux appareils professionnels, sont des capteurs d’image CMOS, qui peuvent être fabriqués avec des procédés proches de ceux des puces logiques, intègrent les amplificateurs et les convertisseurs sur le capteur lui-même, et se lisent plus vite en consommant moins. Les CCD survivent dans certains instruments scientifiques.
Un photosite ne mesure que la luminosité, pas la couleur. Pour voir la couleur, un filtre de Bayer (breveté par Bryce Bayer chez Kodak en 1976) recouvre les photosites d’une mosaïque de filtres rouges, verts et bleus en groupes de 2 × 2 : un rouge, un bleu et deux verts, parce que l’œil est le plus sensible au vert. L’appareil procède ensuite au dématriçage (demosaicing) de l’image : pour chaque photosite, il estime les deux couleurs manquantes à partir de ses voisins.
Tanenbaum dit qu’un appareil annonçant 6 millions de pixels « ment », puisque quatre photosites forment un pixel et que le reste est de l’interpolation, et qu’il n’en a donc en réalité que 1,5 million. C’est exagéré. Le dématriçage produit un pixel en couleurs pour chaque photosite, et comme le détail de luminosité est mesuré à chaque photosite, la résolution réelle est bien plus proche du nombre de photosites que du quart de ce nombre. Le détail des couleurs est plus faible, ce qui explique que des motifs colorés fins puissent présenter des artefacts.
Le livre décrit la compression JPEG comme l’application d’une « transformée de Fourier spatiale à deux dimensions ». Il s’agit en fait d’une transformée en cosinus discrète, une proche parente, appliquée à des blocs de 8 × 8 pixels ; les coefficients de haute fréquence sont ensuite quantifiés grossièrement, et c’est de là que vient la perte. Depuis 2017, les iPhone enregistrent par défaut les photos au format HEIF, qui utilise le codage d’image du codec vidéo HEVC, plus efficace. Et les appareils photo des téléphones reposent désormais sur la photographie computationnelle : ils capturent plusieurs images en succession rapide et les fusionnent, ce qui réduit le bruit et étend la plage dynamique bien au-delà de ce qu’une seule exposition pourrait enregistrer.
Les imprimantes
L’impression dépose des bits sur le papier par des moyens très différents, comme le décrit le livre, et sa présentation reste globalement valable :
- Une imprimante laser charge un tambour photosensible, le décharge avec un laser en balayage là où la page doit rester blanche ou devenir noire (selon la conception), le saupoudre de toner chargé qui adhère aux bonnes zones, transfère le toner sur le papier et le fixe par la chaleur.
- Une imprimante à jet d’encre projette des gouttelettes de l’ordre du picolitre par des centaines de buses, soit en faisant bouillir une minuscule bulle d’encre avec une résistance (thermique), soit en faisant fléchir un cristal piézoélectrique.
- Les imprimantes thermiques, qui noircissent un papier thermosensible, impriment la plupart des tickets de caisse.
Toutes sont binaires : un point est imprimé ou non. Les gris et les couleurs sont obtenus par tramage (halftoning) — des motifs de points dont l’œil fait la moyenne de la densité —, et l’impression couleur utilise des encres CMJN (CMYK en anglais) : le cyan, le magenta et le jaune soustraient des couleurs à la lumière blanche, et le noir (le K) est ajouté parce que les trois ne se mélangent pas en un vrai noir. La plupart des imprimantes acceptent des langages de description de page comme PostScript, PDF ou PCL et calculent elles-mêmes le rendu de la page. Les imprimantes à encre solide et à cire que cite le livre sont devenues rares ; la sublimation thermique survit dans les imprimantes photo.
Manettes de jeu et mouvement
Les deux exemples du livre, la Wiimote de Nintendo (2006) et la Kinect de Microsoft, ne sont plus fabriqués ; Microsoft a arrêté la Kinect en 2017. L’accéléromètre 3 axes de la Wiimote, en revanche, se trouve aujourd’hui dans chaque téléphone, montre et manette, généralement associé à un gyroscope qui mesure la rotation : ce sont tous deux des dispositifs MEMS, des structures mécaniques microscopiques gravées dans le silicium, dont le mouvement modifie une capacité mesurable — le même principe que celui que décrit le livre. L’idée de la Kinect, projeter un motif de points infrarouges pour mesurer la profondeur, survit dans les caméras de reconnaissance faciale des téléphones.
À retenir
- Un clavier est une matrice d’interrupteurs que son contrôleur balaie ligne par ligne ; des diodes empêchent le ghosting. Les contacts rebondissent, donc les pressions doivent passer par un anti-rebond : 10 fronts bruts sont devenus 1 pression dans la démonstration.
- Les claviers et les souris sont aujourd’hui des périphériques HID USB ou Bluetooth, interrogés par l’hôte, qui envoient des rapports (un rapport boot de 8 octets : les modificateurs plus jusqu’à six codes d’usage) au lieu de déclencher une interruption par touche comme dans le livre.
- Les écrans tactiles capacitifs projetés mesurent chaque croisement ligne–colonne, si bien que le multipoint ne connaît pas de ghosting.
- Les LCD filtrent un rétroéclairage à travers des cristaux liquides ; les OLED, « à l’horizon » dans le livre, émettent de la lumière par sous-pixel et sont désormais la norme dans les téléphones. Le RVB ne peut pas produire toutes les couleurs : un écran a une gamme de couleurs.
- Le tampon d’image d’un écran 5120 × 1440 à 4 octets par pixel fait 28,1 Mio ; balayer deux de ces écrans à 60 Hz lit 3,54 Go/s — contre 155 Mo/s dans l’exemple du livre. Sur Apple silicon, il réside en mémoire unifiée, et non dans une mémoire vidéo séparée.
- Les caméras utilisent des capteurs CMOS, et non CCD, derrière un filtre de Bayer ; le dématriçage fait perdre bien moins de résolution que ne le suggèrent les « quatre photosites par pixel » du livre ; le JPEG utilise une DCT, et non une transformée de Fourier.