Question 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 DOS / Windows 3.11 jours, cette mémoire de 16 bits pouvait être séparée en segments, de sorte qu'un ordinateur 16 bits puisse accéder à une quantité de mémoire supérieure à 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 la suivante: si les systèmes d'exploitation 16 bits autorisaient un accès 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?


9
2018-02-22 21:39


origine




Réponses:


Ils le font, le système s'appelle Extension d'adresse physique (PAE). Voici une liste de fenêtres OS et leur mémoire max, tout système 32 bits qui permet plus de 4 Go de RAM utilise PAE pour accéder à la mémoire (par exemple, Windows 2003 R2 Datacenter 32 bits permet 128 Go de RAM).


En fait, Windows 8 a besoin un processeur compatible PAE exigences minimales.


Pour répondre à votre question "non sollicité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 autoriser une mémoire vive supérieure à 4 Go pour leurs systèmes d'exploitation 32 bits, à moins que vous ne payiez pour une édition de centre de données (c'est pourquoi ils vendent une édition de centre de données, si vous le souhaitez). avoir besoin autant de RAM, vous pouvez probablement vous permettre de dépenser plus d’argent pour un système d’exploitation).


10
2018-02-22 22:02



Ah j'ai entendu parler de PAE avant 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 Windows 7 32 bits, car la liste précise que W7x86 n'autorise que 4 Go. - series0ne
@ 0xC0000022L pour être honnête, j'ai ajouté la partie licence sous forme de modification après son commentaire, mais en raison de la fenêtre d'édition de 4 minutes, il semble que je l'aie publiée avant de poster le commentaire. - Scott Chamberlain
PAE exige que la table de pages fonctionne, ce qui est coûteux en termes de performances. - vonbrand
C'est un mythe. Le surcoût lié à PAE est minime. Et si vous n'aimez pas PAE, vous devriez vraiment détester x64, car la structure de la table de pages sur x64 ressemble à PAE, avec juste un autre niveau de table ajouté en haut et plus de bits pour les PFN dans les PxE. - Jamie Hanrahan
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 de devoir être sélectionné en option. - Jamie Hanrahan


Au lieu de l'expliquer moi-même, je laisserai parler à quelqu'un qui doit maintenir un noyau avec le support PAE, Linus Torvalds

Gardez également à l'esprit que la prise en charge PAE dans les versions Windows 32 bits est payante. XP ne pourra même pas utiliser normalement 4 Go de RAM, car MS a choisi de ne pas activer les fonctionnalités PAE. Un noyau étroitement lié, Windows 2003 Server, prend en charge PAE. Cependant, même là, votre "édition standard" ne prend en charge que 4 Gio (mais fonctionne autour du trou de la mémoire du BIOS), alors que les éditions plus coûteuses autoriseront jusqu'à 64 Gio de RAM. La même chose vaut pour Vista 32 bits.

cependant, pas dans tous les cas est cette limitation imposée par Windows. Si c'était le cas, démarrer un noyau Linux compatible PAE vous permettrait toujours d'utiliser la totalité des 4 GiB (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 PAE.


Juste un petit commentaire: aucun des processeurs 64 bits actuels basés sur x86 ne peut même traiter toute la gamme de l'espace d'adressage 64 bits physiquement (pour référence voir cette question et réponses).


11
2018-02-22 22:18



Très cool lire dans le lien, merci pour cela! - Scott Chamberlain
Hmm, pourquoi j'ai l'impression que Linus déteste vraiment HIGHMEM.SYS et PAE? : P - Karan
Je comprends que PAE serait une gêne pour tout code qui nécessiterait plus que quelques Go de jeu de travail, et pour le code système qui doit gérer plusieurs tâches de 2 Go chacune, mais à moins qu'une seule application nécessite plus de 2 Je m'attendrais à ce que PAE soit transparent. En outre, je pense que PAE serait également préférable à l’utilisation globale de pointeurs 64 bits dans les cas où il fallait 3 Go de RAM à usage général, plus un grand disque dur ou un disque de stockage temporaire. - supercat
Les commentaires de Linus sont étranges. Il n'y a pas de relation entre le fonctionnement de himem.sys et le fonctionnement de PAE. C'est très amusant de voir des gens se disputer pour l'adressage x64 et contre PAE ... quand le mode long x64 prend simplement le schéma PAE et ajoute un niveau supplémentaire de tableau de page! - 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 (Linus) ne sont pas tout à fait correctes, mais si c'est un concept étranger, les métaphores peuvent aider :) ... Je suppose que c'est pour cela qu'il l'a choisi pour faire valoir son point de vue. - 0xC0000022L


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


1
2018-02-22 21:46



Cela n'a vraiment pas assez d'informations pour sauvegarder vos déclarations. Windows 3.1 est un système d'exploitation 16 bits. Il faut se rappeler qu'en 1992 2 Mo de mémoire était de plus de 300 $. - Ramhound
Vous êtes le 22 février commentaire, et l'explication de Scott Chamberlin couvre à peu près ce que je conduisais. Ils omettent de décrire la raison pour laquelle 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
À mon avis, les réponses devraient être autonomes. Votre commentaire ajoute suffisamment d'informations pour résoudre mes problèmes avec votre réponse. - Ramhound
@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 une charge de traitement monstrueusement plus importante à de tels programmes, et la manière dont il a été étendu sur le 80386 rendrait totalement inutile un schéma de segment par objet. - supercat


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

Les processeurs Intel 8088 et 8086 avaient un bus d’adresse mémoire de 20 bits (1 Mo), tandis que le 68000 de Motorola disposait d’un bus d’adresse 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 s'est étendu à 64 bits. (Je pense que les puces PowerPC d’entreprise de Motorola / IBM sont également devenues des bus d’adresse 64 bits.)

La mémoire disponible au-dessous et jusqu'au maximum accessible directement par le processeur n'était limitée que par les puces matérielles (chipset) et le système d'exploitation. 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 à 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.

Une mémoire dépassant cette limite nécessitait une unité de gestion de mémoire (MMU) 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 les autres ordinateurs 8 bits peuvent 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
2018-06-19 06:56





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 que la "largeur de bit" du processeur, qui correspond généralement à la taille des registres généraux 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 sont larges 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 la table de pages dont 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). Donc, juste parce que, par exemple, une "machine 32 bits" ne signifie pas que les adresses de mémoire physique sont limitées à 32 bits.

L'industrie a un longue historique des machines dont la "largeur de bit" ne correspondait 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 une fois la traduction d'adresse activée) ont bien une largeur de 32 bits ... mais les adresses physiques du VAX ne sont que de 30 bits - et la moitié de l'espace d'adressage physique est consacré aux registres de périphériques d'E / S, de sorte que la mémoire vive maximale n'était que de 512 Mio.

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


0
2017-10-21 00:29



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