Que sont les registres CPU?


27

Cette question me dérange depuis un certain temps maintenant et aujourd'hui, je pensais que je le ferais sur Google. J'ai lu quelques trucs à ce sujet et cela semblait très similaire à ce que j'ai toujours appelé cache de processeur .

Y a-t-il une différence entre les deux ou ai-je raison quand je pense qu'ils sont les mêmes? Un registre doit-il réellement être à l'intérieur d'un CPU pour qu'il fonctionne?

Selon Wikipedia, un registre est un endroit dans le CPU où la mémoire peut être rapidement consultée et modifiée avant d'être renvoyée dans la RAM. Ai-je mal compris ou le cache et l'enregistrement sont-ils réellement les mêmes?


13
Un registre CPU est une organisation qui garde la trace de votre CPU pour vous. Le NSA est un exemple de registre CPU.
Jimmy Hoffa

3
Le cache de niveau 1 du processeur est souvent composé du même type de substance de silicium que les registres. Il n'est pas aussi rapide car il nécessite des recherches supplémentaires pour associer les adresses mises en cache aux emplacements de cache. Mais les registres et le cache sont définitivement des endroits différents sur les puces.
Zan Lynx

3
@JimmyHoffa: Je crains que votre commentaire soit très déroutant pour OP, au détriment des connaissances en informatique.
rwong

3
@rwong Nah je l'ai eu, je pensais que c'était assez drôle. : P
Jeroen

1
Et une autre différence est la taille: un fichier de registre est rarement plus grand que quelques centaines de mots, tandis que le cache L1 peut facilement atteindre 64 Ko.
SK-logic

Réponses:


61

Ce ne sont pas tout à fait les mêmes. Les registres sont les endroits où se trouvent les valeurs sur lesquelles la CPU travaille réellement. La conception du processeur est telle qu'elle ne peut réellement modifier ou agir sur une valeur que lorsqu'elle se trouve dans un registre. Les registres peuvent donc fonctionner en logique, tandis que la mémoire (y compris le cache) ne peut contenir que des valeurs à partir desquelles le CPU lit et écrit.

Imaginez un charpentier au travail. Il a quelques éléments en main (registres) puis, tout près de son établi (cache), des choses sur lesquelles il travaille fréquemment, mais qu'il n'utilise pas en ce moment, puis dans l'atelier (mémoire principale) des choses qui se rapportent à le projet en cours, mais qui ne sont pas immédiatement suffisamment importants pour être sur l'établi.

EDIT: Voici une explication simple du fonctionnement de la logique de registre.

Imaginons que nous ayons quatre registres nommés R1..R4. Si vous compilez une instruction qui ressemble à ceci:

x = y + z * 3;

le compilateur afficherait du code machine qui (une fois démonté) ressemble à ceci:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Étant donné que la plupart des processeurs modernes ont des registres d'une largeur de 32 ou 64 bits, ils peuvent faire des calculs sur n'importe quelle valeur jusqu'à la taille qu'ils peuvent contenir. Ils n'ont pas besoin de registres spéciaux pour les petites valeurs; ils utilisent simplement des instructions ASM spéciales qui leur indiquent de n'utiliser qu'une partie du registre. Et, tout comme le menuisier avec seulement deux mains, les registres ne peuvent contenir qu'une petite quantité de données à la fois, mais ils peuvent être réutilisés, en passant et en sortant des données actives, ce qui signifie que "beaucoup de registres" ne le font pas finissent par être nécessaires. (Avoir beaucoup de données disponibles permet aux compilateurs de générer du code plus rapidement, bien sûr, mais ce n'est pas strictement nécessaire.)


26
Et plus de trucs dans l'entrepôt à travers la ville (disque) et d'autres trucs qu'il peut avoir Fedex'd dans (réseau) :-)
Dan Pichelman

2
Dépend très fortement de l'architecture du système en question.
World Engineer

5
@Binero dans un processeur x86 16 bits, vous avez des registres nommés Ax, Bx et ainsi de suite. Lorsqu'ils sont passés à des processeurs 32 bits, ils ont étendu les registres à EAx 32 bits, EBx, si vous accédez à Ax, vous obtenez les 16 bits EAx bas. En mode 64 bits, ils ont nommé les registres RAx, les 32 bits inférieurs étant EAx et les 16 bits inférieurs étant toujours Ax. consultez ces diagrammes pour voir comment vous accédez à d'autres parties d'octets comme AH pour obtenir l'octet élevé du registre Axe 16 bits: en.wikipedia.org/wiki/X86#Structure
stonemetal

2
Et dans les processeurs modernes, cela tombe également en panne, du fait que les registres ne sont que des mappages temporaires à une banque in-core de mémoire vraiment rapide, changeant en fonction du flux d'instructions et de la façon dont il suit le flux d'instructions prévu.
Vatine

2
@MasonWheeler Un bon choix de votre part.
Vatine

3

