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?
terminology
memory
cpu
register
Jeroen
la source
la source
Réponses:
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:
le compilateur afficherait du code machine qui (une fois démonté) ressemble à ceci:
É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.)
la source
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
la source
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.
la source
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.
la source