Un système d'exploitation 32 bits peut-il utiliser la totalité des fichiers de page de 8 Go de RAM + 20 Go?

98

Ce que je comprends des systèmes d’exploitation 32 bits, c’est que l’adresse est exprimée en 32 bits. Par conséquent, le système d’exploitation peut utiliser au maximum 2 32 = espace mémoire 4G.

Cela signifie-t-il que si une machine dotée d'un système d'exploitation 32 bits (Windows ou Unix) dispose de plus de 4 Go de RAM + fichier de page sur disque dur, par exemple 8 Go de RAM et 20 Go de fichier de page, sa mémoire ne sera jamais "épuisée "?

Par "épuisé", je veux dire que l'augmentation de la RAM ou du fichier d'échange n'aidera pas la performance; Bien sûr, il est toujours possible qu'une application continue à demander de la mémoire à l'OS mais échoue.

De même, si cette machine OS 32 bits dispose de 2 Go de RAM et de 2 Go de fichier d'échange, augmenter la taille du fichier d'échange ne sera pas préjudiciable aux performances. Est-ce vrai?

Athos
la source
2
Notez également que si vous disposez de plus de 4 Go de RAM et d’un système d’exploitation 32 bits, vous pouvez créer un disque RAM. Ceci est un disque dur dans votre RAM, et vous pouvez utiliser la RAM inutilisée / non adressée pour le placer po.
Simon Verbeke
10
Tu ne peux pas. Un disque mémoire doit encore être créé via le système d'exploitation. Si le système d'exploitation ne peut pas utiliser la mémoire, vous ne pouvez pas créer de disque mémoire. (À moins que votre bios ne puisse créer un disque mémoire, ce qui est rare).
AVee
1
La reponse courte est oui". Bien qu’un processus se voit généralement attribuer un espace d’adresse de 32 bits, le système d’exploitation lui-même peut en utiliser davantage (soit en effectuant une commutation de banque, comme ce fut le cas dans les années 80, soit en adoptant un système d’extension d’adresses comme le PAE d’Intel. Un programme à la fois, qui peut être composé de plusieurs processus (Chrome insère des onglets dans différents processus). Le système d'exploitation lui-même utilise la mémoire pour la mise en cache de données à partir de disques fixes locaux, de sorte que vous bénéficiez déjà d'un accès plus rapide aux données. utilisé
rbanffy

Réponses:

145

Ce que je comprends des systèmes d’exploitation 32 bits, c’est que l’adresse est exprimée en 32 bits, de sorte que le système d’exploitation peut utiliser au plus 2 ^ 32 = 4 Go d’espace mémoire.

Le processus que le processus peut traiter est au maximum de 4 Go. Vous confondez potentiellement la mémoire avec l' espace d'adressage . Un processus peut avoir plus de mémoire que d'espace d'adressage. C'est parfaitement légal et assez courant dans le traitement vidéo et autres applications gourmandes en mémoire. Des dizaines de Go de mémoire peuvent être alloués à un processus et échangés à volonté dans l'espace d'adressage. Seuls 2 Go peuvent aller dans l' espace d'adressage utilisateur à la fois.

Si vous avez un garage pour quatre voitures chez vous, vous pouvez toujours posséder cinquante voitures. Vous ne pouvez tout simplement pas les garder tous dans votre garage. Vous devez avoir un stockage auxiliaire ailleurs pour pouvoir en stocker au moins 46; Les voitures que vous gardez dans votre garage et celles que vous gardez sur le parking dans la rue sont à vous.

Cela signifie-t-il que tout système d'exploitation 32 bits, qu'il s'agisse de Windows ou d'unix, si la machine a plus de 4 Go de mémoire vive et plus sur le disque dur, par exemple 8 Go de RAM et 20 Go de fichier d'échange, il n'y aura jamais de "mémoire utilisée"?

Absolument cela ne veut pas dire cela. Un seul processus pourrait utiliser plus de mémoire que cela! Là encore, la quantité de mémoire utilisée par un processus n'a presque pas de lien avec la quantité d'espace d'adressage virtuel utilisée par un processus. Tout comme le nombre de voitures que vous conservez dans votre garage n'a aucun rapport avec le nombre de voitures que vous possédez.

