Speicherverwaltung in 32-Bit-Windows

633
Aman Yadav

In einem 32-Bit-System ist der virtuelle Adressraum von 4 GB für das gesamte Betriebssystem oder für den individuellen Prozess?

Wenn es für das gesamte Betriebssystem ist, führt das Betriebssystem jeden Prozess vor, dass es über einen eigenen Adressraum von 4 GB verfügt.

Wenn ein Prozess gestartet wird, verwendet er den gesamten virtuellen Adressraum. Ist es das, was wir als virtuelle Adresse bezeichnen oder reservieren?

Wie können wir herausfinden, wie viel virtueller Adressraum ein Prozess benötigt? Was ist, wenn ein Prozess mehr virtuelle Adresse als 3 GB benötigt (System mit erweitertem Benutzermodus)?

0
Wenn ich 3-Prozess auf 32-Bit-Fenstern, die mit den Anforderungen 1 GB RAM ausgelegt sind, ausführen. Wird ein Speicherzuordnungsproblem auf einem 2 GB RAM-System auftreten? Wenn nicht, wie können Fenster dies erreichen? Wird dem gesamten virtuellen Adressraum eines Prozesses eine physische Adresse im physischen Speicher zugewiesen, oder handelt es sich um eine träge Zuordnung, bei der die Zuordnung nur dann erfolgt, wenn auf diese virtuelle Adresse zugegriffen wird? Aman Yadav vor 6 Jahren 0
Bitte erweitern Sie Ihre Fragen nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. Scott vor 6 Jahren 1

3 Antworten auf die Frage

0
cybernard

Nein, es gibt keine Täuschung, Sie haben maximal 4 GB RAM für das gesamte Betriebssystem.

Sie können PAE aktivieren. Wenn dies funktioniert, können Fenster manchmal mehr als 4 GB erkennen. Noch nicht annähernd so viel wie ein 64-Bit-Betriebssystem.

0
sawdust

Pro Prozess wird ein virtueller Adressraum von 4 Gigabyte erstellt, der vom Betriebssystem und vom Prozess gemeinsam genutzt wird. Das OS entscheidet über die Grenze (die für alle Prozesse festgelegt ist).
Das Betriebssystem ist in jedem virtuellen Adressraum vorhanden.
IOW der "Prozess [hat] seinen eigenen 4 GB Adressraum", muss ihn jedoch mit dem Betriebssystem gemeinsam nutzen und kann den Teil des virtuellen Speichers, der dem Kernel gehört, nicht lesen, schreiben oder ausführen.

Wenn ich 3-Prozess auf 32-Bit-Fenstern, die mit den Anforderungen 1 GB RAM ausgelegt sind, ausführen. Wird ein Speicherzuordnungsproblem auf einem 2 GB RAM-System auftreten? Wenn nicht, wie können Fenster dies erreichen?

Ein Benutzerprozess hat nicht das Recht, physischen Speicher zu erfordern, der resident bleibt (dh nicht ausgelagert werden kann).
Da bei virtuellen Speichersystemen Auslagerungen (mit einer Auslagerungsdatei oder einem Auslagerungsbereich auf einem Massenspeichergerät) verwendet werden, gibt es normalerweise keine Probleme, wenn mehrere Prozesse mit einem virtuellen Adressraum von 4 GB ausgeführt werden, bei denen der physische Arbeitsspeicher kleiner als die virtuelle Größe ist.

Es ist möglich, eine Out-of-Memory-Bedingung (auch bekannt als OOM) zu erstellen, wenn Prozesse einen großen Speicherbedarf erzeugen und nicht genügend physischer Speicher und Auslagerungsspeicher vorhanden sind.

Wird dem gesamten virtuellen Adressraum eines Prozesses eine physische Adresse im physischen Speicher zugewiesen, oder handelt es sich um eine träge Zuordnung, bei der die Zuordnung nur dann erfolgt, wenn auf diese virtuelle Adresse zugegriffen wird?

Es ist niemals erforderlich, dass ein gesamtes Programm physischen Speicher zugewiesen und in den Speicher geladen wird.
Die Abbildung des physischen Speichers für einen Prozess richtet sich nach den Bedürfnissen.
Ein Prozess muss nur dann speicherresident sein, wenn er tatsächlich ausgeführt wird, und unabhängig von seiner Größe muss nur die eine Seite des Codes, auf die aktuell vom Programmzählerregister verwiesen wird, und alle Seiten von Datenreferenzen müssen tatsächlich resident sein .

Ja, es gibt also eine "faule Zuordnung", bei der das Mapping nur durchgeführt wird, wenn auf diese virtuelle Adresse zugegriffen wird.

0
phuclv

In einem 32-Bit-System ist der virtuelle Adressraum von 4 GB für das gesamte Betriebssystem oder für den individuellen Prozess?

