mercredi 2 avril 2008

Composition d'un processeur

Les parties essentielles d’un processeur sont :

  • l’Unité Arithmétique et Logique (UAL, en anglais Arithmetic and Logical Unit - ALU), qui prend en charge les calculs arithmétiques élémentaires et les tests ;
  • l'unité de contrôle ;
  • les registres, qui sont des mémoires de petite taille (quelques octets), suffisamment rapides pour que l'UAL puisse manipuler leur contenu à chaque cycle de l’horloge. Un certain nombre de registres sont communs à la plupart des processeurs :
    • compteur de programme : ce registre contient l’adresse mémoire de l’instruction en cours d’exécution ;
    • accumulateur : ce registre est utilisé pour stocker les données en cours de traitement par l’UAL ;
    • registre d’adresses : il contient toujours l’adresse de la prochaine information à lire par l’UAL, soit la suite de l’instruction en cours, soit la prochaine instruction ;
    • registre d’instructions : il contient l’instruction en cours de traitement ;
    • registre d’état : il sert à stocker le contexte du processeur, ce qui veut dire que les différents bits de ce registre sont des drapeaux (flags) servant à stocker des informations concernant le résultat de la dernière instruction exécutée ;
    • pointeurs de pile : ce type de registre, dont le nombre varie en fonction du type de processeur, contient l’adresse du sommet de la pile (ou des piles) ;
    • registres généraux : ces registres sont disponibles pour les calculs ;
  • le séquenceur, qui permet de synchroniser les différents éléments du processeur. En particulier, il initialise les registres lors du démarrage de la machine et il gère les interruptions ;
  • l’horloge qui synchronise toutes les actions de l’unité centrale. Elle est présente dans les processeurs synchrones, et absente des processeurs asynchrones et des processeurs autosynchrones ;
  • l'unité d’entrée-sortie, qui prend en charge la communication avec la mémoire de l’ordinateur ou la transmission des ordres destinés à piloter ses processeurs spécialisés, permettant au processeur d’accéder aux périphériques de l’ordinateur.

Les processeurs actuels intègrent également des éléments plus complexes :

  • plusieurs UAL, ce qui permet de traiter plusieurs instructions en même temps. L'architecture superscalaire, en particulier, permet de disposer des UAL en parallèle, chaque UAL pouvant exécuter une instruction indépendamment de l'autre ;
  • l'architecture superpipeline permet de découper temporellement les traitements à effectuer. C’est une technique qui vient du monde des supercalculateurs ;
  • une unité de prédiction de saut, qui permet au processeur d’anticiper un saut dans le déroulement d’un programme, permettant d’éviter d’attendre la valeur définitive d’adresse du saut. Cela permet de mieux remplir le pipeline ;
  • une unité de calcul en virgule flottante (en anglais Floating Point Unit - FPU), qui permet d’accélérer les calculs sur des nombres réels codés en virgule flottante ;
  • la mémoire cache, qui permet d’accélérer les traitements, en diminuant les temps d'accès à la mémoire. Ces mémoires tampons sont en effet beaucoup plus rapides que la RAM et ralentissent moins le CPU. Le cache instructions reçoit les prochaines instructions à exécuter, le cache données manipule les données. Parfois, un seul cache unifié est utilisé pour le code et les données. Plusieurs niveaux de caches peuvent coexister, on les désigne souvent sous les noms de L1, L2 ou L3. Dans les processeurs évolués, des unités spéciales du processeur sont dévolues à la recherche, par des moyens statistiques et/ou prédictifs, des prochains accès en mémoire centrale.

Un processeur est défini par :

  • la largeur de ses registres internes de manipulation de données (8, 16, 32, 64, 128) bits ;
  • la cadence de son horloge exprimée en MHz (mega hertz) ou GHz (giga hertz) ;
  • le nombre de noyaux de calcul (core) ;
  • son jeu d'instructions (ISA en anglais, Instructions Set Architecture) dépendant de la famille (CISC, RISC, etc) ;
  • sa finesse de gravure exprimée en nm (nanomètres) et sa microarchitecture.

Mais ce qui caractérise principalement un processeur est la famille à laquelle, il appartient :

  • CISC (Complex Instruction Set Computer : choix d'instructions aussi proches que possible d'un langage de haut niveau) ;
  • RISC ( Reduced Instruction Set Computer : choix d'instructions plus simples et d'une structure permettant une exécution très rapide) ;
  • VLIW (Very Long Instruction Word) ;
  • DSP (Digital Signal Processor). Même si cette dernière famille (DSP) est relativement spécifique. En effet un processeur est un composant programmable et est donc a priori capable de réaliser tout type de programme. Toutefois, dans un souci d'optimisation, des processeurs spécialisés sont conçus et adaptés à certains types de calculs (3D, son, etc.). Les DSP sont des processeurs spécialisés pour les calculs liés au traitement de signaux. Par exemple, il n'est pas rare de voir implémenter des Transformées de Fourier dans un DSP.

Un processeur possède trois types de bus :

  • un bus de données, définit la taille des données manipulables (indépendamment de la taille des registres internes) ;
  • un bus d'adresse définit le nombre de cases mémoire accessibles ;
  • un bus de commande définit la gestion du processeur IRQ, RESET etc.

Aucun commentaire: