Combien d'adresses mémoire pouvons-nous obtenir avec un processeur 32 bits et 1 Go de RAM?

12

Combien d'adresses mémoire pouvons-nous obtenir avec un processeur 32 bits et 1 Go de RAM et combien avec un processeur 64 bits?

Je pense que c'est quelque chose comme ça:

1 Go de RAM divisé par 32 bits ou divisé par 4? obtenir le nombre d'adresses mémoire?

Mais je ne suis pas sur. Voilà pourquoi je demande.

J'ai rouge sur wikipedia que 1 adresses mémoire fait 32 bits de large ou 4 octets (1 octet = 8 bits), comparé à 64 bits un processeur où 1 adresses mémoire ou 1 entier fait 64 bits de large ou 8 octets. Mais je ne sais pas si je l'ai bien compris non plus.

johan smohan
la source
Pratiquement tous les systèmes modernes sont adressés en octets, ce qui signifie que 32 bits peuvent adresser environ 4 gigaoctets (si autant de RAM est installée). Historiquement, il y a eu des schémas adressés par mot, avec un "mot" de 12, 15, 16, 17, 24, 32, 36 ou 48 bits, et probablement d'autres, ainsi que des machines décimales qui ont adressé un 4 ou 6 bits. unité. Mais gardez également à l'esprit que la plupart des systèmes modernes utilisent de la mémoire virtuelle, ce qui signifie que le processeur peut adresser encore plus de mémoire que ce qui est installé.
Daniel R Hicks
@DanielRHicks La mémoire virtuelle n'affecte pas la quantité de RAM pouvant être adressée.
Jamie Hanrahan
@JamieHanrahan - Pour que la mémoire virtuelle fonctionne, il doit y avoir un mécanisme d'adressage qui couvre la plage d'adresses virtuelles (d'un seul processus). Cela peut être fait avec une simulation logicielle, mais c'est assez inefficace, donc dans la plupart des systèmes, la plage d'adressage du processeur est suffisamment large pour incorporer l'espace d'adressage maximum d'un processus.
Daniel R Hicks
@DanielRHicks Bien sûr, mais cela n'affecte pas la quantité de RAM pouvant être traitée. La RAM est une mémoire physique et non virtuelle. Les adresses virtuelles ne sont pas des adresses RAM et la mémoire virtuelle n'est pas RAM.
Jamie Hanrahan
@JamieHanrahan - Vous n'avez aucun sens. Si vous ne pouvez pas adresser des pages de RAM dans l'espace d'adressage virtuel, la RAM est inutile. (Je sais très bien comment fonctionne la mémoire virtuelle, ayant travaillé sur des conceptions de mémoire virtuelle depuis 1972.)
Daniel R Hicks

Réponses:

38

Réponse courte: Le nombre d'adresses disponibles est égal au plus petit de ceux-ci:

  • Taille de la mémoire en octets
  • Le plus grand entier non signé qui peut être enregistré dans le mot machine du CPU

Réponse longue et explication de ce qui précède:

La mémoire se compose d'octets (B). Chaque octet est composé de 8 bits (b).

1 B = 8 b

1 Go de RAM équivaut en fait à 1 Gio (gibibyte, pas gigaoctet). La différence est:

1 GB  = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B

Chaque octet de mémoire a sa propre adresse, quelle que soit la taille du mot machine CPU. Par exemple. Le processeur Intel 8086 était de 16 bits et adressait la mémoire par octets, tout comme les processeurs modernes 32 bits et 64 bits. C'est la cause de la première limite - vous ne pouvez pas avoir plus d'adresses que d'octets de mémoire.

L'adresse mémoire n'est qu'un nombre d'octets que le processeur doit ignorer depuis le début de la mémoire pour arriver à celle qu'il recherche.

  • Pour accéder au premier octet, il doit sauter 0 octet, donc l'adresse du premier octet est 0.
  • Pour accéder au deuxième octet, il doit sauter 1 octet, donc son adresse est 1.
  • (et ainsi de suite...)
  • Pour accéder au dernier octet, le processeur ignore 1073741823 octets, son adresse est donc 1073741823.

Maintenant, vous devez savoir ce que signifie réellement 32 bits. Comme je l'ai mentionné précédemment, c'est la taille d'un mot machine.

Le mot machine est la quantité de mémoire utilisée par le CPU pour contenir des nombres (dans la RAM, le cache ou les registres internes). Le processeur 32 bits utilise 32 bits (4 octets) pour contenir les nombres. Les adresses mémoire sont également des nombres, donc sur un processeur 32 bits, l'adresse mémoire se compose de 32 bits.

Pensez maintenant à ceci: si vous avez un bit, vous pouvez y enregistrer deux valeurs: 0 ou 1. Ajoutez un bit de plus et vous avez quatre valeurs: 0, 1, 2, 3. Sur trois bits, vous pouvez enregistrer huit valeurs : 0, 1, 2 ... 6, 7. Il s'agit en fait d'un système binaire et il fonctionne comme ça:

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

Cela fonctionne exactement comme l'addition habituelle, mais le chiffre maximum est 1, pas 9. Le nombre décimal 0 est 0000, puis vous ajoutez 1 et obtenez 0001, ajoutez à nouveau un et vous avez 0010. Ce qui se passe ici, c'est comme avoir une décimale 09et en ajouter une: vous changez 9 en 0 et incrémentez le chiffre suivant.

Dans l'exemple ci-dessus, vous pouvez voir qu'il y a toujours une valeur maximale que vous pouvez conserver dans un nombre avec un nombre constant de bits - parce que lorsque tous les bits sont à 1 et que vous essayez d'augmenter la valeur de 1, tous les bits deviennent 0, cassant ainsi le nombre. Cela s'appelle un débordement d'entier et provoque de nombreux problèmes désagréables, à la fois pour les utilisateurs et les développeurs.

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • Pour 1 bit, la plus grande valeur est 1,
  • 2 bits - 3,
  • 3 bits - 7,
  • 4 bits - 15

Le plus grand nombre possible est toujours 2 ^ N-1, où N est le nombre de bits. Comme je l'ai déjà dit, une adresse mémoire est un nombre et elle a également une valeur maximale. C'est pourquoi la taille du mot machine est également une limite pour le nombre d'adresses mémoire disponibles - parfois, votre processeur ne peut tout simplement pas traiter des nombres suffisamment grands pour traiter plus de mémoire.

Donc, sur 32 bits, vous pouvez conserver des nombres de 0 à 2 ^ 32-1, et c'est 4 294 967 295. C'est plus que la plus grande adresse dans 1 Go de RAM, donc dans votre cas spécifique, la quantité de RAM sera le facteur limitant.

La limite de RAM pour le processeur 32 bits est théoriquement de 4 Go (2 ^ 32) et pour le processeur 64 bits, elle est de 16 EB (exaoctets, 1 EB = 2 ^ 30 Go). En d'autres termes, un processeur 64 bits pourrait adresser tout Internet ... 200 fois;) (estimé par WolframAlpha ).

Cependant, dans les systèmes d'exploitation réels, les processeurs 32 bits peuvent traiter environ 3 Gio de RAM. C'est à cause de l'architecture interne du système d'exploitation - certaines adresses sont réservées à d'autres fins. Vous pouvez en savoir plus sur cette soi-disant barrière de 3 Go sur Wikipedia . Vous pouvez lever cette limite avec l' extension d'adresse physique .


En ce qui concerne l'adressage de la mémoire, il y a peu de choses que je dois mentionner: la mémoire virtuelle , la segmentation et la pagination .

Mémoire virtuelle

Comme l'a souligné @Daniel R Hicks dans une autre réponse, les systèmes d'exploitation utilisent la mémoire virtuelle. Cela signifie que les applications ne fonctionnent en fait pas sur de vraies adresses mémoire, mais celles fournies par le système d'exploitation.

Cette technique permet au système d'exploitation de déplacer certaines données de la RAM vers un soi-disant Pagefile (Windows) ou Swap (* NIX). Le disque dur est de quelques magnitudes plus lent que la RAM, mais ce n'est pas un problème grave pour les données rarement consultées et il permet au système d'exploitation de fournir aux applications plus de RAM que vous n'en avez réellement installé.

Pagination

Ce dont nous parlions jusqu'à présent est appelé schéma d'adressage plat.

La pagination est un schéma d'adressage alternatif qui permet d'adresser plus de mémoire que vous pourriez normalement avec un mot machine dans un modèle plat.

Imaginez un livre rempli de mots de 4 lettres. Disons qu'il y a 1024 numéros sur chaque page. Pour aborder un nombre, vous devez savoir deux choses:

  • Nombre de pages sur lesquelles ce mot est imprimé.
  • Quel mot sur cette page est celui que vous recherchez.

C'est exactement ainsi que les processeurs x86 modernes gèrent la mémoire. Il est divisé en 4 pages KiB (1024 mots machine chacune) et ces pages ont des nombres. (en fait, les pages peuvent également être de 4 Mio gros ou 2 Mio avec PAE ). Lorsque vous souhaitez adresser une cellule mémoire, vous avez besoin du numéro de page et de l'adresse sur cette page. Notez que chaque cellule mémoire est référencée par exactement une paire de nombres, ce ne sera pas le cas pour la segmentation.

Segmentation

Eh bien, celui-ci est assez similaire à la pagination. Il a été utilisé dans Intel 8086, pour n'en citer qu'un exemple. Les groupes d'adresses sont désormais appelés segments de mémoire, et non pages. La différence est que les segments peuvent se chevaucher, et ils se chevauchent beaucoup. Par exemple, sur 8086, la plupart des cellules de mémoire étaient disponibles dans 4096 segments différents.


Un exemple:

Disons que nous avons 8 octets de mémoire, tous contenant des zéros à l'exception du 4e octet qui est égal à 255.

Illustration pour le modèle de mémoire plate:

 _____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

Illustration pour la mémoire paginée avec des pages de 4 octets:

 PAGE0
 _____
|  0  |
|  0  |
|  0  |  PAGE1
| 255 |  _____
 -----  |  0  |
        |  0  |
        |  0  |
        |  0  |
         -----

Illustration pour la mémoire segmentée avec des segments de 4 octets décalés de 1:

 SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

Comme vous pouvez le voir, le 4e octet peut être adressé de quatre manières: (adressage à partir de 0)

  • Segment 0, décalage 3
  • Segment 1, décalage 2
  • Segment 2, décalage 1
  • Segment 3, décalage 0

C'est toujours la même cellule mémoire.

Dans les implémentations réelles, les segments sont décalés de plus d'un octet (pour 8086, il était de 16 octets).

Ce qui est mauvais dans la segmentation, c'est que c'est compliqué (mais je pense que vous le savez déjà;) Ce qui est bien, c'est que vous pouvez utiliser des techniques intelligentes pour créer des programmes modulaires.

Par exemple, vous pouvez charger un module dans un segment, puis prétendre que le segment est plus petit qu'il ne l'est réellement (juste assez petit pour contenir le module), puis choisir le premier segment qui ne chevauche pas celui pseudo-plus petit et charger le module suivant , etc. Fondamentalement, vous obtenez des pages de taille variable.

gronostaj
la source
1
Un système d'exploitation peut donner l'espace d'adressage virtuel 4GiB complet (éventuellement moins une page - 4KiB pour x86) au processus utilisateur, mais cela rend les appels système plus chers car l'espace d'adressage doit être modifié. Avec PAE et des mécanismes similaires, la quantité de mémoire physique adressable par le système peut être augmentée bien que les adresses soient toujours limitées à 32 bits.
Paul A. Clayton
Ce n'est pas ce que je cherchais, mais c'est quand même une bonne information! Merci pour la bonne explication du max. chose numérique (1 = max. comme en binaire 9 est max.) pour la comparaison des tables binaires et décimales. Vraiment une bonne façon de penser à ce sujet. J'ai appris quelque chose de nouveau. :) Merci!
johan smohan
Ce Gibi et Giga est tellement déroutant ... Parce que sur certains sites, je lis que la mémoire est mesurée en Gibi et sur d'autres que c'est en Giga ... Avez-vous une bonne source / fiable?
johan smohan
Wikipedia a un article sur les préfixes binaires, y compris certains antécédents historiques. La plupart des nombres liés au matériel utilisent des préfixes décimaux, les exceptions les plus notables sont probablement la RAM et peut-être l'échelle des couleurs - par exemple. Les écrans LCD avec 16 millions de couleurs ont trois canaux de couleur 8 bits (2 ^ 24). Répondre directement à votre question: dans ce cas, le nombre d'adresses disponibles est égal au nombre d'octets de mémoire, car la RAM est adressée par octet. Le processeur 32 bits peut gérer jusqu'à 2 ^ 32 B, un 64 bits - 2 ^ 64.
gronostaj
Merci! J'en ai besoin pour les examens scolaires. :) Je pense que je comprends le plus de choses maintenant. La seule chose qui me dérange encore, c'est pourquoi 2 ^ 32 B, si c'est un processeur 32 bits et non un 32 octets?
johan smohan
3

En plus de ce qui précède, notez que l' adressage virtuel est utilisé, ainsi que plusieurs espaces d'adressage . Ainsi, même si vous ne disposez que de 1 Go de RAM, un programme pourrait théoriquement utiliser jusqu'à 4 Go de mémoire virtuelle (bien que la plupart des systèmes d'exploitation la limiteront à moins que cela). Et vous pouvez conceptuellement avoir un nombre (presque) infini de ces espaces d'adressage de 4 Go.

La taille de la RAM ne limite pas (autant) la taille maximale d'un programme ou le nombre de programmes que vous pouvez exécuter, mais limite plutôt les performances. Lorsque la mémoire réelle devient "sur-engagée" et que le système commence à "déborder" alors qu'il "échange" des "pages" de mémoire entre la RAM et le disque, les performances chutent.

Daniel R Hicks
la source
2

Le 1 Go de RAM occuperait 1024 * 1024 * 1024 octets, soit 1 073 741 824 octets.

Un processeur 32 bits a toujours 4 * 1024 * 1024 * 1024 octets, soit 4 294 967 296 octets d' espace d'adressage. Le 1 Go de RAM apparaît dans cet espace. Sur les processeurs Intel, une partie de la RAM doit apparaître à l'adresse 0 pour les vecteurs d'interruption, de sorte que la RAM physique commence à l'adresse 0 et augmente.

D'autres éléments apparaissent dans cet espace d'adressage, tels que le BIOS et les ROM optionnelles (dans les 384 Ko supérieurs dans le premier 1 Mo), les périphériques d'E / S (comme l'APIC) et la RAM vidéo. Certaines choses étranges continuent également avec le mode de gestion du système "SMRAM" que je ne comprends pas encore complètement.

Notez qu'il s'agit d'un espace d'adressage physique, du point de vue du noyau. La MMU peut réorganiser tout cela de n'importe quelle manière en un processus d'espace utilisateur.