En fait, un registre dans la terminologie du processeur est petit morceau de mémoire nommé Disponible à l'intérieur d'un microprocesseur (CPU), les registres ont des noms, des tailles et des fonctions spécifiques varie d'un processeur à l'autre, par exemple, si le microprocesseur 8085 est un processeur 8 bits qui a 8 Registres à bits (A: Accumulateur, les registres B, C, D, E, H et L et un registre d'indicateur sont tous de 8 bits). Deux registres 16 bits PC et SP ont tous une fonction spéciale et des fonctions apparaissent dans l'image lors de la programmation de l'assemblage. Le contrôle de peu de registres est au-delà du programmeur.

Si vous prenez un autre processeur, les registres varieront, disons que le 8086 est un processeur 16 bits et qu'il a des registres AX, BX, CX et DX tous 16 bits, PC, SP et Flag.

comme vous l'avez cité dans la question, ils doivent accélérer l'exécution du programme et agir en tant que cache de processeur, mais maintenant l'architecture du processeur a changé et ils (Intel) ajoutent beaucoup de mémoire appelant le cache du processeur

mais il y a une légère différence entre le cache du processeur (CPU) et les registres du processeur (CPU), registres réellement nécessaires pour certaines activités spéciales comme le pointeur de mémoire, l'état du programme, etc. Ex: PC: Program Counter qui agit comme un pointeur de mémoire dans la mémoire du programme, SP: Pointeur de pile qui agit comme un pointeur de mémoire dans la mémoire de pile. et l'accumulateur est un tampon et un registre principal pour accéder à ALU pour les opérations arithmétiques ...

Vous pouvez voir l'explication de Mason Wheeler pour les exemples


1

Je pense qu'il est utile de penser que les registres ne sont pas de la mémoire et ne doivent pas être considérés comme tels.

Pensez plus à OO - Register est une classe, non dérivée de la mémoire et Memory est une classe non dérivée du registre, mais la classe Register a des méthodes (codes d'opération machine) pour convertir ses données vers et depuis la mémoire. La mémoire, quant à elle, ne sait rien des registres et ne peut pas invoquer d'actions sur eux. Par conséquent, toutes les opérations du processeur sont effectuées par des registres, qui accèdent souvent à la mémoire.

Il n'est pas rare de voir des registres en écriture seule - à peine un attribut de la mémoire. Il est également possible qu'une valeur de registre change sans y écrire - encore une fois, pas le comportement que vous attendez de la mémoire.


Dans les E / S mappées en mémoire, les régions de "mémoire" en écriture seule ne sont pas si rares.
SK-logic

@ SK-logic - Correct - cependant le contexte de la question posée clairement le PO considère la mémoire comme quelque chose que vous lisez et écrivez. Pas besoin de le confondre plus :)
mattnz

0

La réponse fournie par @Mason Wheeler était exacte, mais je pense qu'il est possible de placer votre question sous un autre angle. À en juger par votre question, il me semble que le concept dont vous avez besoin pour comprendre parfaitement la différence entre un cache et un registre est le chemin de données . Comme Mason l'a correctement souligné, la logique du CPU (c'est-à-dire son chemin de données) est conçue de telle manière que les informations de la mémoire ne peuvent pas être traitées directement par le CPU et c'est pourquoi les registres existent. En fait, le CPU n'est même pas capable de décoder l'instruction en cours du programme qu'il exécute si cette instruction n'a pas été chargée en premier dans le registre approprié (généralement celui nommé IR, "Instruction Register").

Cela est lié à la façon dont le CPU est câblé. Il n'y a pas de chemin physique entre la mémoire et l'ALU; toutes les données fournies à l'ALU doivent être mises en mémoire tampon dans un certain registre. Cela pourrait être différent, mais les circuits requis pour connecter directement la mémoire à l'ALU seraient trop complexes: il est plus facile et plus efficace d'assurer la médiation de toutes les communications entre la mémoire et l'ALU via le fichier de registre , comme déterminé par le chemin de données susmentionné . En fait, même lorsqu'une instruction donnée spécifie une position de mémoire comme opérande (un mode d'adressage appelé adressage direct ), l'unité de données correspondante est chargée dans un registre appelé MBR (Memory Buffer Register, parfois appelé MDR, Memory Data Buffer ).

Notez que du point de vue du CPU, peu importe si les informations (données ou code) proviennent de la mémoire principale ou du cache, mais ce dernier est beaucoup plus rapide. Les caches existent pour des raisons de performances, les registres existent en raison de la conception du processeur (c'est-à-dire en raison du chemin de données). Les programmeurs intelligents (compilateurs intelligents, en fait) essaient de maximiser l'utilisation des registres afin de minimiser les accès à la mémoire (les registres sont plus rapides que le cache ou la mémoire). Cela est justifiable car les informations stockées dans les registres ont tendance à être utilisées plusieurs fois et, en fait, c'est l'un des principes de la philosophie RISC.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.