3.3. Le mode programmé
Dans le mode programmé, les échanges d’informations entre la MC et les périphériques se font sous le contrôle de l’unité centrale. L’UC participe pleinement à l’opération d’E/S et chaque communication avec un périphérique passe obligatoirement par elle. L’UC se charge de la programmation des entrées/sorties.
C’est l’UC qui contrôle toute communication entre les périphériques et la mémoire centrale (MC). Ainsi l’information qui font l’objet d’une opération d’E/S sont d’abord chargé dans un registre de l’UC avant d’être acheminées, soit vers la l’MC où elles seront chargés, soit vers un périphérique de sortie.

Figure 3.3. Liaison avec les organes d’E/S en mode programmé
Lors d’une opération d’E/S, l’UC doit s’assurer de la présence de la donnée dans le registre approprié du contrôleur (CTRL) (RD) avant d’effectuer le transfert (lecture ou écriture). Pour cela, l’UC dispose de deux possibilités :
- Soit tester la présence de la donnée dans le registre RD du contrôleur (CTRL) à travers le registre d’état (RE) c’est le mode par test d’état.
- Soit être ‘avertie’ par un signal du contrôleur (CTRL) de la disponibilité de la donnée dans RD c’est le mode par interruption.
3.3.1 Le Mode par test d’Etat
L’algorithme suivant décrit la lecture d’un bloc de caractères à partir d’une unité de disque dans le mode par test d’état. l’UC test l’état du périphérique et du contrôleur avant toute opération d’E/S. Cet état est résumé par le contenu du registre d’état (RE) du contrôleur.
1- Lecture du registre d'état (RE) du contrôleur.
2- Si le périphérique n'est pas prêt, aller à 1.
3- Charger la commande de lecture dans le registre de commande (RC) du contrôleur.
4- Lecture du registre d'état (RE) du contrôleur.
5- Si le bit "registre de données plein" est à ‘0’ aller à 4.
6- Charger le registre de données (RD) du contrôleur dans un registre de l'UC.
7- Mise à jour du nombre de caractères lus et de l'adresse mémoire de rangement.
8- Si tous les caractères ont été lus, aller à 10.
9- Aller à 4.
10- Fin.
Inconvénients
- L’UC peut boucler plusieurs fois sur la lecture et le test du RE (actions 1,2) avant que le CTRL ne soit prêt.
- L’UC peut attendre longtemps avant que le caractère ne soit disponible dans RD (actions 4,5).
- L’UC perd ainsi un temps considérable à lire le registre RE et à faire le test.
Exemple : Lecture d’un caractère à partir du clavier
Pour utiliser une opération de lecture d’un caractère, le contrôleur associé au clavier est doté de deux registres :
- Un registre tampon de 8 bits pour recevoir le caractère lu.
- Un registre d’état comprenant 8 bits mais seulement les deux bits à gauche sont utilisées, le dernier bit (b7) indique la disponibilité d’un caractère dans le registre tampon (1 si le caractère est disponible, 0 sinon). Le bit (b6) indique si la lecture du caractère présent dans le registre tampon peut être transférée vers le processeur ou pas.
Pour lire un caractère à partir du clavier, le processeur (UC) envoie une instruction de lecture au contrôleur du clavier et effectue de façon répétée la lecture du registre d’état du contrôleur en question en attendant l’activation de son bit 7. Lorsque ce bit passe à 1, le processeur attend que le transfert soit autorisé (le bit 6 est à 1), lit le registre tampon du contrôleur et transfère le caractère qui s’y trouve vers l’un de ses registre internes. Le bit 7 est remis automatiquement à 0 pour indiquer que le contenu du registre tampon a été transféré. Si le bit 6 est à 0, le transfert ne peut pas d’effectuer.
3.3.2 Le Mode par interruption
Pour éviter la perte de temps engendrée par l’attente de disponibilité du contrôleur, l’UC initialise le contrôleur et le configure de à ce que ce dernier lui transmettre un signal dès qu’il est disponible. C’est le contrôleur qui se charge d’informer l’UC de l’état de son registre de données (RD). Si le registre RD est plein, il avertit l’UC pour faire une lecture et s’il est vide, il informe pour faire une écriture. Ainsi dès que l’UC rencontre un une instruction d’E/S elle envoie un signal au contrôleur pour la lui confier, et continue l’exécution du programme en cours. Une fois l’opération d’E/S terminée, le contrôleur envoie un signal à l’UC pour l’en informer. Le signal envoyé est appelé interruption.

Figure 3.4. Opération d’E/S en mode interruption.
L’inconvénient majeur du mode par interruption c’est le changement de contexte opéré par l’UC à chaque réception du signal du contrôleur.
Contexte : ensembles d’informations nécessaires à l’exécution d’un programme (CO, registres, indicateurs).