LawrenceC
la source
J'ai rouge sur wikipedia que 1 adresses mémoire fait 32 bits de large ou 4 octets (1 octet = 8 bits), comparé à 64 bits un processeur où 1 adresses mémoire ou 1 entier fait 64 bits de large ou 8 octets. Vous avez raison sur l'espace d'adressage de 4 * 1024 * 1024 * 1024 octets, mais je cherchais l'espace d'adressage de la mémoire, qui je pense est de 1 Go / 32 bits, mais je ne sais toujours pas si je suis correct ou non. :) Merci pour votre réponse!
johan smohan
Np. Les processeurs Intel ont deux espaces d'adressage: "Memory" et "I / O". Des éléments autres que la RAM apparaissent dans l'espace "Mémoire". D'autres éléments tels que les périphériques d'E / S ou la ROM peuvent se trouver à des emplacements inoccupés par la RAM. En règle générale, seuls les périphériques d'E / S apparaissent dans l'espace d'adressage d'E / S.
LawrenceC
@johansmohan Ni vos chiffres ni la réponse de Lawrence ne sont corrects. Il n'y a pas de relation fixe entre la "largeur de bit" d'un processeur et la largeur des adresses RAM qu'il peut utiliser. Les processeurs x86 32 bits uniquement peuvent traiter 64 Go de RAM. Les processeurs x64 ont commencé à l'espace d'adressage physique de 40 bits et sont maintenant à 52 bits. Quant à l'espace d'adressage virtuel, cela peut aussi être différent. Sur x64, bien que les adresses virtuelles prennent 64 bits à stocker, seuls 48 bits sont implémentés, pour un VAS de 256 TiB au lieu des 16 EiB que vous attendez de 64 bits.
Jamie Hanrahan
0

