web-dev-qa-db-fra.com

Limites de mémoire dans les systèmes 16, 32 et 64 bits

Les limites de mémoire théoriques dans les machines 16, 32 et 64 bits sont les suivantes:

  • 16 bits = 65 536 octets (64 kilo-octets)

  • 32 bits = 4 294 967 295 octets (4 gigaoctets)

  • 64 bits = 18, 446, 744, 073, 709, 551, 616 (16 exaoctets)

Je me souviens de jours 3.1/Windows 3.11, que la mémoire 16 bits pouvait être divisée en segments, de sorte qu’un ordinateur 16 bits pouvait accéder à une quantité de mémoire supérieure à 64 kilo-octets.

J'ai une machine avec 16 Go de mémoire, et suis à double démarrage un système d'exploitation 32 bits et un système d'exploitation 64 bits. Je peux accéder à tous les 16 Go à partir de 64 bits, mais seulement 3,21 Go en 32 bits.

Ma question est donc la suivante: si les systèmes d’exploitation 16 bits autorisent un accès en mémoire supérieur à 64 Ko en raison de la segmentation de la mémoire, pourquoi les machines 32 bits ne suivent-elles pas le même principe?

15
series0ne

Ils le font, le système s'appelle extension d'adresse physique (PAE) . Voici une liste de systèmes d'exploitation Windows et de leur mémoire maximale, tout système 32 bits permettant plus de 4 Go de RAM utilise PAE pour accéder à la mémoire (par exemple, Windows 2003 R2 Datacenter 32 bits autorise 128 Go de RAM).


En fait, Windows 8 requiert un processeur compatible PAE avec configuration minimale .


Pour répondre à votre question "non demandée" sur la raison pour laquelle votre système d’exploitation 32 bits ne peut pas accéder au RAM, si celui-ci existe: Licence. Ils choisissent de ne pas autoriser RAM à dépasser 4 Go pour leur système d'exploitation 32 bits, sauf si vous payez pour une édition de centre de données (c'est pourquoi ils vendent une édition de centre de données, si vous besoin que beaucoup de bélier, vous pouvez probablement vous permettre de dépenser plus d'argent sur un système d'exploitation).

12
Scott Chamberlain

Au lieu de l'expliquer moi-même, je laisserai quelqu'un qui doit maintenir un noyau avec le support PAE s'exprimer de manière charmante, Linus Torvalds

N'oubliez pas non plus que la prise en charge de PAE dans les versions 32 bits de Windows est très onéreuse. XP ne pourra même pas utiliser la totalité des 4 GiB de RAM normalement, car MS a choisi de ne pas activer les fonctionnalités PAE sur ce dernier. Un noyau étroitement lié, Windows 2003 Server, prend en charge PAE. Cependant, même dans ce cas, votre "édition standard" ne prendra en charge que 4 GiB (en contournant le trou de mémoire du BIOS), tandis que les éditions plus coûteuses autoriseront alors jusqu'à 64 GiB de RAM. Il en va de même pour Vista 32 bits .

Cependant, dans tous les cas cette limitation n'est pas imposée par Windows. Si c’était le cas, l’initialisation d’un noyau Linux compatible PAE vous permettrait quand même d’utiliser les 4 GiB (ou plus) complets. Ce n’est pas le cas, certains fabricants de matériel ont choisi d’imposer cette limitation au niveau du BIOS, bien que le processeur et le chipset soient capables de gérer le PAE.


Juste une note de côté: aucun des processeurs 64 bits actuels basés sur x86 ne peut même adresser la plage complète de l'espace d'adressage 64 bits physiquement (pour référence voir cette question et réponses).

12
0xC0000022L

Les processeurs 8 bits avaient généralement un bus d’adresse 16 bits. (Motorola avait un bus d’adresse unifié, RAM et les E/S périphériques partageaient le même espace adresse, Intel a choisi de diviser les deux. Dans le cas d’Intel, les IO limites d’adresse de les 8088 et 8086 ont dépassé les limites des processeurs 8080 et 8085).