De plus, deux processus peuvent partager des pages de mémoire non privées . Si vingt processus chargent tous la même DLL, ils partagent tous les pages de mémoire de ce code. Ils ne partagent pas d' espace d'adressage de mémoire virtuelle , ils partagent de la mémoire .

Ce que je veux dire, au cas où ce ne serait pas clair, c'est que vous devriez arrêter de penser à la mémoire et à l'espace d'adressage comme étant la même chose, car ils ne sont pas du tout la même chose.

Si ce système d'exploitation 32 bits dispose de 2 Go de RAM et de 2 Go de fichier d'échange, augmenter la taille du fichier d'échange ne sera pas préjudiciable aux performances. Est-ce vrai?

Vous avez cinquante voitures, un garage pour quatre voitures et un parking de 100 places dans la rue. Vous augmentez la taille du parking à 200 places. Est-ce que certaines de vos voitures vont plus vite parce que vous avez maintenant 150 places de stationnement supplémentaires au lieu de 50 places de stationnement supplémentaires?

Eric Lippert
la source
26
Je trouve que cette réponse ne répond pas à la question et est presque trompeuse par endroits.
Rig
48
@Rig: Génial, je suis heureux d'entendre vos critiques constructives. Vous avez maintenant la possibilité de rédiger une meilleure réponse et de nous montrer le type de réponse que vous jugez moins trompeur et plus pertinent.
Eric Lippert
4
@ BlueRaja: Je suppose que vous confondez la mémoire physique avec la mémoire . La mémoire physique est simplement une optimisation permettant un accès plus rapide à la mémoire. Les caches de processeur sont une optimisation qui permet un accès plus rapide à la mémoire. La mémoire est à toutes fins pratiques un espace réservé dans le fichier de page. Qu'une page donnée dans le fichier de page soit (1) mappée sur une adresse de mémoire virtuelle ou (2) copiée d'un disque vers une mémoire physique n'a pas d'importance si elle est allouée ou non.
Eric Lippert
4
@BlueRaja: l'article de Raymond Chen sur le sujet pourrait aider. Il montre comment allouer 4 Go du fichier de page; c'est la mémoire que le processus possède . Bien sûr, le processus ne peut pas traiter le tout en même temps, mais il peut adresser n’importe quelle page en mappant une page dans une page de machine virtuelle inutilisée, en l’utilisant pendant un certain temps, puis en la supprimant. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert
3
Cette réponse aurait été plus claire, Eric, si vous aviez déclaré explicitement que Windows (et d’autres systèmes d’exploitation) vous permet de "réserver" de la mémoire sans l’avoir réellement dans votre espace adresse virtuel, puis de répondre à la question évidente " répondre à cela? Je pense que la réponse à cette question est «il y a une sorte d'ID de page que vous utilisez pour vous y référer afin de le repérer dans l'espace d'adressage virtuel, puis vous pouvez y répondre», mais je ne sais pas, et ta réponse ne dit pas :)
Timwi
67

Il est vrai que la CPU ne peut traiter qu’un maximum de 4 Go de RAM. Cependant, les CPU actuelles utilisent une MMU ( unité de gestion de la mémoire ) pour convertir les adresses de mémoire spécifiques au processus en adresses de mémoire physique.

Cette MMU est utilisée pour toutes sortes d’astuces différentes, de l’isolation de la mémoire (le processus A ne peut pas manipuler la mémoire du processus B) au partage de la mémoire (le processus A peut accéder à la même région de mémoire physique que le processus B et échanger des données de cette façon).

Bien que les processeurs 32 bits ne prennent en charge que 4 Go de mémoire par processus, ils peuvent gérer jusqu'à 64 Go de RAM lors de l'utilisation de l' extension d'adresse physique . Cela permet au processus A d’utiliser la première tranche de 4 Go de mémoire, alors que le processus B utilise la tranche suivante de 4 Go. Au total, plus de 4 Go de mémoire physique sont utilisés, mais la quantité totale de mémoire utilisée par un processus unique est toujours limitée à 4 Go .