Un processeur 32 bits peut adresser au plus 2 ^ 32 octets de mémoire individuels (environ 4 Go), mais avoir 1 Go de mémoire équivaudrait à 1 * 1024 * 1024 * 1024 octets de mémoire adressables (bien que vous disposiez probablement encore d'un espace d'adressage virtuel de 2 ^ 32 ). Un processeur 64 bits pourrait adresser 2 ^ 64 octets individuels, mais je pense que la plupart des systèmes n'utilisent que 48 bits pour les adresses mémoire faisant la limite supérieure. octets adressables 2 ^ 48.

Acide
la source
Vous vouliez dire 1024 * 1024 * 1024 et non 1 * 1024 * 1024 non?
johan smohan
Un processeur 32 bits peut adresser au plus 2 ^ 32 octets ou bits? Je vérifie juste, car je dois le savoir avec certitude.
johan smohan
@johan smohan Correct, il aurait dû être 1 * 1024 * 1024 * 1024
AcId
@johan smohan Un processeur 32 bits peut adresser au plus 2 ^ 32 octets, un octet étant 8 bits (un octet t de bits)
AcId
0

La réponse acceptée donne une bonne explication. Mais je ne pense pas que ce soit la réponse. Il ne contient rien sur le bus d'adresse . Et sa taille est en fait la principale raison des contraintes de mémoire. Par exemple, 8080 est un processeur 8 bits (la taille de son bus de données est de 8 bits), mais il a un bus d'adresse 16 bits. Il peut adresser 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 octets = 64 Ko.

