Fonctionnement d'un ordinateur/Le contrôleur de périphériques

Un livre de Wikilivres.

Dans ce chapitre, nous allons voir en détail le contrôleur de périphérique. Pour rappel, il intègre divers composants : de quoi piloter le bus du périphérique, éventuellement un contrôleur d'interruption ou un contrôleur DMA.

La connexion du contrôleur de périphérique au reste de l'ordinateur[modifier | modifier le wikicode]

Le bus qui connecte le processeur au contrôleur de périphérique est généralement un bus à haute performance, rapide, à haut débit. Par contre, le bus secondaire qui relie le contrôleur aux périphériques est souvent un bus moins rapide, à débit moindre, à latence plus élevée. La raison est que les périphériques sont assez lents et qu'il est préférable d'utiliser un bus aux performances moindres, mais moins complexe et avec une interface plus simple. Il peut être séparé du bus mémoire ou au contraire partagé avec lui (ce qui donne un bus système).

Partage du bus entre la mémoire et les périphériques
Bus entre processeur et contrôleur de périphérique.

Un ordinateur contient plusieurs contrôleurs de périphériques, c'est la norme de nos jours et l'est depuis déjà plusieurs décennies. Par exemple, un ordinateur de type PC assez ancien avait un contrôleur de périphérique pour le clavier, un autre pour la souris, un autre pour le port parallèle, un autre pour le port série et quelques autres. Par la suite, d'autres contrôleurs se sont greffés aux précédents : un pour l'USB, un intégré à la carte vidéo, un intégré à la carte son, et ainsi de suite. Concrètement, n'importe quel ordinateur récent contient plusieurs dizaines, si ce n'est centaines, de contrôleurs de périphériques. Et connecter tout cela au processeur n'est pas chose facile.

En théorie, il est possible de connecter chaque contrôleur de périphérique au processeur avec une connexion point à point, un ensemble de fils. Cette solution demande cependant beaucoup de fils et de connexions pour être praticable s'il y a beaucoup de contrôleurs à connecter. Elle est surtout utilisé sur les ordinateurs simples, où il y a deux ou trois contrôleurs de périphériques, ce qui limite le nombre de broches et de fils à câbler.

Typiquement, les anciennes consoles utilisaient cette méthode pour connecter les manettes, la carte graphique et la carte son au processeurs. Il n'y avait rien d'autre à câbler niveau périphériques, les processeurs pouvaient se le permettre. Rappelons que les consoles de l’époque étaient des consoles 8 bits, ce qui fait qu'une dizaine de broches suffisaient pour connecter un périphérique au processeur. Ce n'est plus le cas de nos jours.

Usage de plusieurs bus d'entrées-sorties

Une autre solution, bien plus économes en broches processeur, connecte tous les contrôleurs de périphérique au même bus. Elle existe en deux versions, qui devraient vous dire quelque chose.

La première utilise un bus mémoire d'un côté et un bus d'entrées-sorties de l'autre. Le défaut est qu'un second bus demande pas mal de connexions, de broches sur le processeur, de fils d'interconnexion et autres ressources.

Bus d'entrées-sorties multiplexé

L'autre solution utilise un bus système qui interconnecte le processeur, les contrôleurs de périphérique et mémoires. Le fait de partager le bus entre mémoire et entrées-sorties fait qu'on économise des fils, des broches sur le processeur, et d'autres ressources. Le câblage est plus simple, la fabrication aussi. Et cela a d'autres avantages, notamment au niveau du processeur, qui n'a pas besoin de gérer deux bus séparés, mais un seul.

Bus unique avec entrées mappées en mémoire

Le décodage d'adresse, pour les contrôleurs de périphériques[modifier | modifier le wikicode]

Avec un seul bus pour connecter le processeur à plusieurs contrôleurs de périphériques, on retombe face au même problème que précédemment. Dans la section précédente, nous avions vu ce qui se passe quand on connecte plusieurs périphériques à un même contrôleur de périphérique. Ici, on remplace les périphériques par les contrôleurs de périphérique, et le contrôleur de bus par le processeur. Là encore, le problème est le même : toute transmission doit être prise en charge par le bon contrôleur de périphérique. Il ne faudrait pas qu'une transmission PCI-Express destinée à la carte graphique soit traitée par le contrôleur USB. Et là encore, la solution est la même : chaque contrôleur de périphérique a sa propre adresse mémoire.

Là encore, les solutions utilisées pour sélectionner un contrôleur parmi tous les autres sont les mêmes, le décodage d'adresse étant la possibilité la plus fréquente. Son utilisation est beaucoup plus fréquente, pour une raison assez simple. Les contrôleurs de périphériques sont tous placés soit dans les périphériques, soit sur la carte mère. Pour les contrôleurs sur la carte mère, on ne s'attend pas à ce qu'ils soient retiré ou ajoutés : les contrôleurs restent sur la carte mère et leur nombre ne change pas, les contrôleurs sont fixés une fois pour toutes. C'est le cas classique où on peut facilement utiliser le décodage d'adresse sans problèmes. Une fois les contrôleurs connectés, ajouter un circuit de décodage d'adresse est assez facile. Pour les contrôleurs placés dans les périphériques, comme ceux de la carte graphique et de la carte son, les périphériques en question sont connectés à des bus spécifiques, et le contrôleur du bus est généralement sur la carte mère. Ce qui rend là encore l'usage du décodage d'adresse facile pour le contrôleur de bus, la gestion des adresses sur le bus étant réalisé autrement.

Circuit de décodage d'adresse.

Pour résumer, les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différents périphériques ne se marchent pas sur les pieds. Chaque périphérique, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel contrôleur de périphérique est le destinataire, d'autres indiquent quel est le périphérique de destination, les restants indiquant le registre de destination.