Translate

الجمعة، 29 نوفمبر 2013

Cours Archietcture des ordinateurs

                           Cours Archietcture des ordinateurs

                                Chapitre 3 : le microprocesseur
                                                   2 LMD

1- Définition

Un microprocesseur est un circuit intégré complexe caractérisé par une très grande intégration et doté des facultés d'interprétation et d'exécution des instructions d'un programme. Il est chargé d’organiser les tâches précisées par le programme et d’assurer leur exécution. Il doit aussi prendre en compte les informations extérieures au système et assurer leur traitement. C’est le cerveau du système.
A l’heure actuelle, un microprocesseur regroupe sur quelques millimètres carrés des fonctionnalités toujours plus complexes. Leur puissance continue de s’accroître et leur encombrement diminue régulièrement respectant toujours, pour le moment, la fameuse loi de Moore (1).

2- Architecture de base d’un microprocesseur

Un microprocesseur est construit autour de deux éléments principaux : Une unité de commande et une unité de traitement, associés à des registres chargées de stocker les différentes informations à traiter. Ces trois éléments sont reliés entre eux par des bus interne permettant les échanges d’informations.

Remarques :

Il existe deux types de registres :
• les registres d'usage général permettent à l'unité de traitement de manipuler des données à vitesse élevée. Ils sont connectés au bus données interne au microprocesseur.
• les registres d'adresses (pointeurs) connectés sur le bus adresses.

2.1 L’unité de commande

Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche en mémoire de l'instruction. Comme chaque instruction est codée sous forme binaire, elle en assure le décodage pour enfin réaliser son exécution puis effectue la préparation de l'instruction suivante. Pour cela, elle est composée par :

- le compteur de programme constitué par un registre dont le contenu est initialisé avec l'adresse de la première instruction du programme. Il contient toujours l’adresse de l’instruction à exécuter.

- le registre d'instruction et le décodeur d'instruction : chacune des instructions à exécuter est rangée dans le registre instruction puis est décodée par le décodeur d’instruction.

- Séquenceur : Il organise l'exécution des instructions au rythme d’une horloge. Il élabore tous les signaux de synchronisation internes ou externes (bus de commande) du microprocesseur en fonction des divers signaux de commande provenant du décodeur d’instruction ou du registre d’état par exemple. Il s'agit d'un automate réalisé soit de façon câblée (obsolète), soit de façon micro-programmée.

2.2 L’unité de traitement

C’est le coeur du microprocesseur. Elle regroupe les circuits qui assurent les traitements nécessaires à l'exécution des instructions :

- L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions logiques (ET, OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).

- Le registre d'état (PSW) est généralement composé de 8 bits à considérer individuellement. Chacun de ces bits est un indicateur dont l'état dépend du résultat de la dernière opération effectuée par l’UAL. On les appelle indicateur d’état ou flag ou drapeaux. Dans un programme le résultat du test de leur état conditionne souvent le déroulement de la suite du programme. On peut citer par exemple les indicateurs de :
bit de retenue (carry : C)



bit de retenue intermédiaire (Auxiliary-Carry : AC)
bit de signe (Sign : S)
bit de débordement (overflow : OV ou V)
bit de zéro (Z)
bit de parité (Parity : P)
- Les accumulateurs sont des registres de travail qui servent à stocker un opérande au début d'une opération arithmétique et le résultat à la fin de l'opération.
2.3 Schéma fonctionnel d’un processeur à 1 seul accumulateur
3- Cycle d’exécution d’une instruction
Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en binaire. Le traitement d’une instruction peut être décomposé en trois phases.
Phase 1: Recherche de l'instruction à traiter
1. Le PC contient l'adresse de l'instruction suivante du programme. Cette valeur est placée sur le bus d'adresses par l'unité de commande qui émet un ordre de lecture ;
2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire sélectionnée est disponible sur le bus des données.

3. L'instruction est stockée dans le registre instruction du processeur.

Phase 2: Décodage de l’instruction et recherche de l'opérande

Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut être codée sur plusieurs mots. Ce premier mot contient le code opératoire qui définit la nature de l'opération à effectuer (addition, rotation,...) et le nombre de mots de l'instruction.
1. L'unité de commande transforme l'instruction en une suite de commandes élémentaires nécessaires au traitement de l'instruction.
2. Si l'instruction nécessite une donnée en provenance de la mémoire, l'unité de commande récupère sa valeur sur le bus de données.

3. L’opérande est stockée dans un registre.

4. L'unité de commande positionne le PC pour l'instruction suivante.
Phase 3: Exécution de l'instruction

1. Le micro-programme réalisant l'instruction est exécuté.

2. Les drapeaux sont positionnés (registre d'état)


4- Jeu d’instructions
La première étape de la conception d’un microprocesseur est la définition de son jeu d’instructions. Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le microprocesseur pourra exécuter. Il va donc en partie déterminer l’architecture du microprocesseur à réaliser et notamment celle du séquenceur. A un même jeu d’instructions peut correspondre un grand nombre d’implémentations différentes du microprocesseur.
4.1 Type d’instructions
Les instructions que l’on retrouve dans chaque microprocesseur peuvent être classées en 4groupes :
• Transfert de données pour charger ou sauvegarder en mémoire centrale, effectuer des transferts de registre à registre (load et store pour les processeurs à 1 accumulateur, Move pour les processeurs à plusieurs registres et push et pop pour les processeurs à pile)
• Opérations arithmétiques : addition ADD, soustraction SUB, division DIV, multiplication MUL.
• Opérations logiques : ET, OU, NON, NAND, etc.
• Contrôle de séquence : branchement inconditionnel JMP, branchement conditionnel JE, JZ, etc, comparaison CMP, etc
• Opérations d’E/S : comme lecture via le clavier ou afficher sur ecran etc.
4.2 Format d’instruction
Les instructions et leurs opérandes (paramètres) sont stockés en mémoire principale. La taille totale d’une instruction (nombre de bits nécessaires pour la représenter en mémoire) dépend du type d’instruction et aussi du type d’opérande. Chaque instruction est toujours codée sur un nombre entier d’octets afin de faciliter son décodage par le processeur. Une instruction est composée de deux champs :
• le champ code instruction, qui indique au processeur quelle opération réaliser
• le champ (ou les champs opérandes) qui contient la donnée, ou l’adresse d’une donnée en mémoire.
Il y a des opérations qui ne nécessitent pas des opérandes tel que fin de programme, comme il y a des instructions qui nécessitent un seul opérande tel que les instrcutions de branchement. Les instructions de transfert necéssitent deux opérandes source et destination. Par contre les instrcutions arithmétique et logique necéssitent 3 opérandes, le troisième opérande correspond au résultat de l’opération.
Le nombre de registres de travail (accumulateurs) se différent d’un processeur à un autre, il y a des processeurs qui contiennent soit :

- un seul accumulateur, ce type de processeur appelé processeur à 1 adresse,
- plusieurs registres (jusque 4 registres), ce type de processeur appelé processeur à 2 adresses,

- plusieurs registres (jusqu’à 32 registres), ce type de processeur appelé processeur à 3 adresse

- une pile. ce type de processeur appelé processeur à 0 adresse.
Selon le type de processeur on distingue 4 formats des instructions : (voir les opérations arithmétique et logique)

- Instruction à 1 adresse




4.3 Mode d’adressage
Un champ adresse peut permettre de référencer un registre ou un mot en mémoire. Il peut contenir le numéro du registre ou l'adresse effective du mot mais ce ne sont pas les seules manières d'identifier un opérande. Pour faciliter la programmation il existe de nombreux modes d'adressage. Le mode est défini soit par le code opération lorsque celui-ci impose un type déterminé, soit par un code faisant partie du champ adresse.
Les exemples utilisés ci-dessous pour expliquer les différents modes d’adressage sont empruntés aux instructions de l'assembleur PDP-11.

- Adressage implicite
Le code opération identifie automatiquement l'opérande, l'instruction ne peut porter que sur un registre particulier (par exemple test sur le signe du résultat d'une opération arithmétique : concerne le registre d'état PSW). Aucun champ adresse n'est nécessaire.
- Adressage immédiat
La valeur de l'opérande est contenue dans le champ adresse si le nombre de bits dans ce champ est suffisant, sinon dans le mot suivant l'instruction.
MOV #100, R1 Après cette instruction le registre R1 contient la valeur 100.
- Adressage registre
Le champ adresse contient le numéro du registre opérande.
CLR R3 Après cette instruction le contenu de R3 est nul.
- Adressage direct
Le champ adresse de l'instruction contient l'adresse effective de l'opérande.
100 : 250
MOV 100, R2 Après cette instruction le registre R2 contient le mot qui se situe à l'adresse 100 en mémoire, c'est-à-dire 250.
- Adressage indirect
Le champ adresse contient l'adresse d'un pointeur : mot en mémoire qui contient l'adresse effective de l'opérande.
MOV (R1), R4 Après cette instruction R4 contient la valeur du mot dont l'adresse est contenue dans R1. Comme R1 vaut 100 on trouve 250 dans R4.
- Adressage indexé
Ce mode d'adressage est très utile lorsqu'on travaille, par exemple, sur des tableaux. Considérons un bloc de n mots consécutifs débutant à l'adresse A. Le kième mot se trouve à l'adresse A + (k - 1). Pour référencer ce mot il est possible d'utiliser un registre d'index. L'adresse effective est calculée en additionnant le contenu de ce registre d'index à l'adresse qui se trouve dans le champ adresse de l'instruction. Sur certaines machines tous les registres généraux peuvent être utilisés comme registres d'index. La présence d'un registre d'index s'accompagne généralement de la possibilité d'incrémentation et décrémentation automatiques.
MOV R4, 100(R3)+
CLR 100(R3) Avant la première opération R3 est nul, donc le contenu de R4 est transféré à l'adresse 100. Après le registre R3 est incrémenté. L'instruction suivante permet de mettre à zéro le contenu du mot à l'adresse suivante.
- Adressage basé
L'adressage basé est comparable à l'adressage indexé mais cette fois l'adresse effective est obtenue en additionnant le contenu du registre de base au contenu du champ adresse de l'instruction. Ce mode d'adressage est utilisé par exemple en cas d'allocation dynamique de la mémoire : la position du programme en mémoire peut changer en fonction de la charge du système et il n'occupe pas toujours un espace contigu. Cette technique permet également de réduire le nombre de bits dans le champ adresse : le registre de base contient la première adresse d'un bloc de 2k mots et l'adresse (sur k bits) contenue dans l'instruction représente le déplacement à l'intérieur du bloc.
- Adressage relatif
L'adresse effective est obtenue en additionnant le contenu du compteur ordinal au contenu du champ adresse de l'instruction. Ce type d'adressage est utilisé par exemple dans des instructions de branchement. N'oublions pas que lecalcul de l'adresse effective peut nécessiter quelques opérations (addition par exemple). L'utilisation de certains modes d'adressage sophistiqués (le 68020 de Motorola dispose par exemple d'une cinquantaine de modes d'adressage) peut donc augmenter le temps de traitement d'une instruction.

4.4 Temps d’exécution

Chaque instruction nécessite un certain nombre de cycles d’horloges pour s’effectuer. Le nombre de cycles dépend de la complexité de l’instruction et aussi du mode d’adressage. Il est plus long d’accéder à la mémoire principale qu’à un registre du processeur. La durée d’un cycle dépend de la fréquence d’horloge du séquenceur.

5- Langage de programmation

Le langage machine est le langage compris par le microprocesseur. Ce langage est difficile à maîtriser puisque chaque instruction est codée par une séquence propre de bits. Afin de faciliter la tâche du programmeur, on a créé différents langages plus ou moins évolués.
Le langage assembleur est le langage le plus « proche » du langage machine. Il est composé par des instructions en général assez rudimentaires que l’on appelle des mnémoniques. Ce sont essentiellement des opérations de transfert de données entre les registres et l'extérieur du microprocesseur (mémoire ou périphérique), ou des opérations arithmétiques ou logiques. Chaque instruction représente un code machine différent. Chaque microprocesseur peut posséder un assembleur différent. La difficulté de mise en oeuvre de ce type de langage, et leur forte dépendance avec la machine a nécessité la conception de langages de haut niveau, plus adaptés à l'homme, et aux applications qu'il cherchait à développer. Faisant abstraction de toute architecture de machine, ces langages permettent l'expression d'algorithmes sous une forme plus facile à apprendre, età dominer (C, Pascal, Java, etc…). Chaque instruction en langage de haut niveau correspondra à une succession d’instructions en langage assembleur. Une fois développé, le programme en langage de haut niveau n’est donc pas compréhensible par le microprocesseur. Il faut le compiler pour le traduire en assembleur puis l’assembler pour le convertir en code machine compréhensible par le microprocesseur. Ces opérations sont réalisées à partir de logiciels spécialisés appelés compilateur et assembleur.


6- Performances d’un microprocesseur
On peut caractériser la puissance d’un microprocesseur par le nombre d’instructions qu’il est capable de traiter par seconde. Pour cela, on définit :
• le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge nécessaire pour l’exécution d’une instruction pour un microprocesseur donné.
• le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de traitement du microprocesseur.

Code machine ( 68HC11 ) Assembleur ( 68HC11 ) Langage C
Pour augmenter les performances d’un microprocesseur, on peut donc soit augmenter la fréquence d'horloge (limitation matérielle), soit diminuer le CPI (choix d'un jeu d'instruction adapté).
7- Notion d’architecture RISC et CISC
Actuellement l’architecture des microprocesseurs se composent de deux grandes familles :
• L’ architecture CISC (Complex Instruction Set Computer)
• L’architecture RISC (Reduced Instruction Set Computer)
6.1 L’architecture CISC
Pourquoi
Par le passé la conception de machines CISC était la seule envisageable. En effet, vue que la mémoire travaillait très lentement par rapport au processeur, on pensait qu’il était plus intéressant de soumettre au microprocesseur des instructions complexes. Ainsi, plutôt que de coder une opération complexe par plusieurs instructions plus petites (qui demanderaient autant d’accès mémoire très lent), il semblait préférable d’ajouter au jeu d’instructions du microprocesseur une instruction complexe qui se chargerait de réaliser cette opération. De plus, le développement des langages de haut niveau posa de nombreux problèmes quant à la conception de compilateurs. On a donc eu tendance à incorporer au niveau processeur des instructions plus proches de la structure de ces langages.
Comment

C’est donc une architecture avec un grand nombre d’instructions où le microprocesseur doit exécuter des tâches complexes par instruction unique. Pour une tâche donnée, une machine CISC exécute ainsi un petit nombre d’instructions mais chacune nécessite un plus grand nombre de cycles d’horloge. Le code machine de ces instructions varie d’une instruction à l’autre et nécessite donc un décodeur complexe (micro-code).
6.2 L’architecture RISC
Pourquoi
Des études statistiques menées au cours des années 70 ont clairement montré que les programmes générés par les compilateurs se contentaient le plus souvent d'affectations, d'additions et de multiplications par des constantes. Ainsi, 80% des traitements des langages de haut niveau faisaient appel à seulement 20% des instructions du microprocesseur. D’où l’idée de réduire le jeu d’instructions à celles le plus couramment utilisées et d’en améliorer la vitesse de traitement.
Comment
C’est donc une architecture dans laquelle les instructions sont en nombre réduit (chargement, branchement, appel sous-programme). Les architectures RISC peuvent donc être réalisées à partir de séquenceur câblé. Leur réalisation libère de la surface permettant d’augmenter le nombres de registres ou d’unités de traitement par exemple. Chacune de ces instructions s’exécutent ainsi en un cycle d’horloge. Bien souvent, ces instructions ne disposent que d’un seul mode d’adressage. Les accès à la mémoire s’effectue seulement à partir de deux instructions (Load et Store). Par contre, les instructions complexes doivent être réalisées à partir de séquences basées sur les instructions élémentaires, ce qui nécessite un compilateur très évolué dans le cas de programmation en langage de haut niveau.

Comparaison
Le choix dépendra des applications visées. En effet, si on diminue le nombre d'instructions, on crée des instructions complexes (CISC) qui nécessitent plus de cycles pour être décodées et si on diminue le nombre de cycles par instruction, on crée des instructions simples (RISC) mais on augmente alors le nombre d'instructions nécessaires pour réaliser le même traitement.



                                                                             FIN.

ليست هناك تعليقات:

إرسال تعليق