Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 3e module de ce cours qui porte sur le fonctionnement et la sécurité des systèmes informatiques.
Des algorithmes aux ordinateurs: Etape 2 Comme annoncé dans le videoclip d’introduction de cette leçon, la 2e étape nécessaire pour comprendre comment un ordinateur peut exécuter un algorithme consiste à voir de quels composants fonctionnels un ordinateur a besoin à cette fin. C’est le but du présent clip qui va décrire l’architecture d’un ordinateur. Logiciel Matériel
De quoi a-t-on besoin pour le calcul ? Une unité arithmétique effectue les instructions arithmétiques Vu que notre ordinateur doit comprendre des instructions de calcul, il doit évidemment disposer d’une unité de calcul, dite unité arithmétique, dotée de 3 entrées – les deux opérandes à traiter et l’opération à leur appliquer, et une sortie – le résultat du calcul. 3 + 2 = 5 Unité arithm. 3 2 somme
De quoi a-t-on besoin pour le calcul ? Des registres mémorisent les opérandes et les résultats Vu qu’il doit manipuler des variables, il lui faut l’équivalent d’un tableau noir, une série de registres, appelée banc, où mémoriser les variables nécessaires. Ce banc de registres doit être doté d’une 1e entrée permettant à l’ordinateur d’indiquer s’il désire lire ou écrire (charger) un registre, d’une 2e entrée permettant d’indiquer quel registre doit être lu ou chargé, et enfin d’une 3e entrée ou sortie (suivant le cas) permettant à l’ordinateur d’envoyer ou de recevoir la valeur du registre à écrire ou lire. r1: 2 r2: ? r3: 3 r4: ? r5: ? 5 Registres r3 r1 2 3 écrire lire
De quoi a-t-on encore besoin ? Notre algorithme ou programme doit être enregistré quelque part Il faut pouvoir contrôler où on en est 1: charge r3, 0 2: cont_ppe r1, 0, 6 3: somme r3, r3, r1 4: somme r1, r1, -1 5: continue 2 6: charge r2, r3 3: Mémoire pour les instructions Ligne Instruction somme r3, r3, r1 Ceci dit, outre que l’ordinateur doive calculer et mémoriser des variables, il doit aussi avoir accès au programme à exécuter. Pour cela il doit avoir un tableau noir d’instructions, en d’autres termes une mémoire dans laquelle stocker ses instructions. Cette mémoire pour instructions doit être dotée d’une entrée permettant à l’ordinateur de lui dire de quelle ligne de programme il a besoin, et d’une sortie lui fournissant ladite ligne. 1 Mais l’ordinateur a aussi besoin d’une mémoire spéciale, le pointeur de ligne, pour se souvenir d’où il en est dans l’exécution d’un programme, c.à.d. de la ligne de programme courante. Cette mémoire spéciale doit elle aussi avoir une sortie permettant à l’ordinateur de savoir à quelle ligne il est, et une entrée lui permettant de mettre cette ligne à jour après exécution. prochaine instruction 4: Pointeur de ligne 3: écrire lire
Pour contrôler où on en est Un circuit assez simple qui répartit les éléments qui constituent une instruction r3 r1 somme Décodeur Maintenant comment ces 2 derniers composants architecturaux sont-ils connectés? 1 De façon assez évidente la sortie du pointeur de ligne doit être connectée à l’entrée de la mémoire pour instructions. 2 La sortie de la mémoire pour instructions est elle connectée à un nouveau composant appelé le décodeur d’instructions 3 Ce décodeur d’instructions est un composant plutôt simple, capable de «décortiquer» chaque instruction telle que somme r3, r3, r1 en ses différents éléments tels que somme, r3, r3, et r1, et à les refiler de façon assez évidente au banc de registres et à l’unité arithmétique. somme r3, r3, r1 Mémoire pour les instructions Ligne Instruction Pointeur de ligne 3
Pour contrôler où on en est Normalement on veut passer d’une ligne à la suivante Si on a une instruction continue on veut passer à une autre ligne que la suivante Pointeur de ligne 3 + 1 4 3: somme r3, r3, r1 Reste à savoir que faire de l’entrée du pointeur de ligne? Dans la majorité des cas, après chaque instruction l’ordinateur est normalement supposé exécuter l’instruction à la ligne suivante. Pour ce faire il suffit de connecter la sortie du pointeur de ligne à une autre petite unité arithmétique hyper-simplifiée qui est juste capable de produire une sortie égale à son entrée +1. 1 Mais comme on l’a vu dans le clip précédent, il existe des instructions de saut (continue) conditionnelles ou non qui peuvent forcer l’ordinateur à sauter à une ligne de programme qui n’est pas la suivante. A cette fin l’entrée du pointeur de ligne doit être dotée d’un interrupteur à bascule permettant de sauter soit à la ligne suivante – le cas normal vu ci-dessus, soit à une autre ligne donnée par le décodeur dans le cas d’un saut inconditionnel ou par l’unité de calcul dans le cas d’un saut conditionnel à un test calculé. Pointeur de ligne 5 + 1 6 2 continue 5: continue 2
Le circuit pour le contrôle séquentiel somme Décodeur Dans le cas normal de l’exécution des lignes de programme en séquence l’interrupteur à bascule connecte l’entrée du pointeur de ligne à la sortie du petit composant d’incrémentation. somme r3, r3, r1 + 1 Mémoire pour les instructions Ligne Instruction Pointeur de ligne 3 4
Le circuit pour le contrôle en cas de saut - ppe? Décodeur ppe! Dans le cas de l’exécution d’une instruction de saut, p.ex. l’instruction cont_ppe r1 , 0, 6 qu’on la trouve à la 2e ligne de notre programme d’addition des N premiers nombres entiers, 1 … la présentation à la mémoire des instructions du pointeur d’instruction égal à 2 … 2 … cause la présentation au décodeur de l’instruction cont_ppe r1 , 0, 6 … 3 … qui va dicter au banc de registres de fournir r1 à l’unité arithmétique … 4 … laquelle va tester r1 et, le cas échéant, détecter la fin de la boucle TANT QUE et donc afficher un test positif (c.à.d. r1=0 à ce stade) … 5 … lequel test va être reflété par le décodeur comme un signal à l’interrupteur à bascule … 6 … qui déconnecte alors l’entrée du pointeur de ligne de la sortie du petit composant d’incrémentation, forçant ainsi le pointeur de ligne à sauter à la ligne 6 donnée par l’instruction de saut conditionnel. saut Mémoire pour les instructions Ligne Instruction cont_ppe r1, 0, 6 6 6 Pointeur de ligne 2 3 + 1
Une mémoire pour avoir plus de données Relativement petit : seulement quelques dizaines de registres Grande mémoire pour toutes les données Lecture Ecriture Où lire ou écrire? Banc de registres A B 1 Pour compléter ce tableau architectural des composants fonctionnels d’un ordinateur, il reste à ajouter que les ordinateurs disposent typiquement d’une – voire quelques – poignées de registres. 2 Or la vaste majorité des programmes réels utilisent bien plus qu’une – voire quelques – poignées de de variables . 3 Donc en pratique tous les ordinateurs disposent en plus du banc de registres d’une mémoire de données assez vaste pour contenir toutes les variables et données requises par des programmes réalistes. Et par conséquent l’ordinateur dispose aussi d’instructions permettant de charger et décharger les registres à partir de valeurs stockées dans des lignes correspondantes de la mémoire de données. Unité arithm. Registres pour les opérandes Mémoire pour les données Où écrire A B Op Où lire ?
Circuit intégré du processeur Un processeur complet Circuit intégré du processeur Unité arithm. Banc de registres Décodeur Mémoire pour les données Le plan architectural d’un ordinateur est ainsi complet tel que représenté ici. On y retrouve le banc de registres et l’unité arithmétique en haut à droite, le décodeur au centre, et le pointeur de ligne avec son circuit d’incrémentation en bas à gauche. L’ensemble de ces éléments constituent ce qu’on appelle le processeur, qui réside typiquement entièrement dans un seul circuit intégré de l’ordinateur. Un ou plusieurs autres circuits intégrés réalisent la mémoire de l’ordinateur, qui contient les instructions des programmes (en bas à droite) et les données des programmes (en haut à gauche). Pointeur de ligne + 1 Mémoire pour les instructions