Jeder Prozess verfügt über einen eigenen virtuellen 4-GB-Adressraum, von dem 2 GB für den Kernel-Bereich bestimmt sind. In 32-Bit-Windows können Sie LARGEADDRESSAWAREzusammen mit der /3GBBoot-Option den Kernel-Speicherplatz auf 1 GB reduzieren

Das Betriebssystem erhält einen breiteren Adressbus mit PAE, so dass es tatsächlich mehr als 4 GB RAM adressieren kann.

Wenn es für das gesamte Betriebssystem ist, führt das Betriebssystem jeden Prozess vor, dass es über einen eigenen Adressraum von 4 GB verfügt.

Hier gibt es nichts zu täuschen. Virtuelle Adresse! = Physikalische Adresse . Jeder Prozess hat unabhängig von der Größe des physischen Arbeitsspeichers immer einen eigenen Adressraum von 4 GB, so dass er die Daten anderer Prozesse nicht stören kann. Selbst wenn Sie nur 128 MB RAM haben, haben Sie immer noch einen Adressraum von 4 GB. Das liegt daran, dass Zeiger in 32-Bit-Programmen immer 32 Bit breit sind. Der Adressraum wird nicht nur für RAM, sondern auch für MMIO-Geräte verwendet, und der Prozess kann eine Datei auch direkt in seinen Adressraum abbilden

Wenn das System über mehr als 4 GB RAM verfügt, kann der Prozess AWE verwenden, um höhere Adressen einem 4 GB-Fenster zuzuordnen, damit auf den gesamten verfügbaren Speicher zugegriffen werden kann. Oder es können auch mehrere Prozesse wie Adobe Premiere CS4 erstellt werden, um mehr als nur einen Arbeitsspeicher zu verwenden

Wenn ein Prozess gestartet wird, verwendet er den gesamten virtuellen Adressraum. Ist es das, was wir als virtuelle Adresse bezeichnen oder reservieren?

Der Prozess hat 2-4 GB Adressraum, aber natürlich hängt es von dem Prozess ab, zu entscheiden, wie viel Speicher er benötigt. Wenn ein Prozess mehr Speicher als verfügbar anfordert, aber nicht tatsächlich in diesen Bereich geschrieben hat, verbraucht er tatsächlich keinen Speicher. Das nennt man über zu begehen und wird in Linux erlaubt aber Windows erlaubt es Ihnen nicht mehr als insgesamt RAM + Auslagerungsdatei zuzuordnen verfügbar

Wie können wir herausfinden, wie viel virtueller Adressraum ein Prozess benötigt? Was ist, wenn ein Prozess mehr virtuelle Adresse als 3 GB benötigt (System mit erweitertem Benutzermodus)?

Der virtuelle Adressraum ist immer 2/3/4 GB. Sie können nicht mehr als diesen haben, wenn Sie nicht zu einer Architektur mit einer virtuellen Adresse mit mehr als 32 Bit wechseln. Die Anforderung von mehr als 3 GB RAM ist ein anderes Problem. In diesem Fall gibt es mehrere Lösungen

  • Führen Sie den Vorgang in 64-Bit-Windows mit aus LARGEADDRESSAWARE. In diesem Fall kann auf 4 GB Speicher zugegriffen werden
  • Verwendet mehr als einen Prozess, wie im obigen Premiere CS4-Beispiel
  • Verwenden Sie AWE wie oben erwähnt
  • Schreiben Sie den Algorithmus so um, dass er weniger Speicher benötigt, falls Sie über den Quellcode verfügen
  • Verwenden Sie die 64-Bit-Version des Programms

Wenn ich 3-Prozess auf 32-Bit-Fenstern, die mit den Anforderungen 1 GB RAM ausgelegt sind, ausführen. Wird ein Speicherzuordnungsproblem auf einem 2 GB RAM-System auftreten?

Normalerweise gibt es kein Problem, da einige davon in die Auslagerungsdatei verschoben werden können. Aber es wird natürlich viel langsamer

Wenn nicht, wie kann Windows dies erreichen? Wird dem gesamten virtuellen Adressraum eines Prozesses eine physische Adresse im physischen Speicher zugewiesen, oder handelt es sich um eine träge Zuordnung, bei der die Zuordnung nur dann erfolgt, wenn auf diese virtuelle Adresse zugegriffen wird?

Die gesamte virtuelle Adresse wird nicht linear als großer Block in den physischen Adressraum abgebildet . Der Speicher wird in Seiten abgebildet, daher befinden sich im Adressraum eines Prozesses wie diesem viele undefinierte Adressen

pagetable

Darüber hinaus werden einige physische Seiten in mehreren virtuellen Adressräumen angezeigt, sodass Prozesse ihre Daten gemeinsam nutzen können. Einige freigegebene Seiten, die als schreibgeschützt markiert sind, werden automatisch geklont, wenn zum Speichern in den Speicher geschrieben wird. Das nennt man Copy-on-Write

Sie müssen zuerst den virtuellen Speicher lesen