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

17

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

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

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

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

Je me souviens de DOS / Windows 3.11 jours, que la mémoire 16 bits pouvait être séparée en segments, de sorte qu'une machine 16 bits pouvait accéder à une plus grande quantité de mémoire que 64 kilo-octets.

J'ai une machine avec 16 Go de mémoire, et je double le démarrage d'un système d'exploitation 32 bits et d'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.

Donc, ma question est, si les systèmes d'exploitation 16 bits permettaient un accès à la 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?

Matthew Layton
la source

Réponses:

15

Ils le font, le système s'appelle l' extension d'adresse physique (PAE) . Voici une liste des systèmes d'exploitation Windows et de leur mémoire maximale, tout système 32 bits qui autorise 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 nécessite un processeur compatible PAE dans ses exigences minimales .


Pour répondre à votre question "non posée" sur la raison pour laquelle votre système d'exploitation 32 bits ne peut pas accéder au ram s'il existe: Licence. Ils choisissent de ne pas permettre à la RAM d'être supérieure à 4 Go pour leurs systèmes 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 avez besoin de tant de RAM, vous pouvez probablement vous permettre de dépenser plus de l'argent sur un OS).

Scott Chamberlain
la source
Ah j'ai déjà entendu parler de PAE mais je n'ai jamais enquêté. Il semble être largement utilisé dans l'architecture de serveur, il ne semble donc pas s'appliquer à une installation de Windows 7 32 bits, car la liste spécifie que W7x86 n'autorise que jusqu'à 4 Go
Matthew Layton
1
@ 0xC0000022L pour être honnête, j'ai ajouté la partie licence en tant que modification après son commentaire, mais en raison de la fenêtre de modification de 4 minutes, il semble que je l'ai publiée avant qu'il ne publie le commentaire.
Scott Chamberlain
1
PAE nécessite que switcheroo de table de pages fonctionne, ce qui est coûteux en termes de performances.
vonbrand
3
C'est un mythe. Les frais généraux dus au PAE sont minimes. Et si vous n'aimez pas PAE, vous devriez vraiment détester x64, car la structure de la table des pages sur x64 ressemble à PAE, juste avec un autre niveau de table ajouté en haut et plus de bits pour les PFN dans les PxE.
Jamie Hanrahan
1
PAE n'a pas été "supprimé dans Windows 7 car il n'est plus nécessaire", il est toujours présent dans Windows 7 x86 - il est juste là par défaut plutôt que d'avoir à être activé.
Jamie Hanrahan
13

Au lieu de l'expliquer moi-même, je vais laisser quelqu'un qui doit maintenir un noyau avec le support PAE parler de ses manières charmantes, Linus Torvalds

Gardez également à l'esprit que la prise en charge PAE dans les versions Windows 32 bits est très coûteuse. XP ne pourra même pas utiliser normalement 4 Go de RAM, car MS a choisi de ne pas activer les fonctionnalités PAE dessus. Un noyau étroitement lié, Windows 2003 Server, prend en charge PAE. Cependant, même là, votre «édition standard» ne prendra en charge que jusqu'à 4 Gio (mais en contournant le trou de mémoire du BIOS), tandis que les éditions plus chères autoriseront alors jusqu'à 64 Gio 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 tel était le cas, le démarrage d'un noyau Linux compatible PAE vous permettrait tout de même d'utiliser les 4 Gio (ou plus). Non, 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 remarque: aucun des processeurs 64 bits actuels basés sur x86 ne peut même adresser physiquement la plage complète de l'espace d'adressage 64 bits (pour référence, voir cette question et réponses).

0xC0000022L
la source
Hmm, pourquoi ai-je l'impression que Linus déteste vraiment HIGHMEM.SYS et PAE? : P
Karan
2
Je comprends que PAE serait une nuisance pour tout code qui nécessiterait plus de quelques concerts de jeu de travail, et pour le code au niveau du système qui doit gérer plusieurs tâches de 2 concerts environ, mais à moins qu'une seule application ait besoin de plus de 2 concerts je m'attendrais à ce que PAE soit transparent. De plus, je pense que PAE serait également meilleur que l'utilisation globale de pointeurs 64 bits dans les cas qui nécessitaient 3 Go de RAM à usage général plus un grand cache de disque ou un lecteur de stockage temporaire.
supercat
Les commentaires de Linus sont étranges. Il n'y a aucune relation entre le fonctionnement de himem.sys et le fonctionnement de PAE. Il est très amusant de voir les gens plaider pour x64 et contre l'adressage PAE ... quand le mode long x64 prend simplement le schéma PAE et ajoute un niveau de table de pages!
Jamie Hanrahan
@JamieHanrahan: ... au moins deux sur des systèmes plus récents (en raison de la virtualisation), ce qui ouvre des possibilités intéressantes. Ses comparaisons (de Linus) ne sont pas tout à fait exactes, mais si c'est un concept étranger, les métaphores peuvent aider :) ... Je suppose que c'est pourquoi il l'a choisi pour faire valoir son point de vue.
0xC0000022L
2

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

Les 8088 et 8086 d'Intel avaient un bus d'adresse mémoire de 20 bits (1 Mo), tandis que le 68000 de Motorola avait un bus d'adresse de 24 bits (16 Mo). IIRC, le [80] 286 est passé à un bus d'adresse 24 bits. Les deux se sont ensuite étendus à un bus d'adresse 32 bits avec respectivement [80] 386 et 68020.) Avec les puces Pentium, le bus d'adresse s'est étendu à 64 bits. (Je pense que les puces PowerPC de Motorola / IBM ont également utilisé un bus d'adresse 64 bits.)

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

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

Il est désormais plus avantageux d'utiliser la mémoire virtuelle pour étendre les limites de mémoire physique passées, bien qu'avec les limites imposées par le système d'exploitation.

William
la source
1

Parce qu'il n'y a aucune raison pratique de le faire. Les extensions d'adresse physique permettent à peu près la même fonctionnalité et leur utilisation est encore très limitée parmi les utilisateurs. Dans les jours Windows 3.1, il y avait des contraintes qui ne sont tout simplement pas présentes aujourd'hui.

OCDtech
la source
1
Cela n'a vraiment pas assez d'informations pour sauvegarder vos relevés. Windows 3.1 est un système d'exploitation 16 bits. Il faut se rappeler qu'en 1992, 2 Mo de mémoire dépassaient 300 $.
Ramhound
Vous êtes un commentaire du 22 février, et l'explication de Scott Chamberlin couvre à peu près ce que je voulais dire. Ils omettent de décrire pourquoi la pagination segmentée extensible a été utilisée dans DOS / Win16, mais pas dans Windows plus tard. Je n'ai pas inclus cela, car cela ne contribuerait pas directement à répondre à la question du PO.
OCDtech
Je pense que les réponses devraient être autonomes. Votre commentaire ajoute suffisamment d'informations pour résoudre mes problèmes avec votre réponse.
Ramhound
1
@OCDtech: Le modèle segmenté 8086 permettrait à un langage orienté objet d'utiliser des références d'objet à 2 octets pour identifier les objets alignés sur des limites de 16 octets, mais les langages n'étaient pas bien équipés pour utiliser efficacement les segments. Le modèle 80286 impose des frais généraux monstrueusement plus importants à ces programmes, et la façon dont il a été étendu sur le 80386 rendrait un schéma segment par objet totalement inutile.
supercat
0

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

Le défaut fondamental ici est la notion que la "largeur de bit" du processeur, qui est 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 une largeur de 32 bits. Cela permet un espace d'adressage virtuel de 4 Gio.

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

Avec PAE, ce dernier est de 36 bits (au début ... plus large dans les implémentations ultérieures). Ainsi, ce n'est pas parce que c'est, par exemple, une "machine 32 bits" que les adresses de mémoire physique sont limitées à 32 bits.

L'industrie a une longue histoire de machines dont la "largeur de bit" ne correspond pas à leur taille d'adresse physique maximale. Par exemple, l'architecture VAX définit une machine 32 bits, et les adresses virtuelles (qui sont les adresses utilisées par le code une fois la traduction d'adresse activée) ont en effet une largeur de 32 bits ... mais les adresses physiques du VAX n'ont que 30 bits de largeur - et la moitié de l'espace d'adressage physique est consacrée aux registres de périphériques d'E / S, de sorte que la RAM maximale n'était que de 512 Mo.

Même sans matériel de traduction d'adresse, il n'est pas nécessairement vrai que la "largeur de bit" de la machine définit l'adresse RAM maximale. Exemple: La série CDC "Upper 3000" était constituée de machines 36 bits. Pensez-vous qu'ils pourraient traiter 64 Go de RAM? Pas à peine! Ces machines sont sorties au milieu des années 60! Heck, nous ne pouvions même pas avoir 64 Go d' espace disque à l'époque. (La série CDC 6000 était des machines 60 bits. Dois-je continuer?)

Jamie Hanrahan
la source
Et n'oubliez pas les systèmes qui n'utilisent pas 8 bits par cellule RAM. (EG: 16/16 = 128K max, 32/32 = 16G Max, 32/64 = 32G Max)
SkyCharger