Les processeurs Intel 8088 et 8086 avaient un bus d’adresses mémoire de 20 bits (1 Mo), tandis que le processeur 68000 de Motorola disposait d’un bus d’adresses de 24 bits (16 Mo). IIRC, le [80] 286 a sauté sur un bus d’adresse à 24 bits. Les deux ont ensuite été étendus à un bus d’adresse à 32 bits avec le [80] 386 et le 68020 respectivement.) Avec les puces Pentium, le bus d’adresse a été étendu à 64 bits. (Je pense que les puces PowerPC du groupe Motorola/IBM ont également adopté le bus d’adresse 64 bits.)

La mémoire disponible au-dessous et au maximum accessible directement par la CPU n'était limitée que par les puces matérielles (chipset) et le système d'exploitation supportés. Bill Gates était célèbre dans le passé pour avoir déclaré que personne n'avait besoin de plus de 640K de RAM. Le DOS n'a donc jamais évolué pour accéder directement à plus de RAM. Avec HiMem.sys et EMM386, DOS a été étendu pour accéder à plus de mémoire "haute", EMM386 étant utilisé pour accéder directement à toute la RAM disponible. HiMem.sys avait moins de flexibilité et pouvait en principe utiliser le supplément RAM pour le stockage.

La mémoire dépassant cette limite a nécessité une MMU (unité de gestion de la mémoire) pour la diviser en segments et la mapper dans l'espace mémoire adressable de la CPU. C'est ainsi que les ordinateurs CoCo 3, Commodore 128 et 8 bits pourraient accéder à plus de 64 Ko de RAM.

Il est maintenant plus avantageux d’utiliser la mémoire virtuelle pour dépasser les limites de la mémoire physique, mais avec les limites imposées par le système d’exploitation.

1
William

Parce qu'il n'y a aucune raison pratique de le faire. Les extensions d'adresse physique permettent à peu près les mêmes fonctionnalités et leur utilisation est encore très limitée parmi les utilisateurs. Sous Windows 3.1, certaines contraintes n'existaient pas aujourd'hui.

1
OCDtech

Les limites de mémoire théoriques dans les machines 16, 32 et 64 bits sont les suivantes ...

Le défaut fondamental ici est la notion selon laquelle la "largeur de bit" du processeur, qui correspond généralement à la taille des registres à usage général de la machine, est nécessairement la même que la largeur des adresses RAM.

Dans x86 avec la pagination activée, mais sans PAE, les adresses utilisées par le programme et le code du système d'exploitation sont appelées "adresses linéaires" par Intel. Nous les appelons généralement "adresses virtuelles". Ils ont 32 bits de large. Cela permet un espace d'adressage virtuel 4 GiB.

Mais c’est plus ou moins une coïncidence, un simple artefact du format des entrées de table de page que la taille d’une adresse physique (RAM) est également de 32 bits.

Avec PAE, ce dernier est de 36 bits (d'abord ... plus large dans les implémentations ultérieures). Ainsi, ce n’est pas parce qu’il s’agit d’une "machine 32 bits" que les adresses de mémoire physique sont limitées à 32 bits.

L'industrie a un historique long des machines dont la "largeur de bit" ne correspond pas à la taille maximale de l'adresse physique. Par exemple, l’architecture VAX définit une machine 32 bits et les adresses virtuelles (qui sont les adresses utilisées par le code lorsque la traduction d’adresses est activée) ont effectivement une largeur de 32 bits ... mais les adresses physiques du VAX n’ont qu’une largeur de 30 bits - et la moitié de l'espace d'adressage physique est consacrée aux registres de périphériques d'E/S, donc le nombre maximal de RAM n'était que de 512 Mio.

Même sans matériel de traduction d'adresse, la "largeur de bit" de la machine ne définit pas nécessairement l'adresse maximale RAM. Exemple: Les séries CDC "upper 3000" étaient des machines 36 bits. Pensez-vous qu'ils pourraient adresser 64 GiB de RAM? Pas à peine! Ces machines sont apparues au milieu des années 60! Heck, nous ne pouvions même pas avoir 64 Go d'espace disque à cette époque. (Les CDC 6000 étaient des machines 60 bits. Dois-je continuer?)

0
Jamie Hanrahan