2009-05-28 2 views
1

Ich verwende 32 Bit RHEL 4.4 auf AMD64-basierter Hardware. Hier ist die Ausgabe von uname -aSpeicherverbrauch auf 32-Bit-RHEL-Rechner

$ 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 

Ich habe 8gigs Speicher auf diesem System installiert, OS 32 Bits sein Ich würde davon ausgehen, dass mein System nicht in der Lage wäre, die Nutzung der vollen 8 GB Speicher zu machen. Aber wenn ich oben laufen, sehe ich die folgende -

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

So oben ist in der Lage alle 8 GB Speicher anzuzeigen.

Wenn ich 32-Bit-WinXP in derselben Maschine installieren, zeigt Task-Manager nur 3 GB als verfügbar.

Meine Frage ist - Wie kann 32 Bit OS 8GB Speicher sehen? Bedeutet dies, dass meine Anwendungen größeren Adressraum verwenden können? Und warum ist der Unterschied zwischen 32 Bit Linux und 32 Bit WinXP?

Danke!

Antwort

1

Die Methode, die dies ermöglicht, wird "PAE" (Physical address extension) genannt. Ihre CPU kann intern 36-Bit-Adressen verwenden, und Ihr Betriebssystem unterstützt sie. Unglücklicherweise verwendet Windows XP nur PAE, um das NX-Bit zu unterstützen (Kein eXecution-Bit, verursacht eine Ausnahme, wenn der Prozessor versucht, Code von einer mit diesem Bit markierten Seite auszuführen). 32bit Linux Kernel unterstützen PAE.

2

Es gibt verschiedene 'Ebenen' des Speichers. Was unmöglich ist, was auch immer das OS ist, ist mehr als 4 Gb in einem Prozess zu adressieren, da Ihre Zeiger zu klein für mehr als das sind - das ist die grundsätzliche Begrenzung von 32 Bit Speicher. Auf Linux und Windows und den meisten "traditionellen" Betriebssystemen würde ich vermuten, dass der 32-Bit virtuelle Adressraum in einen Teil für den Kernel und einen Teil für den Prozess aufgeteilt ist, so dass Sie für jeden Prozess weniger als 4 GB adressierbaren Inhalt erhalten.

Aber noch könnte das Betriebssystem mehr als 4 GB verwenden - zum Beispiel mit 2-3 Prozessen, die jeweils 2 GB Speicher verbrauchen. Sogar eine 32-Bit-CPU kann mehr als 4 GB Speicher adressieren (auf der Hardware-Ebene), aber im virtuellen Adressraum sind Sie immer durch Ihre 32-Bit-Zeiger begrenzt.

Die alte neue Sache hat eine gute Erklärung für die Unterschiede zwischen den physikalischen Adressraum, virtuellen Adressraum und co: http://blogs.msdn.com/oldnewthing/archive/2004/08/18/216492.aspx

+0

Eigentlich im Allgemeinen eine angemessene Antwort, dies ist ein wenig irreführend, weil es tatsächlich Dinge gibt, die Sie tun können, um mehr als 4 GiB in einem 32-Bit-Prozess zu adressieren.Zum Beispiel unter Windows: "Address Windowing Extensions (AWE) ist eine Microsoft Windows-Anwendungsprogrammierschnittstelle, die es einer 32-Bit-Softwareanwendung ermöglicht, auf mehr physischen Speicher als auf virtuellen Adressraum zuzugreifen, selbst über die 4-GB-Grenze hinaus. 1] ", entnommen von http://en.wikipedia.org/wiki/Address_Windowing_Extensions –

1

Neuere i386-kompatiblen CPUs können mehr als 4 GB unter Verwendung von PAE-Modus adressieren. Windows XP begrenzt den Adressraum künstlich auf 4 GB, da es zu viele schlecht geschriebene Hardwaretreiber gibt, die davon ausgehen, dass alle DMA-Vorgänge im Speicher unter 4 GB ausgeführt werden. So wird etwa 1 GB des 4 GB Adressraums der Hardware zugeordnet, der Rest dem physischen RAM. Windows Server-Editionen haben diese Einschränkung nicht. Linux-Kernel, die PAE unterstützen, beschränken den Speicher ebenfalls nicht. Beide unterstützen bis zu 32GB, wenn ich mich richtig erinnere.

Ihre Anwendung ist abhängig von den Betriebssystemoptionen auf einen Adressraum von 2-3 GB begrenzt. Eine Anwendung kann effektiv mehr physikalischen RAM als diesen verwenden, indem sie Teile des Speichers innerhalb und außerhalb dieses Adressraums unter Verwendung von Adressenfenstererweiterungen oder zum Beispiel Speicherabbilddateien mit Fenstern versieht.

+0

PAE erhöht das Limit auf 2^36 Bytes, also 64 GiB. :) –