2009-05-28 6 views
1

J'utilise une version RHEL 4.4 sur du matériel AMD64. Voici la sortie de uname -aUtilisation de la mémoire sur une machine RHEL 32 bits

$ uname -a 
Linux zulu 2.6.9-42.0.10.ELsmp #1 SMP Fri Feb 16 17:17:21 EST 2007 i686 athlon i386 GNU/Linux 

Je 8gigs de mémoire installée sur ce système, OS étant 32 bits, je suppose que mon système ne sera pas en mesure d'utiliser la pleine mémoire de 8 Go. Mais quand je lance top, je vois ce qui suit -

Mem: 8309168k total, 8292028k used, 17140k free,  7096k buffers 

Ainsi, haut est en mesure d'afficher tous les 8 Go de mémoire.

Si j'installe WinXP 32 bits dans la même machine, le gestionnaire de tâches affiche seulement 3 Go comme disponibles.

Ma question est - Comment l'OS 32 bits peut-il voir 8 Go de mémoire? Cela signifie-t-il que mes applications pourront utiliser un plus grand espace d'adressage? Et pourquoi est la différence entre Linux 32 bits et WinXP 32 bits?

Merci!

Répondre

1

La méthode permettant cela est appelée "PAE" (extension d'adresse physique). Votre UC est capable d'utiliser des adresses 36 bits en interne, et votre système d'exploitation le prend en charge. Malheureusement, Windows XP utilise uniquement PAE pour prendre en charge le bit NX (aucun bit d'exécution, provoque une exception lorsque le processeur essaie d'exécuter du code à partir d'une page marquée avec ce bit). Les noyaux Linux 32bit supportent le PAE.

2

Il existe différents 'niveaux' de mémoire. Ce qui est impossible, quel que soit le système d'exploitation, est d'adresser plus de 4 Go dans un processus, puisque vos pointeurs sont trop petits pour plus que cela - c'est la limitation fondamentale de la mémoire 32 bits w.r.t. Sur linux et windows, et la plupart des systèmes d'exploitation 'traditionnels' je devine, l'espace d'adressage virtuel 32 bits est divisé en une partie pour le noyau et une partie pour le processus, donc vous obtenez moins de 4 Go de contenu adressable pour chaque processus. Cependant, le système d'exploitation pourrait utiliser plus de 4 Go - par exemple, avoir 2-3 processus consommant chacun 2 Go de mémoire. Même un processeur 32 bits peut traiter plus de 4 Go de mémoire (au niveau matériel), mais dans l'espace d'adressage virtuel, vous êtes toujours limité par vos pointeurs 32 bits.

La vieille chose nouvelle a une bonne explication sur les différences entre l'espace d'adressage physique, l'espace d'adressage virtuel et co: http://blogs.msdn.com/oldnewthing/archive/2004/08/18/216492.aspx

+0

En fait, bien que ce soit généralement une réponse appropriée, c'est un peu trompeur car il y a des choses que vous pouvez faire pour traiter plus de 4 Gio en un processus 32 bits.Par exemple, sous Windows: «AWE (Address Windowing Extensions) est une interface de programmation d'application Microsoft Windows qui permet à une application logicielle 32 bits d'accéder à plus de mémoire physique que d'espace d'adressage virtuel, même au-delà de la limite de 4 Go. 1] ", tiré de http://en.wikipedia.org/wiki/Address_Windowing_Extensions –

1

nouveaux processeurs i386 compatibles peuvent traiter plus de 4 Go en utilisant le mode PAE. Windows XP limite artificiellement l'espace d'adressage à 4 Go car il y a trop de pilotes matériels mal écrits qui supposent que tout le DMA sera fait en mémoire au-dessous de 4 Go. Ainsi, environ 1 Go de l'espace d'adressage de 4 Go est mappé au matériel, le reste à la RAM physique. Les éditions du serveur Windows n'ont pas cette limitation. Les noyaux Linux qui supportent PAE ne limitent pas non plus la mémoire. Les deux prennent en charge jusqu'à 32 Go, si je me souviens bien.

Votre application est limitée à environ 2 à 3 Go d'espace d'adressage, selon les options du système d'exploitation. Une application peut effectivement utiliser plus de RAM physique que cela en fenêtrant des parties de la mémoire dans et hors de cet espace d'adressage, en utilisant des extensions de fenêtrage d'adresse, ou des fichiers mappés en mémoire, par exemple.

+0

PAE augmente la limite à 2^36 octets, donc 64 GiB. :) –