Architecture et technologie des ordinateurs II G. Tempesti Semaine
Transcription
Architecture et technologie des ordinateurs II G. Tempesti Semaine
Architecture et technologie des ordinateurs II Instructions ® ® ® Types d’instructions Séquencement Contrôle MÉMOIRE MÉMOIRE PRINCIPALE PRINCIPALE IO IO IO IO IO IO BUS SYSTÈME Cache Instructions Unité Unitéde de Contrôle Contrôle Décodeur CPU Unité Unitéde de Traitement Traitement Cache Données ALU Unité Flottante PC Registres Registres Contrôle de l’unité de traitement OUTPORT UNITÉ DE CONTRÔLE 3 3 3 3 3 OEN SEL AL[2:0] SH[2:0] RA[2:0] RB[2:0] WEN WA[2:0] OEN SEL AL[2:0] AL[2:0] OENSEL SEL 1 0 AL2 AL1 AL0 I0 I1 Z Zπ0 SH2 SH1 SH0 RA 3 RB 3 WEN WA 3 Zπ0 INPORT OEN SH[2:0] SH[2:0] WEN WEN SHIFTER R0 R1 R2 R3 R4 R5 R6 R7 RA[2:0] RA[2:0] OPÉRATION RB[2:0] RB[2:0] WA[2:0] WA[2:0] OPÉRANDES Contrôle par instructions - Décodage Adresse SLC SLC RAM RAM Contrôle 0:data ¨ inport 1:ocount ¨ 0 2:mask ¨ 1 3:while data π 0 ¨data AND mask 4:temp¨ ¨ocount+temp 5:ocount¨ 6:data ¨ data >> 1 end while CK 7:outport ¨ ocount Fanions SLC SLC Opérandes nn BASCULES BASCULES Opcode Opcode Opérandes Opérandes Instruction 0:0|1 1:2 2:3 3:4 4:5 5:6 6:7|4 7:0 0:R1 1:R0,R2 2:R0,R3 3: 4:R1,R3,R4 5:R2,R4,R2 6:R1,R1 7:R2 ¨IN 0:A¨ ¨A 1:B¨ ¨A+1 2:B¨ 3:NOP 4: 5: 6: 7: ¨A&B C¨ ¨A+B C¨ ¨A>>1 B¨ ¨A OUT¨ Chaque instruction doit permettre de générer les bits de contrôle pour l’unité de traitement ainsi que l’adresse de l’instruction suivante. G. Tempesti Semaine V 1 Architecture et technologie des ordinateurs II Format des instructions: exemple Le codage des instructions est, en général, arbitraire: LOAD MOVE INC BRA AND ADD SHR BRA STORE ADR, R1 R0, R2 R0, R3 ADR, COND R1, R3, R4 R2, R4, R2 R1, R1 ADR, COND ADR, R2 OPCODE 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 0 1 1 1 1 1 OPER1 OPER2 Adresse[5:0] 0 0 0 0 1 0 0 0 0 0 1 1 Adresse[5:0] 0 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 1 Adresse[5:0] Adresse[5:0] OPER3 0 0 1 ø ø ø ø ø ø data=0 1 0 0 0 1 0 ø ø ø vrai 0 1 0 Compilation program program toto; toto; var var A, A, B, B, CC :: array array [1...1000] [1...1000] of of integer; integer; ii :: integer integer begin begin ... ... for for i:=1 i:=1 to to 1000 1000 do do C[i] C[i] := := A[i] A[i] ++ B[i]; B[i]; ... ... end end COMPILATEUR COMPILATEUR Algorithme Algorithme flfl Langage Langage de de haut-niveau haut-niveau flfl Langage Langage machine machine ==jeu jeud’instructions d’instructions ... ... MOVE.L MOVE.L #2001,A0 #2001,A0 MOVE.L MOVE.L #3001,A1 #3001,A1 MOVE.L MOVE.L #4001,A2 #4001,A2 START: START: ABCD ABCD -(A0),-(A1) -(A0),-(A1) MOVE.B MOVE.B (A1),(A2) (A1),(A2) TEST: TEST: CMPA CMPA #1001, #1001, A0 A0 BNE START BNE START ... ... Opération du processeur - Opcodes Un processeur non-spécialisé (general-purpose) doit avoir un jeu d’instructions qui soit: ¾ Complet: il doit pouvoir exécuter toute fonction calculable; il doit exécuter rapidement les fonctions les plus utilisées; ¾ Régulier: il doit contenir les fonctions attendues (p.ex., s’il y a un décalage à gauche, il doit y avoir un décalage à droite); ¾ Compatible?: si nécessaire, il doit être compatible avec le jeu d’une machine existante. ¾ Efficace: Tout algorithme est réalisé par une séquence (série) d’instructions. G. Tempesti Semaine V 2 Architecture et technologie des ordinateurs II Boucle de traitement Début Début Instructions Instructions en enattente? attente? OUI NON Chargement Chargement Les instructions sont stockées en mémoire, comme n’importe quelle donnée. À chaque instruction correspond donc un adresse. Chaque instruction est chargée dans le processeur, décodée pour déterminer sa fonction et les bits de contrôle pour l’unité de traitement sont générés en conséquence. Décodage Décodage NON Interruptions Interruptions en enattente? attente? OUI Traitement Traitement L’unité de traitement effectue l’opération désirée sur les données. Si une interruption est en attente, elle a normalement précédence sur les instructions, et elle est donc traitée immédiatement. Types d’instructions - Opcode ¾ Transfert de données Transferts d’informations entre positions mémoire (interne ou externe au processeur) ¾ Arithmétique Opérations sur données numériques ¾ Logique Opérations booléennes et autres ¾ Entrées/sorties (I/O) Transferts d’informations entre le processeur ou la RAM et les unités externes ¾ Contrôle Instructions qui modifient le flot d’instructions Format des instructions: exemple data ¨ inport ocount ¨ 0 mask ¨ 1 while data π 0 temp ¨ data AND mask ocount ¨ ocount + temp data ¨ data >> 1 end while outport ¨ ocount G. Tempesti = = = = = = = = = LOAD MOVE INC BRA AND ADD SHR BRA STORE ADR, R1 R0, R2 R0, R3 COND, ADR R1, R3, R4 R2, R4, R2 R1, R1 1, ADR ADR, R2 [T] [T] [A] [C] [L] [A] [L] [C] [T] Semaine V 3 Architecture et technologie des ordinateurs II Format des instructions Opcode Conditions Opérandes Opérandes (3) (3) Prochaine(s) Prochaine(s) instruction(s) instruction(s) Opcode Conditions Beaucoup d’information! P.ex., une architecture avec 256 instructions, 16 fanions, 64 registres et un bus (adresse) de 32 bits aurait besoin, même si tous les opérandes sont des registres (ce qui n’est pas le cas), de 8 + 4 + 6x3 + 32x2 = 94 bits! Une solution est de coder les instructions sur plusieurs mots mémoire. Ce fut une technique très utilisée dans le passé (processeurs 8 et 16 bits) et le reste aujourd’hui pour certains types d’instructions. Elle introduit cependant beaucoup de délai (plusieurs coups d’horloge par instruction, décodage complexe). Des simplifications sont nécessaires! Format des instructions - Simplifications Première simplification: chaque type d’instruction nécessite des informations différentes. Transferts de données: 78 bits (un opérande peut être une adresse) Opcode Prochaine Opérandes (2) (2) Prochaine instruction instruction Opcode Opérandes Opérations arithmétiques et logiques: 58 bits (que des registres) Opcode Opcode Opérandes Opérandes (3) (3) Prochaine Prochaine instruction instruction Opérations d’entrée/sortie: 78 bits (un opérande peut être une adresse) Opcode Opcode Opérandes Opérandes (2) (2) Prochaine Prochaine instruction instruction Instructions de contrôle: 76 bits Opcode Opcode Conditions ConditionsProchaine(s) Prochaine(s) instruction(s) instruction(s) Format des instructions - Simplifications Deuxième simplification: par défaut, on peut définir la prochaine instruction comme étant l’instruction suivante en mémoire. Adresse 0:+1|0 1:+1 2:+1 3:+1 Fanions G. Tempesti SLC SLC RAM RAM Contrôle CK SL SL Opérandes 0:data ¨ inport 1:ocount ¨ 0 2:mask ¨ 1 3:while data π 0 ¨data AND mask 4:temp¨ ¨ocount+temp 5:ocount¨ 6:data ¨ data >> 1 end while 7:outport ¨ ocount nn BASCULES BASCULES Opcode Opcode Opérandes Opérandes Instruction 4:+1 5:+1 6:+1|4 7:0 Semaine V 4 Architecture et technologie des ordinateurs II Séquenceur Adresse SLC SLC Fanions Contrôle RAM RAM CK Adresse PC Opérandes nn BASCULES BASCULES Opcode Opcode Opérandes Opérandes Instruction Séquenceur Séquenceur CK +1 CK Opérande Opcode Condition Fanions SLC Format des instructions - Simplifications Transferts de données: 46 bits (un opérande peut être une adresse) Opcode Opcode Opérandes Opérandes (2) (2) Opérations arithmétiques et logiques: 26 bits (que des registres) Opcode Opcode Opérandes Opérandes (3) (3) Opérations d’entrée/sortie: 46 bits (un opérande peut être une adresse) Opcode Opcode Opérandes Opérandes (2) (2) Instructions de contrôle: 44 bits Opcode Opcode Condition Condition Prochaine Prochaine instruction instruction Toujours trop grandes! Il faut trouver d’autres simplifications. Opérations arithmétiques et logiques Les opérations arithmétiques et logiques peuvent, en théorie, être effectuées directement sur des données en mémoire (CISC): add adr1,adr2,adr3 (8+32x3=104 bits!) En pratique, pour simplifier le contrôle du processeur, ce type d’opérations est toujours fait avec des données préalablement placées dans les registres du processeur (RISC): add rx,ry,rz (8+6x3=26 bits) Grâce à cette approche, 32 bits sont normalement suffisants pour stocker une instruction complète. Pour des processeurs plus petits (16 bits), on peut toujours réduire le nombre d’opérandes à deux: move rx,rz add ry,rz G. Tempesti Semaine V 5 Architecture et technologie des ordinateurs II Transferts de données et I/O Pour les transferts de données et pour le traitement des entrées/sorties, on ne peut pas se passer de références à la mémoire principale. L’instruction doit coder soit les données elles-mêmes, soit des indications sur comment l’unité de traitement peux les retrouver. Encore une fois, les transferts de données peuvent, en théorie, être effectués directement sur des adresses mémoire: move adr1,adr2 (8+32x2=72 bits) En pratique, pour simplifier le contrôle du processeur, un des opérandes (la source ou la destination, indifféremment) dans ce type d’opérations est toujours un des registres du processeur: (8+ 32+6=46 bits) move adr,rx Cette approche réduit le nombre de bits nécessaires pour codes ces instructions, mais pas suffisamment. Le problème est résolu (plus ou moins) par l’utilisations de modes d’adressage. Modes d'adressage Pour les transferts de données et pour le traitement des entrées/sorties, on suppose donc que l’un des opérandes est un registre. L’autre opérande doit coder soit les données elles-mêmes, soit leur emplacement dans la mémoire principale (adresse). Petit exemple: MAX = 100; CNTR = MAX/2; ARR = MALLOC(MAX*sizeof(INT)); START_VAL = *(ARR); END_VAL = *(ARR + 100); CNTR_VAL = *(ARR + CNTR); START = ARR; END = ARR + MAX; FOR (I=0; I<CNTR; I++) { BOTTOM_HALF += *(START); START += sizeof(INT); TOP_HALF += *(END-sizeof(INT)); ... } Adressage immédiat Si les données sont stockées directement dans l'instruction elle-même, on parle d’adressage immédiat ou littéral: move data,rx Opcode Opcode Data Data Destination Destination (Rx) (Rx) Il faut remarquer que les données de ce type d’instruction ont forcément une taille limitée par largeur de l’instruction (dans notre exemple, 32 - 8 - 6 = 18 bits). Dans notre exemple: MAX = 100; G. Tempesti Semaine V 6 Architecture et technologie des ordinateurs II Adressage par registre Les données peuvent être préalablement stockées dans un des registres du processeur. On parle dans ce cas d’adressage par registre: move ry,rx Opcode Opcode Source Source(Ry) (Ry) Destination Destination (Rx) (Rx) Banc Bancdes des registres registres Opérande Les données dans ce type d’instructions ont une taille égale à la largeur des registres. Dans notre exemple: CNTR = MAX/2; Adressage direct Si le deuxième opérande doit indiquer l’emplacement des données en mémoire principale, on peut coder directement l’adresse dans l’instruction. On parle dans ce cas d’adressage direct ou absolu: move adr,rx Opcode Opcode Source Source (adresse) (adresse) Destination Destination (Rx) (Rx) Mémoire Mémoire MMU MMU Opérande La taille des adresses est ici limitée par la largeur de l’instruction. Les bits restants sont implicites (ajoutés par la MMU). Ce mode d'adressage est très rarement utilisé dans les programmes écrits par l'utilisateur. Par contre, il est très commun dans les OS: ARR = MALLOC(MAX*sizeof(INT)); Adressage indirect par registre L’emplacement (adresse) des données en mémoire principale peut aussi être préalablement stocké dans un des registres du processeur. On parle dans ce cas d’adressage indirect par registre: move (ry),rx Opcode Opcode Source Source(Ry) (Ry) Destination Destination (Rx) (Rx) Banc Bancdes des registres registres Mémoire Mémoire Adresse Opérande Les adresses dans ce type d’instructions ont une taille égale à la largeur des registres. Dans notre exemple: START_VAL = *(ARR); G. Tempesti Semaine V 7 Architecture et technologie des ordinateurs II Adressage indirect via mémoire L’emplacement (adresse) des données en mémoire principale peut être lui-même stocké en mémoire principale. On parle dans ce cas d’adressage indirect via mémoire: move (adr),rx Opcode Opcode Source Source (adresse) (adresse) Destination Destination (Rx) (Rx) Mémoire Mémoire Opérande MMU MMU Adresse La taille des adresses est ici limitée par la largeur de l’instruction. Les bits restants sont implicites (ajoutés par la MMU). Comme l'adressage direct, ce mode d'adressage est très rarement utilisé dans les programmes écrits par l'utilisateur mais il est très commun dans les OS. Adressage avec déplacement L’emplacement (adresse) des données en mémoire principale peut être défini comme un déplacement (offset) par rapport à une adresse de base stockée dans un des registres. Si le déplacement est stocké dans l'instruction, on parle d’adressage avec déplacement ou basé: move dpl(ry),rx Opcode Offset Base Destination Offset Base(Ry) (Ry) Destination (Rx) (Rx) Opcode Banc Bancdes des registres registres Adresse Mémoire Mémoire ++ Opérande La taille des adresses est égale à la largeur des registres. Par contre, la taille du déplacement est limitée par la taille de l'instruction. Dans notre exemple: END_VAL = *(ARR + 100); Adressage indexé L’emplacement (adresse) des données en mémoire principale peut être défini par la somme d’une adresse de base stockée dans un registre et d’un déplacement (index) stocké dans un autre registre. On parle dans ce cas d’adressage indexé: move (ry+rz),rx Opcode Base Index Destination Base(Ry) (Ry) Index(Rz) (Rz) Opcode Destination (Rx) (Rx) Mémoire Mémoire Banc Bancdes des registres registres Offset ++ Opérande Adresse Les adresses et le déplacements dans ce type d’instructions ont une taille égale à la largeur des registres. Dans notre exemple: CNTR_VAL = *(ARR + CNTR); G. Tempesti Semaine V 8 Architecture et technologie des ordinateurs II Adressage auto-incrémenté Pour parcourir une série de positions mémoire successives (p.ex. lors de l’accès à une table), il est utile d’incrémenter une adresse avant ou après chaque accès. Il s'agit de l’adressage auto-incrémenté. Post-incrément: Opcode Opcode move (ry)+,rx Source Source(Ry) (Ry) Destination Destination (Rx) (Rx) Banc Bancdes des registres registres Mémoire Mémoire Adresse Opérande ++ Les adresses dans ce type d’instructions ont une taille égale à la largeur des registres. Taille de la donnée Dans notre exemple: BOTTOM_HALF += *(START); START += sizeof(INT); Adressage auto-décrémenté Pour parcourir une série de positions mémoire successives à partir de la fin, il est utile de décrémenter une adresse avant ou après chaque accès. On parle dans ce cas d’adressage auto-décrémenté. Pre-décrément: move -(ry),rx Opcode Source Destination Source(Ry) (Ry) Destination (Rx) (Rx) Opcode Taille de la donnée Banc Bancdes des registres registres Adresse Mémoire Mémoire -- Opérande Les adresses dans ce type d’instructions ont une taille égale à la largeur des registres. Dans notre exemple: TOP_HALF += *(END-sizeof(INT)); Petit exemple bien compliqué program toto; var A, B, C : array [1...1000] of integer; i : integer begin for i:=1 to 1000 do C[i] := A[i] + B[i]; end ... MOVE.L #2001,A0 Charger l’adresse 2001 dans le registre A0 (pointeur sur le vecteur A) MOVE.L #3001,A1 Charger l’adresse 2001 dans le registre A1 (pointeur sur le vecteur B) MOVE.L #4001,A2 Charger l’adresse 2001 dans le registre A2 (pointeur sur le vecteur C) START: ABCD -(A0),-(A1) Décrémenter le contenu de A0 et A1 (adresses), puis additionner les données (1 byte BCD) MOVE.B (A1),-(A2) Décrémenter A2 et stocker le résultat (1 octet) dans le vecteur C TEST: CMPA #1001, A0 Comparer le contenu de A0 (adresse) avec 1001; Z=1 si les deux valeurs sont égales, Z=0 sinon BNE START Sauter à START si Z n’est pas égal à 1 ... G. Tempesti Semaine V 9 Architecture et technologie des ordinateurs II Instructions de contrôle Les instructions de contrôle (essentiellement des branchements) doivent nécessairement indiquer une adresse (la cible du branchement): if (cond) then [continue] else [branche] Opcode Condition Opcode Condition Adresse Adressecible cible En théorie, cette cible pourrait être n’importe quelle position mémoire. En pratique, dans la grande majorité des cas, il s’agit d’un saut à une instruction dont la position mémoire est relativement proche de l’instruction qui est en train de s’exécuter. Par conséquent, le mode d’adressage couramment utilisé pour les instructions de contrôle est l’adressage par déplacement, où la base est définie implicitement comme étant le PC. Opcode Offset Condition Offset Opcode Condition Branchement par déplacement 0:+1|+0 1:+1 2:+1 3:+1 SLC SLC Opérandes RAM RAM Contrôle nn BASCULES BASCULES Opcode Opcode Opérandes Opérandes Instruction 0:data ¨ inport 1:ocount ¨ 0 2:mask ¨ 1 3:while data π 0 ¨data AND mask 4:temp¨ ¨ocount+temp 5:ocount¨ 6:data ¨ data >> 1 end while 7:outport ¨ ocount Séquenceur Séquenceur Adresse CK CK Fanions 4:+1 5:+1 6:+1|-2 7:-7 Séquenceur Adresse Fanions G. Tempesti RAM RAM Contrôle CK Adresse PC +1 CK + SLC SLC Opérandes nn BASCULES BASCULES Opcode Opcode Opérandes Opérandes Instruction Séquenceur Séquenceur CK Offset Opcode Condition Fanions SLC Semaine V 10