Le logiciel - Logic Systems Laboratory
Transcription
Le logiciel - Logic Systems Laboratory
Organisation de base d’une machine de von Neumann Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Le logiciel variables int int int int int data = 0x123456; result = 0; mask = 1; count = 0; temp; data: 0x123456 result: while (count < 32) { temp = data & mask; result = result + temp; data = data >> 1; count = count + 1; }; mask: count: temp: 0 1 0 undef /* result = 9 */ opérations et affectations contrôle Page 2 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne opérations et affectations 0 1 2 3 mov mov mov mov $r0, $r1, $r2, $r3, 0x123456 0 1 0 # # # # $r0 $r1 $r2 $r3 4 5 6 7 8 loop: and add srl add bne $r4, $r1, $r0, $r3, $r3, $r0, $r2 $r1, $r4 $r0, 1 $r3, 1 32, loop # # # # # $r4 $r1 $r0 $r3 $r3 = $r0 = $r1 = $r0 = $r3 != 32 9 & $r2 + $r4 + 1 + 1 loop fin: contrôle Page 3 data result mask count variables Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Architecture des ordinateurs Les données traitées par un ordinateur sont stockées dans sa mémoire L'élément de l'ordinateur qui réalise les opérations de traitement des données est le processeur ou CPU (Central Processing Unit) Le processeur peut être divisé en deux parties: • l'unité de traitement: ensemble d'opérateurs arithmétiques et logiques, groupés autour d'une ou plusieurs ALUs (Arithmetic and Logic Unit); • l'unité de contrôle: coordonnateur des différentes activités du processeur En plus, le processeur possède ses propres unités de stockage d'information, plus rapides que la mémoire, mais moins nombreuses: les registres Page 4 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne processeur unité de traitement unité de contrôle ALU mémoire bus registres Le transfert des données entre la mémoire et le processeur se fait via un ensemble de lignes d'interconnexion: le bus Le processeur est capable de lire ou d'écrire une donnée dans la mémoire: il doit envoyer l'adresse de la donnée et un signal indiquant le type d'opération Page 5 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne L'exécution d'une tâche, aussi simple soit-elle, implique une série d'opérations, réalisées dans l'unité de traitement et coordonnées par l'unité de contrôle, avec des transferts de données entre la mémoire et le processeur L'addition de deux nombres, par exemple, pourrait se faire en 5 pas: • chercher le premier nombre dans la mémoire et le placer dans un registre du processeur • chercher le deuxième nombre dans la mémoire et le placer dans un autre registre • activer l'additionneur avec les deux registres précédents comme sources; stocker le résultat dans un registre • sauver le résultat dans la mémoire • arrêter Page 6 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne A ALU W Registres Op B AW Wr AA AB 5 add $r1, $r1, $r4 $r1 $r1 '1' $r4 + Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Page 7 $r1 $r1 '1' $r4 + logique de contrôle add $r1, $r1, $r4 D compteur de programme (PC) 6 Page 8 Dout 5 Q A mémoire d'instruction + 1 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne undef $r3 '0' 32 != logique de contrôle bne $r3, 32, loop 4 (= loop) D compteur de programme (PC) 9 Page 9 Dout 8 Q A mémoire d'instruction + 1 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Architecture de von Neumann Dans les premiers ordinateurs, les différents pas nécessaires à l'exécution d'une tâche, le programme, étaient directement câblés dans l'unité de contrôle Un grand progrès a été effectué lorsque le programme, comme les données, a été codé et stocké dans la mémoire principale: c'est l'architecture appelée de von Neumann La fonction de l'unité de contrôle est de lire le programme de la mémoire, décoder les instructions et commander leur exécution Un changement de programme se fait maintenant par une simple réécriture de la mémoire Page 10 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne architecture de Harvard mémoire d'instruction imA imD architecture de von Neumann mémoire de données mémoire unifiée dmA dmD A processeur Page 11 D processeur Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Langage machine Les processeurs doivent reconnaître des instructions codifiées sous la forme de groupes de bits L'ensemble des instructions reconnues par un processeur et son système de codage forment ce qu'on appelle le langage machine du processeur Il y a deux grandes familles de processeurs, selon la complexité de son langage machine: • processeurs CISC (Complex Instruction Set Computer). Exemple: Pentium • processeurs RISC (Reduced Instruction Set Computer). Exemples: Sparc, PowerPC, MIPS Il y a trois grands types d'instruction: • transfert de données • opérations arithmétiques/logiques • contrôle Page 12 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Exemple Supposons un processeur traitant des données à 8 bits, avec 16 registres internes et une mémoire externe avec 256 positions ou cellules de stockage Les registres et les positions de mémoire reçoivent des adresses à partir de 0 mémoire 00 01 02 03 04 05 processeur unité de traitement 0 1 2 3 4 5 6 7 8 9 A B C D E F unité de contrôle bus . . . . . . FC FD FE FF Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Page 13 Un programme qui divise deux données stockées en mémoire pourrait être: • • • • 1: charger un registre avec la première donnée: instruction LOAD 2: charger un autre registre avec la deuxième donnée: instruction LOAD 3: si la deuxième valeur est zéro, aller au pas 6: instruction JUMP 4: diviser les contenus des deux registres et stocker le résultat dans un troisième registre: instruction DIV • 5: sauver le résultat dans une position de mémoire: instruction STORE • 6: arrêter Si l'on précise les adresses de registre et de mémoire, le programme serait: 1 2 3 4 5 6 Page 14 LOAD LOAD JUMP DIV STORE STOP R0,M[0] R1,M[1] zéro,6 R2,R0,R1 M[2],R2 R0 M[0] R1 M[1] si 0 aller à 6 R2 R0/R1 M[2] R2 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Chaque instruction possède entre 2 et 3 opérandes. Si l'on veut coder chaque instruction comme une chaîne de bits, il faut décider le nombre total de bits de l'instruction, le nombre de bits pour chaque opérande et la position dans la chaîne: c'est le format de l'instruction opérande 1 opcode opérande 3 opérande 2 L'opcode est le code de l'instruction Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Page 15 Pour notre exemple, nous pouvons utiliser 16 bits pour chaque instruction et les formats suivants: opcode LOAD adresse de la mémoire 0000 adresse du registre opcode STORE adresse de la mémoire 0001 adresse du registre opcode JUMP adresse de saut 0010 condition Page 16 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne opcode DIV registre source1 0011 registre destination registre source2 opcode STOP 0100 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Page 17 Notre programme codé serait alors: 1 2 3 4 5 6 Page 18 LOAD LOAD JUMP DIV STORE STOP R0,M[0] R1,M[1] zéro,6 R2,R0,R1 M[2],R2 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne 0000 0101 2006 3201 1202 4000 Exécution du programme Pour exécuter un programme, l'unité de contrôle du processeur doit lire chaque instruction, la décoder et ensuite l'exécuter. C'est le cycle exécuté sans arrêt par un processeur: fetch-decodeexecute Pour cela, l'unité de contrôle dispose de deux registres spécialisés: le compteur de programme (PC) et le registre d'instruction (IR) Le PC contient l'adresse de la prochaine instruction à exécuter. Le IR contient le code de l'instruction en exécution Pour notre exemple précédent, le fetch implique la lecture de deux mots de la mémoire. Toute instruction, sauf le JUMP, fait donc une incrémentation par deux du PC Page 19 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Exercice Supposez que vous voulez multiplier deux variables a et b, stockées dans les positions de mémoire M[20] et M[21], respectivement, pour affecter cette valeur à la variable toto, stockée à la position de mémoire M[40] C'est-à-dire, vous voulez effectuer l'opération: toto = a*b ou: M[40] = M[20]*M[21] Page 20 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Le processeur possède 8 registres (R0...R7). Le registre R0 contient toujours la valeur 0 Les instructions du langage machine du processeur sont: • • • • • • Rd M[adr] M[adr] Rs Rd Rs1 + Rs2 Rd Rs1 – Rs2 R R - 1 si zero alors sauter à adr LOAD Rd, M[adr] STORE M[adr], Rs ADD Rd, Rs1, Rs2 SUB Rd, Rs1, Rs2 DEC R JUMP zero, adr Avant d'écrire le programme, nous devons trouver un algorithme réalisant la tâche voulue Un algorithme possible serait: Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Page 21 lecture de a et b résultat = 0 a=0 b=0 résultat = résultat+a écriture du résultat Page 22 décrémenter b Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne