Kann ein 32-Bit-Betriebssystem alle 8 GB RAM + 20 GB Auslagerungsdateien belegen?


98

Was ich über 32-Bit-Betriebssysteme verstehe, ist, dass die Adresse in 32 Bit ausgedrückt wird, sodass das Betriebssystem höchstens 2 32 = 4 G Speicherplatz beanspruchen kann - ich nehme an, die Einheit besteht aus Bytes, also 4 GB.

Bedeutet dies, dass ein Computer mit einem 32-Bit-Betriebssystem (Windows oder Unix) mit mehr als 4 GB RAM + Auslagerungsdatei auf der Festplatte (z. B. 8 GB RAM und 20 GB Auslagerungsdatei) niemals "belegt" wird "?

Mit "verbraucht" meine ich, dass das Erhöhen des Arbeitsspeichers oder der Auslagerungsdatei die Leistung nicht verbessert. Natürlich ist es immer möglich, dass eine Anwendung weiterhin Speicher vom Betriebssystem anfordert, dies jedoch fehlschlägt.

Wenn dieses 32-Bit-Betriebssystem über 2 GB RAM und 2 GB Auslagerungsdatei verfügt, wirkt sich eine Vergrößerung der Auslagerungsdatei nicht auf die Leistung aus. Ist das wahr?


2
Nebenbei bemerkt, wenn Sie mehr als 4 GB RAM und nur ein 32-Bit-Betriebssystem haben, können Sie eine RAM-Disk erstellen. Dies ist eine Festplatte in Ihrem RAM, und Sie können den nicht verwendeten / nicht adressierten RAM verwenden, um ihn zu platzieren.
Simon Verbeke

10
Das kannst du nicht. Im gesamten Betriebssystem muss noch eine Ramdisk erstellt werden. Wenn das Betriebssystem den Speicher nicht nutzen kann, können Sie dort auch keine Ramdisk erstellen. (Es sei denn, Ihr BIOS kann eine Ramdisk erstellen, was selten vorkommt.)
AVee

1
Die kurze Antwort lautet "Ja". Obwohl einem Prozess normalerweise ein 32-Bit-Adressraum zugewiesen wird, kann das Betriebssystem selbst mehr als diesen verwenden (entweder durch Bankwechsel wie in den 80er Jahren oder durch Tricks zur Adresserweiterung als Intels PAE. Denken Sie auch daran, dass Sie mehr als ausführen Es kann sich jeweils um ein Programm handeln, das aus mehreren Prozessen besteht (Chrome ordnet Registerkarten unterschiedlichen Prozessen zu) .Das Betriebssystem selbst verwendet den Speicher beispielsweise zum Zwischenspeichern von Daten von lokalen Festplatten, sodass Sie bereits schneller auf Daten zugreifen können gebraucht.
rbanffy

Antworten:


145

Was ich über 32-Bit-Betriebssysteme verstehe, ist, dass die Adresse in 32 Bit ausgedrückt wird, sodass das Betriebssystem höchstens 2 ^ 32 = 4 GB Speicherplatz verwenden kann

Der Prozess kann höchstens 4 GB adressieren . Möglicherweise verwechseln Sie den Speicher mit dem Adressraum . Ein Prozess kann mehr Speicher als Adressraum haben. Dies ist völlig legal und in der Videoverarbeitung und anderen speicherintensiven Anwendungen durchaus üblich. Einem Prozess können Dutzende GB Arbeitsspeicher zugewiesen werden, und er kann nach Belieben in den Adressraum und aus dem Adressraum ausgelagert werden. Es können jeweils nur 2 GB in den Benutzeradressraum eingegeben werden.

Wenn Sie eine Garage für vier Autos in Ihrem Haus haben, können Sie immer noch fünfzig Autos besitzen. Sie können nicht alle in Ihrer Garage aufbewahren. Sie müssen einen zusätzlichen Speicher haben, um mindestens 46 davon zu speichern. Welche Autos Sie in Ihrer Garage und welche Sie auf dem Parkplatz unten auf der Straße aufbewahren, bleibt Ihnen überlassen.

Bedeutet dies, dass ein 32-Bit-Betriebssystem, sei es Windows oder Unix, niemals "Arbeitsspeicher verbraucht" wird, wenn der Computer über RAM + Auslagerungsdateien auf der Festplatte verfügt, die größer als 4 GB sind, z. B. 8 GB RAM und 20 GB Auslagerungsdateien?

Absolut heißt das nicht. Ein einzelner Prozess könnte mehr Speicherplatz verbrauchen! Auch hier ist die von einem Prozess belegte Speichermenge nahezu unabhängig von der von einem Prozess belegten Menge an virtuellem Adressraum. Genau wie die Anzahl der Autos, die Sie in Ihrer Garage aufbewahren, hängt auch die Anzahl der Autos, die Sie besitzen, nicht davon ab.

Darüber hinaus können zwei Prozesse nicht-private Speicherseiten gemeinsam nutzen . Wenn zwanzig Prozesse alle dieselbe DLL laden, teilen sich die Prozesse alle die Speicherseiten für diesen Code. Sie teilen sich nicht den Adressraum des virtuellen Speichers , sondern den Speicher .

Mein Punkt, falls es nicht klar ist, ist, dass Sie aufhören sollten, Gedächtnis und Adressraum als dasselbe zu betrachten, weil sie überhaupt nicht dasselbe sind.

Wenn dieses 32-Bit-Betriebssystem über 2 GB RAM und 2 GB Auslagerungsdatei verfügt, wirkt sich eine Vergrößerung der Auslagerungsdatei nicht auf die Leistung aus. Ist das wahr?

Sie haben fünfzig Autos und eine Garage für vier Autos und einen Parkplatz für 100 Autos die Straße hinunter. Sie vergrößern den Parkplatz auf 200 Plätze. Wird eines Ihrer Autos schneller, weil Sie jetzt 150 statt 50 zusätzliche Parkplätze haben?


26
Ich finde diese Antwort, um die vorliegende Frage nicht anzusprechen, und täusche in einigen Punkten fast.
Rig

48
@Rig: Genial, ich freue mich über deine konstruktive Kritik. Jetzt haben Sie die Möglichkeit , eine bessere Antwort zu schreiben und uns die Art der Antwort zu zeigen, die Sie für weniger trügerisch und sachdienlicher halten.
Eric Lippert

4
@BlueRaja: Ich vermute, dass Sie physischen Speicher mit Speicher verwechseln . Der physische Speicher ist nur eine Optimierung, die einen schnelleren Zugriff auf den Speicher ermöglicht. Ebenso wie Prozessor-Caches sind sie eine Optimierung, die einen schnelleren Speicherzugriff ermöglichen. Der Speicherplatz ist für alle Zwecke in der Auslagerungsdatei reserviert. Ob eine bestimmte Seite in der Auslagerungsdatei (1) zu einer virtuellen Speicheradresse zugeordnet oder (2) von der Festplatte auf physischen Speicher kopiert ist irrelevant für die Frage, ob es zugeordnet ist oder nicht.
Eric Lippert

4
@ BlueRaja: Raymond Chens Artikel zu diesem Thema könnte helfen. Er zeigt, wie 4 GB aus der Auslagerungsdatei zugewiesen werden; Das ist die Erinnerung, die der Prozess besitzt . Der Prozess kann nicht adressiert die ganze Sache auf einmal natürlich, aber es kann adressiert jede Seite durch die Abbildung eine Seite in eine nicht verwendete VM Seite, ist es für eine Weile, und verwirft es dann. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert

3
Diese Antwort wäre klarer, Eric, wenn Sie ausdrücklich angegeben hätten, dass Windows (und andere Betriebssysteme) es Ihnen ermöglichen, Speicher zu "reservieren", ohne ihn tatsächlich in Ihrem virtuellen Adressraum zu haben, und dann die offensichtliche Frage zu beantworten: "Wie geht es Ihnen?" adressiere es?". Ich denke, die Antwort darauf lautet: "Es gibt eine Art Seiten-ID, mit der Sie darauf verweisen, um sie in den virtuellen Adressraum zu pagen, und dann können Sie sie dort adressieren." Ihre Antwort sagt nicht :)
Timwi

67

Es ist wahr, dass die CPU nur maximal 4 GB RAM adressieren kann. Gegenwärtige CPUs verwenden jedoch eine MMU ( Speicherverwaltungseinheit ), um prozessspezifische Speicheradressen in physikalische Speicheradressen zu übersetzen.

Diese MMU wird für alle Arten von Tricks verwendet, von der Speicherisolation (Prozess A kann den Speicher von Prozess B nicht manipulieren) bis zur gemeinsamen Speichernutzung (Prozess A kann auf denselben physischen Speicherbereich wie Prozess B zugreifen und Daten auf diese Weise austauschen).

Obwohl 32-Bit-CPUs nur 4 GB Speicher pro Prozess unterstützen, können bei Verwendung der physikalischen Adresserweiterung bis zu 64 GB RAM adressiert werden . Dies ermöglicht es Prozess A, die ersten 4 GB Speicher zu verwenden, während Prozess B die nächsten 4 GB verwendet. Insgesamt werden mehr als 4 GB physischer Speicher verwendet, aber die Gesamtmenge an Speicher, die ein einzelner Prozess verwendet, ist immer noch auf 4 GB begrenzt .

PAE wird unter Linux seit Kernel-Version 2.3.23 und auf einigen 32-Bit-Versionen von Windows Server unterstützt, jedoch nicht unter 32-Bit-Versionen von Windows XP, Vista oder 7.

Wenn Ihre CPU PAE nicht unterstützt, sind Sie auf 4 GB physischen Speicher beschränkt (oder weniger, abhängig von anderen Faktoren).

Beachten Sie, dass Ihr Betriebssystem unabhängig von der CPU, die PAE unterstützt, immer noch Teile des physischen Speichers auf die Festplatte (Auslagerungsdatei) räumen kann. Auf diese Weise können Sie mehrere Prozesse starten, die zusammen mehr als 4 GB verwenden. Die einzige Auswirkung von PAE besteht darin, ob Sie die 4 GB von Prozess B im physischen Speicher behalten können, während Prozess A ausgeführt wird.


bedeutet es, wenn es nicht unterstützt, was ich oben gesagt habe es richtig?

10
Windows XP unterstützt PAE (beginnend mit SP2, glaube ich), ignoriert jedoch RAM über 4 GB, auch wenn der Computer PAE unterstützt. siehe hier . Es wird für die hardwarebasierte Verhinderung der Datenausführung verwendet. Das NX / XD-Bit ist nur in einem PAE-Seitentabelleneintrag verfügbar, nicht in einem "regulären" Seitentabelleneintrag.
Wyzard

Der Chipsatz kann auch ein begrenzender Faktor dafür sein, wie viel Speicher unterstützt / verwendet werden kann, unabhängig davon, welches Betriebssystem oder welcher Hack Sie auswählen.
Moab

5
Ich würde hinzufügen, dass der Grund, warum Consumer-Versionen von 32-Bit-Fenstern> 4 GB RAM nicht unterstützen, darin besteht, dass festgestellt wurde, dass eine erhebliche Anzahl von Hardwarelaufwerken mit so viel Speicher nicht richtig funktioniert. und da zu der Zeit> 4 GB RAM außerhalb von Servern / Ultra-High-End-Workstations äußerst selten waren, waren die meisten Unternehmen, die die Treiber gewartet haben, nicht daran interessiert, Geld für die Aktualisierung von Treibern auszugeben, die nur von 0,1% ihrer Kunden verwendet würden.
Dan Neely

6
@DanNeely das Betriebssystem funktioniert Unterstützung hat für den Speicher, es ist begrenzt aufgrund von Lizenzproblemen . Ich bin damit einverstanden, dass dies ein Hack von Drittanbietern ist, aber nur für Consumer-Varianten von Windows. Serverbasierte Windows-Distributionen ab Windows 2000 unterstützen mehr als 4 GB Arbeitsspeicher (siehe erster Link).
Durchbruch

15

Was speziell die 32-Bit-Windows-Varianten anbelangt, so werden seit Windows 2003 mehr als 4 GB RAM unterstützt (und Sie können auch einen Kernel-Hack für Windows 7 durchführen , damit Sie Ihren gesamten RAM in 32-Bit verwenden können). Dies ist jedoch mit Kosten verbunden, wie Sie im ersten Teil Ihrer Frage dargelegt haben.

In einem 32-Bit-Betriebssystem entspricht die Größe eines Zeigers (Speicheradresse) der Wortlänge der CPU (32 Bit), wodurch (wie bereits erwähnt) 2 ^ 32 = 4 GB Speicherplatz zur Verfügung stehen. Windows verwendet außerdem einen "virtuellen Speicher" für Anwendungen, sodass jede Anwendung über einen eigenen Speicherbereich verfügt.

Da jeder Zeiger nur 32 Bit breit ist, können die Zeiger jeder Anwendung nur bis zu 4 GB Arbeitsspeicher adressieren, obwohl das System mehr als 4 GB RAM unterstützen kann. Soweit ich weiß, ist dies die einzige Einschränkung bei der Verwendung von mehr als 4 GB RAM in einem 32-Bit-Betriebssystem. Insgesamt können Sie viele Anwendungen mit mehr als 4 GB RAM kombinieren, aber ein bestimmter Prozess kann nur bis zu 4 GB zuweisen / darauf zugreifen.


Angenommen, Sie haben ein Programm, das 2 GB RAM verwendet. Wenn Sie 10 Instanzen dieses Programms haben, sind das 20 GB. Alle 8 GB RAM werden verbraucht, sowie weitere 12 GB der Auslagerungsdatei. Ja, unter 32-Bit-Betriebssystemen ist es mehr als möglich, diesen Speicher zu belegen.

Wenn dieses 32-Bit-Betriebssystem über 2 GB RAM und 2 GB Auslagerungsdatei verfügt, wirkt sich eine Vergrößerung der Auslagerungsdatei nicht auf die Leistung aus. Ist das wahr?

Wenn Sie die Größe der Auslagerungsdatei erhöhen, wird die Leistung in der Regel nicht erhöht (es sei denn, RAM und Auslagerungsdatei sind auf das absolute Minimum eingestellt oder Ihr Computer ist ständig in Trümmern). Es wird jedoch verhindert, dass Ihrem Computer der (virtuelle) Speicher ausgeht. Wann immer irgendetwas in die Auslagerungsdatei gelöscht werden muss, erleiden Sie bereits einen enormen Leistungseinbruch (da die Festplatte um Größenordnungen langsamer ist als Ihr RAM).


Von den 4 GB Adressraum, die jeder Prozess erhält, stehen dem Programm nur 2 GB zur Verfügung. Die anderen 2 GB sind für den Kernel reserviert. Mit der Startoption / 3GB können einige Programme mehr RAM verwenden.
Wyzard,

1
@Breakthrough: "Wenn Sie die Auslagerungsdatei vergrößern, wird die Leistung niemals gesteigert." Ich glaube nicht, dass dies der Fall ist. Wenn zum Beispiel mehr Swap vorhanden ist, kann das Betriebssystem unbenutzte Programmdaten aggressiver austauschen und den freien RAM-Speicher zum Beispiel für das Zwischenspeichern von Festplatten verwenden. In einigen Konfigurationen kann dies zu einer besseren Leistung führen. Es gibt eine nette Antwort auf ServerFault, warum eine Auslagerungsdatei wichtig ist, die diese Probleme anspricht
sleske

2
Seien Sie vorsichtig mit pauschalen Aussagen wie "Wenn Sie die Auslagerungsdatei vergrößern, wird die Leistung niemals gesteigert" . Es ist durchaus möglich, dass eine Auslagerungsdatei zu klein ist, um mehr Speicherplatz zu schaffen als eine größere Auslagerungsdatei! Siehe Antworten und Kommentare in dieser Frage .
Mark Booth

1
@sleske Guter Punkt, ich habe es aktualisiert, um eher eine "normalerweise nicht" Art von Sache zu sein. Ich bin damit einverstanden, dass dies einen großen Unterschied für einen Server bedeuten kann. Für die meisten Leute war der Punkt, den ich herausfinden wollte, der, dass sie besser dran sind, nur mehr RAM zu bekommen (da die Leistung beim Paging so ziemlich so langsam ist) wie es nur geht).
Durchbruch

-1

Wenn ein Prozessor als 32-Bit-Prozessor bezeichnet wird, bedeutet dies, dass er mit 32-Bit-Zahlen unter Verwendung eines einzigen Befehls arbeiten kann. Dies hat wenig mit der Breite des Adressbusses zu tun, der seit der Veröffentlichung von Pentium Pro im Jahr 1995 auf Intel-Architektur 36-Bit beträgt .

Die berühmte Beschränkung auf 4 GB beruht auf der Tatsache, dass die meisten PC-Programme ein flaches Speichermodell verwenden, bei dem jedes Byte des Speichers mit einem Zeiger adressiert werden kann. Da ein Zeiger in ein zu verwendendes Register passen sollte und die Register 32 Bit breit sind, sind Sie auf 4 GB beschränkt.


Dies ist falsch, wie in anderen früheren Antworten oben ausgeführt.
ChrisInEdmonton

Könnten Sie auf eine bestimmte Tatsache hinweisen, die ich falsch verstanden habe?
Dmitry Grigoryev

1
Ein einzelner Prozess kann mehr als 4 GB verwenden. In früheren Antworten wurde insbesondere darauf hingewiesen, dass ein Prozess mehr Speicher als Adressraum haben kann.
ChrisInEdmonton

2
Siehe zum Beispiel blog.superuser.com/2011/04/23/… Jetzt können Sie zwar nicht mehr als 4 GB gleichzeitig verwenden, aber ein einzelner Prozess kann die Zuordnung des Speichers aufheben und neu zuordnen, sodass mehr als verwendet werden kann 4 GB in einem einzigen Prozess, es gibt nur ein bisschen Buchhaltung. Dieser Blogbeitrag ist eher Windows-spezifisch. Ich habe Datenbankserver mit> 4 GB zugewiesenem Speicher auf 32-Bit-Linux-Installationen ausgeführt. Heutzutage würden Sie natürlich nur 64-Bit-Linux ausführen.
ChrisInEdmonton

1
OK, ich entschuldige mich. Ich habe nicht über die Möglichkeit mmapnachgedacht , zusätzlichen Speicherplatz zu schaffen.
Dmitry Grigoryev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.