Un système est constitué d'une UC et d'un certain nombre de contrôleurs de périphériques connectés par un bus commun. Chaque contrôleur est chargé d'un où plusieurs périphériques.
La partie électronique d'un contrôleur est composée de registres spécialisés et de mémoire locale.
La partie logicielle du contrôleur a la responsabilité de déplacer les données entre les périphériques contrôlés et sa mémoire locale.
Le pilote de périphérique qui fait partie du système dialogue avec le contrôleur. Il lui donne des ordres (généralement codés sur un octet); bloque ou non le processus qui a généré l'interruption d'entrée/sortie; attend le résultat (ou le code d'erreur) fournit par le contrôleur, met le résultat au bon endroit; et enfin réveille si nécessaire le processus.
Deux problèmes majeurs :
Cette structure permet un accès direct à la mémoire pour le contrôleur sans passer par le mécanisme d'interruption. Le pilote doit configurer les registres, et les fournir au contrôleur. Le contrôleur DMA dépose sur le bus les données qui se copie directement en mémoire. Lorsque le transfert est terminé, le contrôleur le signale au pilote. Il n'y a qu'une seule interruption pour le transfert d'un bloc.
Cela justifie la notion d'entrelacement vue au chapitre précédent.