PAE est pris en charge sous Linux depuis la version 2.3.23 du noyau et sur certaines versions de Windows Server 32 bits, mais pas sous Windows XP 32, Vista ou 7 32 bits.

Si votre processeur ne prend pas en charge PAE, vous serez limité à 4 Go de mémoire physique (ou moins, en fonction d'autres facteurs).

Veuillez noter que votre système d'exploitation peut toujours expulser des parties de la mémoire physique sur le disque (fichier d'échange), quel que soit le processeur prenant en charge PAE. Cela garantit que vous pouvez démarrer plusieurs processus utilisant plus de 4 Go combinés. Le seul impact de PAE est de savoir si vous pouvez conserver les 4 Go du processus B dans la mémoire physique tout en exécutant le processus A.

Dave Webb
la source
cela signifie-t-il que si ce n'est pas pris en charge, alors ce que j'ai dit ci-dessus est correct?
10
Windows XP prend en charge PAE (à partir de SP2, je pense), mais ignore la RAM au-delà de 4 Go, même lorsque la machine prend en charge PAE; voir ici . Il est utilisé pour la prévention de l'exécution des données basée sur le matériel - le bit NX / XD est disponible uniquement dans une entrée de table de pages PAE, pas une entrée "normale" de table de pages.
Wyzard
Le chipset peut également limiter la quantité de mémoire pouvant être prise en charge / utilisée, quel que soit le système d'exploitation ou le hack choisi.
Moab
5
J'ajouterais que la raison pour laquelle les versions grand public de fenêtres 32 bits ne prennent pas en charge plus de 4 Go de RAM, c'est qu'un nombre important de lecteurs matériels ne fonctionnaient pas correctement avec autant de mémoire. et comme à l'époque> 4 Go de bélier étaient extrêmement rares en dehors des serveurs / postes de travail ultra haut de gamme, la plupart des entreprises qui maintenaient les pilotes ne voulaient pas dépenser de l'argent pour mettre à jour des pilotes qui ne seraient utilisés que par 0,1% de leur clientèle.
Dan Neely
6
@DanNeely, le système d'exploitation prend en charge la mémoire, qui est limitée en raison de problèmes de licence . Bien que je convienne qu'il s'agit d'un piratage tiers, il ne concerne que les variantes grand public de Windows. Les distributions Windows basées sur serveur, à partir de Windows 2000 , prennent en charge plus de 4 Go de mémoire (réf. Le premier lien).
Percée
15

S'agissant plus particulièrement des variantes Windows 32 bits, elles supportent plus de 4 Go de RAM depuis les variantes Windows 2003 (et vous pouvez également obtenir un hack du noyau pour Windows 7 afin de vous permettre d'utiliser toute votre mémoire RAM en 32 bits). Cependant, cela a un coût, comme vous l'avez expliqué dans la première partie de votre question.

