Architecture des ordinateurs Chapitre 2 Architecture des ordinateurs
Architecture Architecture externe (spécification) Services fournis à l’utilisateur Types de données et représentation Modes d’adressage Instructions machine Mécanismes d’entrée/sortie Architecture interne (organisation) Description physique des composantes et les interconnexions Organisation interne du processeur Gestions des conflits de ressources, etc. Il peut exister plusieurs implémentations d’une même architecture (plusieurs organisations pour une spécification)
Architecture de von Neumann Présentée dans les années 1940 Un processeur central Unité de contrôle Unité arithmétique et logique Mémoire principale Unités d’entrée/sortie Les composants sont reliés par un canal de communications (bus) constitué d’un ensemble de lignes (n) électriques parallèles.
Architecture de von Neumann Processeur Unité de contrôle Unité arithmétique et logique Bus Mémoire principale Unité d’entrée/sortie Unité d’entrée/sortie
Architecture de von Neumann Processeur Gère l’allocation du BUS Décode et exécute les instructions Possède une petite mémoire locale (registres) Accès très rapide Contiennent temporairement les opérandes des instructions (données)
Architecture de von Neumann Mémoire centrale Constituée de cellules qui contiennent le programme et ses données Permet le transfert de données Mémoire Registre (Chargement) Registre Mémoire (Stockage) Chaque cellule a une adresse Accès beaucoup plus lent que les registres
Architecture de von Neumann Unité d’entrée/sortie Contrôle les périphériques (moniteur, souris, clavier, lecteur, etc.) Programmation généralement complexe Échange de données entre le périphérique et le processeur Définit par un ensemble de règles, appelé protocole de communication Habituellement très lent (en comparaison des registres et de la mémoire)
Architecture de von Neumann Le programme et ses données sont toujours emmagasinés en mémoire principale Les instructions ne peuvent être exécutées en mémoire principale Traitement global d’une instruction Extraction de la mémoire Décodage Exécution Stockage des résultats
Architecture de von Neumann Processeur contient deux registres spéciaux Registre d’instruction (RI) Compteur ordinal (PC Program Counter) Traitement complet d’une instruction Extraction de l’instruction à l’adresse contenue dans le registre PC Stockage de l’instruction dans le registre d’instruction Décodage de l’instruction et accès à ses opérandes Mise à jour du registre PC Exécution de l’instruction Stockage des résultats
Architecture d’un ordinateur RISC (Reduced Instruction Set Computer) CISC (Complex Instruction Set Computer) Grand nombre de registres Petit nombre de registres Petit nombre d’instructions Grand nombre d’instructions Peu de mode d’adressage Beaucoup de modes d’adressage Instruction de longueur unique Instruction de longueur variable Accès à la mémoire limité à certaines instructions Accès à la mémoire pour toutes les instructions Ex : SPARC de Sun Ex : Processeur Intel
Mémoire centrale Vecteur de cellules adressables Contient des bits (valeur de 0 ou 1) La plus petite cellule contient habituellement 8 bits (1 octet) La taille d’un mot est liée à la largeur du bus de données Habituellement 32 bits (4 octets) sur les architectures courantes
Mémoire centrale Vecteur de cellules adressables 97 255 … 10 1 2 N-1 N-2 La plus grande valeur pouvant être contenue dans un octet est de ? Il n’y a pas de différence entre un « caractère » ou un nombre. L’interprétation de la valeur est laissée aux soins du programmeur.
Mémoire centrale La mémoire permet d’adresser des Octets (8 bits) Demi-mots (2 octets) Mots (4 octets) Doubles mots (8 octets) L’architecture peut exiger des contraintes de frontières S’il y en a : l’adresse doit être divisible par le nombre d’octets représentant la valeur. S’il n’y en a pas : Toute suite de 2, 4 ou 8 octets peut être interprétée comme un demi-mot, un mot ou un double mot respectivement.
Mémoire centrale Chaque bit d’un octet (ou d’un mot par exemple) est numéroté. Les octets d’un mot (ou d’un demi-mot par exemple) sont aussi numérotés Un mot à l’adresse « 𝑚 » occupe les octets mémoire aux adresses « 𝑚, 𝑚+1, 𝑚+2, 𝑚+3 » N-1 N-1 N = 8, 16, 32, 64
Mémoire centrale Il y a deux formats pour l’ordre des octets dans un mot Format « big endian » (𝐴0𝐵1𝐶2𝐷 3 16 ) L’adresse de la donnée est celle de la partie la plus significative Format « little endian » (𝐴0𝐵1𝐶2𝐷 3 16 ) L’adresse de la donnée est celle de la partie la moins significative A0 B1 C2 D3 N N+1 N+2 N+3 D3 C2 B1 A0 N N+1 N+2 N+3
Mémoire centrale La différence de format est souvent imperceptible Il faut faire attention lorsque Il y a transfert de données d’un ordinateur à l’autre Une valeur est emmagasinée dans un mot, mais lue octet par octet
Mémoire centrale Programme Donnée « A1B2C3D4 » SPARC A1B2C3D4 #include <iostream> #include <iomanip> using namespace std; union MOT { unsigned int nb ; unsigned char car[4] ; }; int main() MOT mot; cin>>hex>>mot.nb; for(uchar i = 0; i < 4; i++) cout<<hex<<(int)mot.car[i]<<endl; return 0; } Programme Donnée « A1B2C3D4 » A1B2C3D4 D4C3B2A1 SPARC Intel x86
Processeur Consiste à exécuter des instructions La spécification du processeur comprend la description Des registres Des modes d’adressage Des instructions Les modes d’adressage sont présentés dans le chapitre suivant
Processeur Possède un ensemble de cellules spécialisées (registres) Registres généraux Emmagasine temporairement les opérandes des instructions Très rapide (on ne dépend pas du bus de données) Certains sont dédiés à un usage particulier ou à une valeur fixe Un pointeur de pile (Stack pointer (SP) ), la valeur 0, etc. Registres spécialisés Compteur ordinal (Program Counter (PC) ) Registre d’état (Processor Status (PS) ) Registres d’adresse, etc. Un registre d’instruction (RI), qui ne peut être assigné directement
Processeur Comporte un ensemble d’instructions (jeu d’instructions) Caractérisé par Son nombre Sa variété Arithmétique, Logique, Contrôle, etc. Sa longueur Toutes de la même longueur Chaque type a la même longueur Peuvent être de longueur différente Son nombre d’opérandes 3 opérandes?, 2 opérandes? Aucun opérande? Code Op. Opérandes*
Processeur Exemple d’instructions à 3 opérandes Calculer : 𝐸= 𝐴÷𝐵 −(𝐶×𝐷) DIV A, B, T1 ! T1 = A / B MUL C, D, T2 ! T2 = C x D SUB T1, T2, E ! E = T1 – T2
Processeur Exemple d’instructions à 2 opérandes (le résultat est mis dans le 2e opérande) Calculer : 𝐸= 𝐴÷𝐵 −(𝐶×𝐷) On perd de l’information (certaines valeurs sont perdues) DIV A, B ! B = A / B MUL C, D ! D = C x D SUB B, D ! D = B – D MOV D, E ! E = D
Processeur Exemple d’instructions à 1 opérande (on utilise un accumulateur) Calculer : 𝐸= 𝐴÷𝐵 −(𝐶×𝐷) On a changé l’ordre des opérations pour utiliser moins d’instructions LOAD C ! Acc = C MUL D ! Acc = Acc x D STORE T ! T = Acc A ! Acc = A DIV B ! Acc = Acc / B SUB ! Acc – T E ! E = Acc
Processeur Exemple d’instructions à 0 opérande (on utilise une pile) Calculer : 𝐸= 𝐴÷𝐵 −(𝐶×𝐷) PUSH A ! Empiler A B ! Empiler B DIV ! Dépiler B et A, empiler A / B (T1) C ! Empiler C D ! Empiler D MUL ! Dépiler D et C, empiler C x D (T2) SUB ! Depiler T2 et T1, empiler T1 – T2 POP E ! Dépiler le dessus de la pile et copier dans E
Organisation d’un ordinateur Technique de pipeline Permet d’obtenir de meilleure performance d’exécution des programmes Un pipeline a autant d’étages que d’étape dans le traitement d’une instruction Un cycle machine est défini comme étant le temps nécessaire au processeur pour passer une instruction d’un étage à l’autre
Organisation d’un ordinateur Technique de pipeline Supposons le cycle de traitement d’une instruction suivant : EI Extraction de l’instruction et dépôt dans RI DI Décodage de l’instruction et accès aux opérandes dans des registres EX Exécution de l’instruction MEM Mise à jour du PC lors d’un branchement Accès mémoire pour un chargement ou un stockage ER Écriture du résultat dans un registre Le cycle comporte 5 étapes indépendantes
Organisation d’un ordinateur Technique de pipeline Le cycle comporte 5 étapes indépendantes Sans pipeline, l’exécution de 3 instructions prend 15 cycles EI DI EX MEM ER Avec pipeline, l’exécution de 3 instructions prend 7 cycles EI DI EX MEM ER
Organisation d’un ordinateur Technique de pipeline Il peut y avoir des situations conflictuelles Accès parallèle à la mémoire EI DI EX MEM ER La 4e instruction et la première instruction peuvent vouloir accéder à des zones mémoires distinctes simultanément. Le problème est réglé par le matériel.
Organisation d’un ordinateur Technique de pipeline Il peut y avoir des situations conflictuelles Utilisation de données communes EI DI EX MEM ER La deuxième instruction peut avoir besoin du résultat de la première instruction comme valeur d’opérande. Le problème est réglé majoritairement par le matériel.
Organisation d’un ordinateur Technique de pipeline Il peut y avoir des situations conflictuelles Modification de la séquence des instructions (instructions hasardeuses) EI DI EX MEM ER EI DI EX MEM ER Branchement On suspend le pipeline lorsqu’un branchement est détecté (étape DI) jusqu’à l’étape MEM. Il reste quand même une instruction qui ne devrait pas être exécutée. Dans une architecture avec pipeline, l’instruction qui suit un branchement est toujours exécutée! Le programmeur doit en tenir compte.
Architecture SPARC Architecture RISC de 64 bits (version 9) Mémoire centrale Supporte les octets, les demi-mots, les mots (32 bits) et les doubles mots (64 bits, appelés mot étendu) Les adresses sont représentées par des mots étendus. Il y a des contraintes sur les frontières L’adresse d’un demi-mot est paire L’adresse d’un mot est un multiple de 4 L’adresse d’un mot étendu est un multiple de 8 Le bit 0 d’une cellule est le moins significatif Le format par défaut est « big endian »
Architecture SPARC 32 registres 8 registres généraux (g0 à g7) 8 registres d’entrée (i0 à i7) 8 registres locaux (L0 à L7) 8 registres de sortie (o0 à o7) Certains registres sont dédiés à certaines fonctionnalités g0 Contient toujours la valeur 0 o6, o7, i6, i7 utilisés pour le pointeur de pile, les adresses de retour pour les fonctions, etc.
Architecture SPARC Nom global Nom spécifique Usage R0 g0 Vaut toujours 0, lecture seulement R1 g1 Libre … R7 g7 R8 o0 R14 o6 SP (sommet de la pile « stack pointer ») R15 o7 Dédié lors de l’appel d’un sous-programme R16 L0 R23 L7 R24 i0 ... R30 i6 FP (pointeur de cadre « frame pointer »), lien avec o6 R31 i7 Dédié lors de l’appel d’un sous-programme, lien avec o7
Architecture SPARC Registres spécialisés Compteur ordinal (PC, 64 bits) Contient l’adresse de l’instruction exécutée Compteur ordinal voisin (nPC, 64 bits) Contient l’adresse de la prochaine instruction à exécuter Registre de codes de condition (CCR, 8 bits) Bit n (négatif), z (zéro), v (débordement), c (report) Sont présents deux fois dans le registre (pour les opérations sur 32 bits (icc) et celles sur 64 bits (xcc)) Registres virgule flottante 32 registres simple précision (F0 à F31, 32 bits), 32 double précision (F0, F2, … F62, 64 bits), 16 quadruple précision (F0, F4, …, F60, 128 bits) Registre d’état des registres virgules flottantes (FPRS, 3 bits) Registre d’état de l’unité virgule flottante (FSR, 64 bits)
Architecture SPARC Cycle de traitement d’une instruction Extraction de l’instruction à l’adresse contenue dans le PC et dépôt dans RI Décodage et accès aux opérandes Exécution de l’instruction, si l’instruction précédente n’est pas Un branchement avec annulation Une remise à l’état initial (« reset ») Une interruption PC = nPC nPC = nPC + 4 Si l’instruction courante est un branchement, nPC prend la valeur de l’adresse du branchement Dépôt des résultats
Architecture SPARC Le SPARC a la particularité de fournir des fenêtres de registres Une fenêtre comporte 24 registres (8 registres de sorties, 8 registres locaux, 8 registres d’entrées) Les registres globaux (G0 à G7) sont communs à toutes les fenêtres. Seulement une fenêtre de registre est accessible à la fois Il y a au maximum 520 registres sur le processeur, pour un maximum de 32 fenêtres de registre Chaque fenêtre partage 8 registres avec la fenêtre précédente Il y a des instructions particulières pour changer de fenêtre de registre et avoir accès à 16 nouveaux registres save restore
Architecture SPARC g0 à g7 i0 à i7 L0 à L7 o0 à o7 Permet le passage de paramètres entre des sous-programmes. Les registres de sorties d’une fenêtre sont les registres d’entrées de la fenêtre suivante.
Architecture SPARC SAVE ! Instruction allouant une nouvelle fenêtre ⋮ ⋮ Corps du sous-programme ⋮ RET ! Instruction de retour RESTORE ! Instruction pour revenir à l’ancienne fenêtre
Instructions 3 formats principaux Le champ « Code Op » est subdivisé Généralement 3 opérandes Le champ « Code Op » est subdivisé « op » (bits 30 et 31) « op2 » « op3 » Les opérandes peuvent être Un déplacement Une valeur Un registre (« rs1 », « rs2 », « rd »)
Instructions Format 1 Ce format représente l’instruction « call » L’adresse d’appel est équivalente à 𝑃𝐶+(4×𝐷é𝑝𝑙𝑎𝑐𝑒𝑚𝑒𝑛𝑡) 1 Déplacement de 30 bits 31 30
Instructions Format 2 Il s’agit de l’instruction « sethi » Il s’agit d’une instruction de branchement Immédiat de 22 bits 31 30 rd op2 29 25 24 22 21 Immédiat de 22 bits 31 30 cond op2 29 25 24 22 21 a 28
Instructions Format 3 Instructions logiques et arithmétique entière Instructions de chargement et de stockage 1 rs2 31 30 rd op3 29 25 24 19 18 rs1 14 asi 13 12 5 4 1 Immédiat de 13 bits 31 30 rd op3 29 25 24 19 18 rs1 14 13 12 1 rs2 31 30 rd op3 29 25 24 19 18 rs1 14 asi 13 12 5 4 1 Immédiat de 13 bits 31 30 rd op3 29 25 24 19 18 rs1 14 13 12
Instructions Seules les instructions de chargement et de stockage peuvent accéder à la mémoire ld [rs1+rs2], rd [%l0+%l3], %l6 [rs1+imm13], rd [%i4-124], %o2 [rs1], rd [%l1], %l7 st rd, [rs1+rs2] %i3, [%l1+%o2] rd, [rs1+imm13] %l0, [%i1+0x1C] rd, [rs1] %o5, [%o0] add rs1, rs2, rd %l2, %i5, %l7 rs1, imn13, rd %l3, 345, %l5
Instructions Sur l’architecture SPARC, l’instruction qui suit un branchement est toujours exécutée (pipeline). Cette instruction se trouve dans la fente de temporisation (« delay slot ») Le programmeur doit en tenir compte et mettre une instruction qui n’altère pas le traitement souhaité NOP : Instruction synthétique dérivée de SETHI 0, %g0
Instructions Solution facile mov 1, %o0 setx A, %o1 8, %o2 call spg nop Solution élégante mov 1, %o0 setx A, %o1 call spg 8, %o2 Attention : setx est une instruction synthétique qui est remplacée par six instructions à la compilation elle ne doit jamais être dans la fente de temporisation.