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?
Antworten:
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.
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.
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?
quelle
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.
quelle
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 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).
quelle
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.
quelle
mmap
nachgedacht , zusätzlichen Speicherplatz zu schaffen.