Vous pouvez en trouver plus ici (32 bits) dans la section "Historique technique".

Dmitriy Dokshin
la source
Je suis d'accord. Notez que les derniers modèles du PDP-11 16 bits avaient un bus d'adresse 22 bits (et pouvaient donc adresser 4 Mo de RAM), le HP 1000MX, également "16 bits", a finalement atteint 16 Mo de RAM (24 -adresses de bits); le VAX était un processeur 32 bits mais avait un espace d'adressage physique de 30 bits, mais la moitié était réservée à l'espace d'E / S, pour une limite de RAM de 512 Mo; le 8086 "16 bits", 1 Mo; le 80286 "16 bits", 16 Mo; etc. Et lorsque PAE a été introduit avec le Pentium Pro, le x86 32 bits pouvait adresser jusqu'à 64 Go de RAM (espace d'adressage physique 24 bits, bien que les trois bits de poids faible ne sortent jamais réellement du CPU).
Jamie Hanrahan
-2

Je crois que les informations les plus élémentaires sont perdues dans cette conversation, voici donc ma réponse:

Dire "Ceci est un processeur 32 bits" signifie que la taille de l'instruction, ou la taille de la commande, que le processeur peut comprendre et utiliser en même temps est de 32 bits. De même avec les processeurs 64 bits: ils peuvent gérer des instructions d'au plus 64 bits.

Pensez à cela comme à une vieille calculatrice mécanique: vous ne disposez que de tant de chiffres, vous ne pouvez donc tout simplement plus saisir de chiffre.

Maintenant, une adresse qu'un processeur peut utiliser doit également tenir dans le même espace, donc pour un processeur 32 bits, l'adresse qu'il utilise ne peut également être que de 32 bits au maximum. Donc, à partir d'ici, nous pouvons simplement calculer le nombre maximal d'adresses (c'est-à-dire la quantité maximale de RAM utilisable par le CPU):

2 ^ 32 = 4294967296 (= 4 Go)

ou

2 ^ 64 = 18446744073709551616 (= bien plus;)

Ou, comme un exemple amusant, mon ancien Commodore 64 avait un processeur 16 bits, il était donc capable de gérer une mémoire de:

2 ^ 16 = 65536 octets (= 64 Ko)

C'est la logique de base, mais, comme indiqué précédemment, il existe des moyens de contourner cette limitation, comme les espaces d'adressage virtuels, le mappage de la mémoire, etc.

Tuncay Göncüoğlu
la source
2
La différence significative entre les processeurs 32 et 64 bits est la plage d'adresses (qui affecte l'espace d'adressage virtuel plus que "réel"). Les processeurs utilisent tellement d'astuces qu'il est difficile de dire quelle est la largeur réelle du chemin de données, dans de nombreux cas. Et la longueur des instructions est largement indépendante de la "largeur" ​​du processeur.
Daniel R Hicks
L'explication est parfaitement correcte. En supposant que vous ne voulez pas dire la dimension réelle de la puce en centimètres lorsque vous dites "largeur du processeur", auquel cas vous auriez raison de dire qu'elle n'est pas liée, vous confondez les techniques de mappage de la mémoire / les espaces d'adressage virtuels avec l'adressage de la mémoire physique. De plus, ce que vous dites est plus lié aux implémentations du noyau, vous voudrez peut-être vérifier les noyaux PAE linux.
Tuncay Göncüoğlu
2
La longueur d'une instruction n'a aucun rapport avec la "largeur" ​​du processeur dans les systèmes modernes. Les valeurs les plus pertinentes sont la largeur des registres (bien que cela puisse être trompeur), la largeur du chemin de transfert entre le processeur et la mémoire et la taille en bits d'une adresse mémoire. Mais ces 3 valeurs peuvent très facilement être différentes les unes des autres.
Daniel R Hicks du
1
@DanielRHicks Daniel Hicks a raison. La "largeur de bit" de la CPU n'a pas nécessairement quelque chose à voir avec la "taille de l'instruction ou la taille de la commande". Il y a eu des processeurs qui ont été construits de cette façon, mais les processeurs de base actuels (x86 / x64) n'en font pas partie.
Jamie Hanrahan