Cette question me dérange depuis un certain temps maintenant et aujourd'hui, je pensais que je le ferais sur Google. J'ai lu des trucs à ce sujet et cela semblait très similaire à ce que j'ai toujours appelé processeur cache .
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?
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'il 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 les 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 un 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 lui 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.)
En fait, un registre dans la terminologie CPU est un 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 de drapeau sont tous à 8 bits). Deux registres 16 bits PC et SP tous ont une fonction spéciale et des fonctions apparaissent dans l'image pendant la programmation de l'assemblage. Peu de contrôle des registres dépasse le programmeur.
Si vous prenez un autre processeur, les registres varieront, disons que 8086 est un processeur 16 bits et qu'il a AX, BX, CX et DX tous sont 16 bits, PC, SP et registres d'indicateur.
comme vous l'avez cité dans la question, ils doivent accélérer l'exécution du programme et agir comme 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
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 Memory et Memory est une classe non dérivée de register, mais la classe Register a des méthodes (Machine Op = Codes) 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.
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 sorte que les informations sur 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 actuelle 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 de médier toutes les communications entre la mémoire et l'ALU via le fichier de registre, tel que 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 se justifie 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.