Dans un système d'exploitation 32 bits, la taille d'un pointeur (adresse mémoire) est identique à la longueur de mot de la CPU, 32 bits, ce qui permet (comme vous l'avez mentionné) de disposer d'un espace mémoire de 2 ^ 32 = 4 Go. Windows adopte également une approche de «mémoire virtuelle» pour les applications, de sorte que chaque application dispose de son propre espace mémoire.

Étant donné que chaque pointeur ne fait que 32 bits de large, les pointeurs de chaque application ne peuvent gérer que 4 Go de mémoire, même si le système peut prendre en charge plus de 4 Go de RAM. Autant que je sache, c'est le seul inconvénient à l'utilisation de plus de 4 Go de RAM dans un système d'exploitation 32 bits. Au total, de nombreuses applications combinant plus de 4 Go de RAM peuvent être combinées, mais un processus particulier ne peut allouer / accéder que jusqu'à 4 Go.


Pour revenir à votre question, disons que vous avez un programme qui utilise 2 Go de RAM. Si vous avez 10 instances de ce programme, c'est 20 Go. Tous les 8 Go de votre RAM seront utilisés, ainsi que 12 Go supplémentaires du fichier d'échange. Donc, oui, sous les systèmes d'exploitation 32 bits, il est plus que possible d'utiliser cette mémoire.

Si ce système d'exploitation 32 bits dispose de 2 Go de RAM et de 2 Go de fichier d'échange, augmenter la taille du fichier d'échange ne sera pas préjudiciable aux performances. Est-ce vrai?

Augmenter la taille du fichier d'échange n'améliorera généralement pas les performances (à moins que votre RAM et votre fichier d'échange soient définis sur le minimum absolu ou sur une valeur telle que votre ordinateur reste constamment bloqué). Cela empêchera toutefois votre ordinateur de manquer de mémoire (virtuelle). Chaque fois que quelque chose doit être purgé dans le fichier d'échange, vous subissez déjà un énorme problème de performances (car le disque dur est beaucoup plus lent que votre RAM).

Percée
la source
Sur les 4 Go d'espace d'adressage que chaque processus obtient, seuls 2 Go sont réellement disponibles pour le programme; les 2 Go restants sont réservés au noyau. L' option de démarrage / 3GB peut permettre à certains programmes d'utiliser plus de RAM.
Wyzard
1
@ Breakthrough: "L'augmentation de la taille du fichier d'échange n'augmentera jamais les performances" Je ne pense pas que cela soit vrai. Par exemple, s’il ya plus d’échanges, le système d’exploitation peut échanger de manière plus agressive les données de programme inutilisées et utiliser la RAM disponible pour, par exemple, la mise en cache sur disque. Dans certaines configurations, cela peut donner de meilleures performances. Il existe une bonne réponse à ServerFault sur la raison pour laquelle un fichier d'
échange
2
Méfiez-vous des instructions générales telles que «L'augmentation de la taille du fichier d' échange n'améliorera jamais les performances» , il est parfaitement possible qu'un fichier de page trop petit entraîne davantage de disques sur le disque qu'un fichier de page plus volumineux! Voir les réponses et les commentaires dans cette question .
Mark Booth
1
@sleske Bon point, je l'ai mis à jour pour qu'il soit davantage du type "généralement pas". Bien que je sois d’accord pour dire que cela peut faire une énorme différence sur un serveur, pour la plupart des gens, ce que j’essayais de faire comprendre, c’est qu’ils auraient intérêt à obtenir plus de mémoire RAM (étant donné que lorsque vous effectuez une pagination, les performances sont à peu près aussi lentes. comme il peut arriver).
Percée
-1

Lorsqu'un processeur est dit 32 bits, cela signifie qu'il peut fonctionner avec des nombres 32 bits en utilisant une seule instruction. Cela a peu à voir avec la largeur de son bus d’adresses, qui sur architecture Intel est à 36 bits depuis la sortie de Pentium Pro en 1995.

La fameuse limite de 4 Go vient du fait que la plupart des logiciels informatiques utilisent un modèle de mémoire plat dans lequel chaque octet de mémoire peut être adressé par un pointeur. Puisqu’un pointeur doit tenir dans un registre à utiliser et que les registres ont une largeur de 32 bits, vous êtes limité à 4 Go.

Dmitry Grigoryev
la source
Ceci est incorrect, comme indiqué dans d'autres réponses précédentes ci-dessus.
ChrisInEdmonton
Pourriez-vous signaler un fait en particulier que je me suis trompé?
Dmitry Grigoryev
1
Un seul processus peut utiliser plus de 4 Go. Plus précisément, les réponses précédentes soulignent "Un processus peut avoir plus de mémoire que d'espace d'adressage".
ChrisInEdmonton
2
Voir, par exemple, blog.superuser.com/2011/04/23/… Désormais, vous ne pouvez certes pas utiliser plus de 4 Go simultanément, mais un processus unique peut dé-mapper et remapper la mémoire, vous permettant ainsi d'utiliser plus de 4 Go en un seul processus, il y a juste un peu de comptabilité. Ce blog est plutôt spécifique à Windows. J'ai exécuté des serveurs de base de données avec plus de 4 Go de mémoire allouée, sur des installations Linux 32 bits. Ces jours-ci, bien sûr, vous n’utilisiez que Linux 64 bits.
ChrisInEdmonton
1
OK, mes excuses. Je n'ai pas pensé à la possibilité d' mmapaugmenter la mémoire.
Dmitry Grigoryev