7 votes

Quelle est la taille du mot d'une RAM dans une machine 32/64 bits (processeur)

Quelle est la taille du mot d'une RAM dans une machine 32/64 bits (processeur) ?

Cette question me rend fou. Quelle est exactement la taille du mot qui sauvegarde les données dans la RAM elle-même dans les machines 64 bits comme les microprocesseurs intel core i5?

Aussi, est-ce que la taille du mot qui retient les données change de 32 bits à 64 bits ?

6voto

Jamie Hanrahan Points 22184

Traditionnellement, un "mot" dans les architectures informatiques était généralement la plus petite unité d'adressage de la mémoire. Et traditionnellement, cela correspondait à la taille du registre général de la machine.

Cependant, depuis que l'adressage par octets est devenu populaire, le concept s'est dilué. (On peut probablement remercier IBM System/360 et le PDP-11 du côté des mini-ordinateurs pour cela.)

En termes d'adressage mémoire tel que défini par l'architecture CPU - c'est-à-dire, comment les programmeurs voient la machine - le concept de "mot" n'existe pas sur x86/x64, à moins que vous ne le considériez comme synonyme d'octets. Chaque octet de mémoire a sa propre adresse, et l'adresse d'un octet est également l'adresse de toute région plus grande qui commence à cet octet (s'étendant vers des adresses de plus grand nombre). Nous pouvons bien sûr déplacer un, deux, quatre, ou (sur x64) huit octets à la fois entre le registre et la RAM - ou beaucoup plus, de mémoire à mémoire, avec les instructions REP - mais l'adresse que nous invoquons est toujours celle d'un octet. Nous pouvons réaliser des opérations arithmétiques sur des mots de toutes ces tailles. (Et d'autres.)

Si vous pensez en termes de registres, la "taille du mot" d'une machine est normalement supposée être la même que celle de ses registres généraux. Cela serait de 32 bits sur x86, 64 bits sur x64. Sur la plupart des architectures, la taille des registres généraux est la taille de l'entier le plus grand sur lequel le CPU peut effectuer des opérations arithmétiques simples avec une seule instruction.

Maintenant, introduisons plus de confusion... !

En termes de plateforme (carte mère, modules de RAM et puces, etc.), sur toutes les machines utilisant des processeurs et des chipsets Intel et AMD "commodités", la RAM est adressée en morceaux de 64 bits - je suppose que vous pourriez les appeler des mots. Vous pouvez le voir très clairement sur les anciens processeurs qui avaient des broches séparées pour l'adresse et les données : La broche d'adresse la moins significative est appelée A3, et non A0! Les bits d'adresse physique A0, A1, et A2 ne quittent jamais le processeur. Mais les programmeurs ne voient jamais de telles adresses.

Et enfin, il y a le concept de la "ligne de cache". Une ligne de cache est un morceau de RAM physiquement continu qui occupe une entrée dans la cache L1/L2/L3. Les lignes de cache dans le monde Intel/AMD ont été de 64 octets de large depuis un certain temps déjà. Donc lorsque vous accédez à une adresse mémoire qui n'est pas actuellement dans votre cache, le CPU récupère huit de ces morceaux de RAM de 8 octets. Autrement dit, les adresses qui sont stockées dans la cache excluent les six bits moins significatifs. Donc peut-être qu'un mot dans la cache est vraiment de 64 octets ou 512 bits! (Mais un accès mémoire qui contourne la cache peut toujours lire ou écrire juste 8 octets à la fois ; dans les plages d'adresses physiques décodées par des dispositifs d'E/S mappée en mémoire, les octets individuels peuvent être adressés ; cela dépend du bus. Et bien sûr nous ne pouvons pas réaliser d'opérations arithmétiques sur des entiers de 512 bits.)

Dans les environnements de programmation dérivés de Microsoft C, un "mot" est de 16 bits - cela a été ainsi depuis longtemps avant Microsoft, et le nom et la définition du type de données ont été conservés pour la compatibilité dans les environnements 32- et 64-bits. Un "double mot" (ou DWORD ou LONG, pour "long mot", terme courant sur le VAX) est de 32 bits. Les entiers de 64 bits sont appelés "quadwords" dans l'architecture mais ont généralement des noms plus spécifiques en C, comme UINT64 (entier sur 64 bits, sans signe).

Donc, cela dépend de où vous êtes dans le système et de ce que vous regardez. Nous ne pensons généralement plus du tout à la "taille du mot" de nos jours, mais plutôt à la "taille du registre général".

5voto

LawrenceC Points 70381

Je ne suis pas familier des détails macabres de fonctionnement de la RAM avec les CPU Intel de nos jours, étant donné des nouvelles choses comme la cohérence de cache et NUMA, mais du point de vue de la RAM, je crois que ce sont toujours des octets de 8 bits, bien que la RAM soit maintenant couramment disposée en canaux où plusieurs emplacements peuvent être accédés en même temps. Donc, prendre 4 octets (en supposant 4 emplacements) à la fois prendra autant de temps que de prendre 1 octet sur un tel système. Néanmoins, la RAM accepte une adresse du contrôleur de mémoire en entrée et lui renvoie 8 bits en sortie autant que je sache.

La taille du "mot" peut signifier différentes choses. Je me souviens avoir rencontré ce terme pour la première fois en étudiant le langage d'assemblage 68000 - dans le texte que je lisais, "octet" signifiait 8 bits et "mot" signifiait 16 bits, et "aligné sur le mot" signifiait une adresse tombant sur une limite de 16 bits. Je sais que le terme "mot" était utilisé avant l'introduction du 68000 (1980 ?) et pouvait être synonyme de "octet" à des époques antérieures à cela.

Les données "natif" que le CPU "préfère" traiter correspondent à la "teneur en bits" de son architecture et au mode dans lequel il fonctionne. Un CPU 32 bits (ou un CPU 64 bits hors "mode long") a des registres de 32 bits, une multitude d'instructions pour charger des valeurs de la RAM (4 octets) dans ces registres et autres choses. Mais avec Intel, un registre de 32 bits comme EAX peut également être adressé comme deux registres AH (les 16 bits supérieurs de EAX) et AL (les 16 bits inférieurs) et il existe d'innombrables instructions MOV qui chargent des choses de la RAM dans EAX, AH, AL, et de là de retour à la RAM. Je suis trop paresseux pour regarder le guide de référence du programmeur Intel à ce moment précis mais je pense qu'il y a des instructions pour charger des octets uniques dans les 8 bits supérieurs ou inférieurs de AH ou AL. (Je sais que MIPS a des instructions comme ça). Mais je pense qu'il y a plus d'instructions qui travaillent avec les 32 bits, et si vous voulez travailler avec moins de bits, vous perdez en efficacité car vous devez d'abord déplacer des choses dans des registres temporaires et ainsi de suite.

Ainsi, dans les CPU Intel et la plupart des autres CPU généraux fabriqués depuis l'ère des 16 bits, vous êtes vraiment flexible dans la manière dont vous adressez la mémoire. Les instructions sont probablement plus optimisées pour fonctionner dans la "teneur en bits" de l'architecture, cependant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X