web-dev-qa-db-fra.com

Combien d'adresses pouvez-vous obtenir avec un processeur 32 bits et 1 Go de RAM?

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 32bits ou divisé par 4? obtenir le nombre d'adresses mémoire?

Mais je ne suis pas sur. C'est pourquoi je demande.

Je remarque sur wikipedia que 1 adresse mémoire a une largeur de 32 bits ou 4 octets (1 octet = 8 bits), par rapport à un processeur de 64 bits où 1 adresse mémoire ou un entier correspond à une largeur de 64 bits ou 8 octets. Mais je ne sais pas si je l’ai bien compris non plus.

11
johan smohan

Réponse courte: Le nombre d'adresses disponibles est égal à la plus petite de celles-ci:

  • Taille de la mémoire en octets
  • Plus grand nombre entier non signé pouvant être enregistré dans la machine Word

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

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

1 B = 8 b

1 Go de RAM correspond à 1 GiB (gibioctets, et non gigaoctets). 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 de l'ordinateur Word. Par exemple. Le processeur Intel 8086 était de 16 bits et adressait la mémoire par octets. Il en va de même des processeurs modernes de 32 bits et de 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 est juste un nombre d'octets que la CPU doit ignorer depuis le début de la mémoire pour atteindre celle recherchée.

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

Maintenant, vous devez savoir ce que 32 bits signifie réellement. Comme je l'ai déjà mentionné, c'est la taille d'une machine Word.

Le mot machine correspond à la quantité de mémoire utilisée par la CPU pour contenir des nombres (en RAM, en cache ou dans les registres internes). La CPU 32 bits utilise 32 bits (4 octets) pour contenir des nombres. Les adresses de mémoire sont également des nombres. Ainsi, sur une CPU 32 bits, l'adresse de mémoire est composée de 32 bits.

Maintenant, pensez à ceci: si vous avez un bit, vous pouvez enregistrer deux valeurs: 0 ou 1. Ajoutez un bit supplémentaire et vous avez quatre valeurs: 0, 1, 2, 3. Sur trois bits, vous pouvez enregistrer huit valeurs. : 0, 1, 2 ... 6, 7. C'est en fait un système binaire et ça marche 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 les ajouts habituels, mais le chiffre maximum est 1, pas 9. La virgule 0 correspond à 0000, puis vous ajoutez 1 et obtenez 0001, ajoutez-en une encore et vous avez 0010. Ce qui s’est passé ici revient à avoir 09 décimal et à en ajouter un: vous passez de 9 à 0 et incrémentez le prochain chiffre.

Dans l'exemple ci-dessus, vous pouvez voir qu'il existe toujours une valeur maximale que vous pouvez conserver dans un nombre de bits constant. En effet, lorsque tous les bits sont à 1 et que vous essayez d'augmenter la valeur de 1, tous les bits deviennent 0, rompant ainsi la nombre. C'est ce qu'on appelle le dépassement 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, N étant le nombre de bits. Comme je l'ai déjà dit, une adresse mémoire est un nombre et a également une valeur maximale. C'est pourquoi la taille de la machine Word est également une limite pour le nombre d'adresses mémoire disponibles - parfois, votre CPU ne peut tout simplement pas traiter des nombres assez gros pour traiter plus de mémoire.

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

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

Toutefois, dans les systèmes d’exploitation réels, les CPU 32 bits peuvent traiter environ 3 GiB de RAM. Cela est dû à l'architecture interne du système d'exploitation: certaines adresses sont réservées à d'autres fins. Vous pouvez en savoir plus sur cette barrière dite de 3 Go sur Wikipedia . Vous pouvez lever cette limite avec extension d'adresse physique .


En parlant d’adressage mémoire, il ya peu de choses que je devrais mentionner: mémoire virtuelle , segmentation et pagination .

Mémoire virtuelle

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

Cette technique permet au système d’exploitation de déplacer certaines données de RAM vers un fichier appelé Pagefile (Windows) ou Swap (* NIX). Le disque dur a une magnitude inférieure à celle de la RAM, mais il ne s’agit pas d’un problème grave pour les données rarement consultées et il permet au système d’exploitation d’offrir à des applications plus de RAM que celles réellement installées.

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 une machine Word 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 adresser un numéro, vous devez savoir deux choses:

  • Le numéro de page sur laquelle ce mot est imprimé.
  • Quel mot sur cette page est celui que vous recherchez.

Voilà comment les processeurs x86 modernes gèrent la mémoire. Il est divisé en 4 pages KiB (1024 mots machine) et ces pages ont des numéros. (En fait, les pages peuvent également être de 4 Mo ou 2 M avec PAE ). Lorsque vous souhaitez vous adresser à une cellule de mémoire, vous avez besoin du numéro de page et de l'adresse figurant dans cette page. Notez que chaque cellule de mémoire est référencée par exactement une paire de nombres, ce qui 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 ne citer qu'un exemple. Les groupes d'adresses s'appellent maintenant des segments de mémoire, pas des 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 à partir de 4096 segments différents.


Un exemple:

Disons que nous avons 8 octets de mémoire, contenant tous des zéros sauf le 4ème octet qui est égal à 255.

Illustration du modèle de mémoire à plat:

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

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

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

Illustration de 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 constater, le 4ème octet peut être adressé de quatre manières: (en partant de 0)

  • Segment 0, offset 3
  • Segment 1, offset 2
  • Segment 2, offset 1
  • Segment 3, offset 0

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

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

Le problème avec la segmentation 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 astucieuses 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 que ce qu'il 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. En gros, vous obtenez ainsi des pages de taille variable.

37
gronostaj

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

La taille de la RAM ne limite pas (trop) 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 "surchargée" et que le système "thrash" commence à "permuter" "les pages" de mémoire en alternance entre RAM et le disque, les performances s'effondrent.

3
Daniel R Hicks

Le 1GByte de RAM occuperait 1024 * 1024 * 1024 octets, ou 1 073 741 824 octets.

Un processeur 32 bits a toujours 4 * 1024 * 1024 * 1024 octets ou 4 294 967 296 octets d’espace adresse Le 1Gbyte de RAM apparaît dans cet espace. Sur les processeurs Intel, certains RAM doivent apparaître à l'adresse 0 pour les vecteurs d'interruption. Par conséquent, physique RAM 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 Mo), les périphériques d'E/S (tels que l'APIC) et la RAM vidéo. Certaines choses étranges continuent également avec le mode de gestion 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. Le MMU peut réorganiser tout cela de n'importe quelle manière dans un processus utilisateur.

2
LawrenceC

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’adresses . Et sa taille est en réalité 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 possède un bus d’adresse de 16 bits. Il peut adresser 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 octets = 64 Ko.

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

0
Dmitriy Dokshin

Un processeur 32 bits peut traiter au maximum 2 ^ 32 octets individuels de mémoire (environ 4 Go), mais 1 Go de mémoire donnerait 1 * 1024 * 1024 * 1024 octets de mémoire adressables (même si vous disposeriez 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, ce qui en fait la limite supérieure. octets adressables 2 ^ 48.

0
AcId