Korrigiere mich, dass ich falsch liege.
Gern. Sind Sie bereit?
Q1) Ich verstehe, dass wir im 32-Bit-Modus einen virtuellen Adressraum von 4 GB erhalten.
Richtig.
Dies liegt daran, dass 32-Bit-Windows nur 4 GB physischen Arbeitsspeicher unterstützen kann.
Nein, die Größe des virtuellen Speichers ist unabhängig von der Größe des physischen oder installierten Speichers.
Diese Größen sind nur gleich, weil beide Werte (für Adressen) verwenden, die 32 Bit breit sind. Ein Prozessor könnte so ausgelegt sein, dass er eine virtuelle Adressgröße hat, die sich von seiner physikalischen Adressgröße unterscheidet. IIRC wurde bereits gemacht, als die Hardwaredimensionen und -kosten viel höher waren als heute.
F2) Jeder Prozess erhält seinen eigenen privaten Adressraum von 4 GB.
Ja, ein virtueller Adressraum.
2 GB Benutzermodus und 2 GB Kernel.
Nein, "Benutzermodus" bezieht sich auf den Betriebszustand der CPU, dh CPU-Modi. Der Speicher hat keinen "Benutzermodus" (noch "Kernelmodus").
Der virtuelle Speicher ist in Benutzer- und Kernelbereich unterteilt.
Ordnet der Prozess seinen gesamten Code dem Benutzermodus zu, und die für die Kommunikation des Prozessors mit dem Prozessor zur Ausführung des Codes benötigten BS-Komponenten werden im Kernel-Modus geladen.
Diese Frage kann nur sinnvoll sein, wenn "Modus" durch "Leerzeichen" ersetzt wird.
Der Kernel wird beim Booten in den physischen Speicher geladen.
Die Ausführung des Kernels steuert das System, z. B. das Starten und Verwalten von Prozessen.
Der Kernel wird in den virtuellen Adressraum jedes Prozesses abgebildet. Aus diesem Grund ist ein Teil des virtuellen Speichers des Prozesses "Kernel Space".
Der Programmcode und die (gemeinsam genutzten) Bibliotheken werden dem virtuellen Speicher im Benutzerbereich zugeordnet.
Das Betriebssystem "kommuniziert nicht mit dem Prozessor" (auch kein Prozess).
Der Prozessor / CPU führt Anweisungen aus. Es gibt keine "Kommunikation" mit der CPU.
Ein Prozess ist ein konzeptioneller Job oder eine Aufgabe, dem Ressourcen wie virtueller und physischer Arbeitsspeicher sowie geplante CPU-Zeit zugewiesen werden.
Die einzige Interaktion zwischen einem Prozess und dem Prozessor / CPU besteht in der Ausführung von Anweisungen für diesen Prozess. Die Interaktion zwischen dem Kernel und dem Prozessor / CPU ist die Ausführung von Anweisungen für diesen Kernel und das Weiterleiten von Ausnahmen und Interrupts.
F3) Wenn ein Prozess einen eigenen privaten 4-GB-Speicherplatz erhält.
Es gibt kein "wenn" . Jeder Prozess erhält 4 GB virtuellen Speicher.
Wenn ich 3 Prozess lade, beträgt der Adressraum insgesamt 12 GB. Habe ich ein Leistungsproblem, da ich nur 4 GB RAM habe?
Überhaupt nicht wahrscheinlich, da typische Prozesse selten ihren gesamten virtuellen Speicher verwenden. Und selbst wenn es einen Backup-Speicher gibt (z. B. Auslagerungsdatei oder Auslagerungsspeicher), um Situationen zu behandeln, in denen weniger physischer Speicher als der virtuelle Adressraum vorhanden ist (der ursprüngliche Grund für die Verwendung des virtuellen Speichers).
Die virtuelle Adresse ist jedoch so ausgelegt, dass sie den Prozessbedarf bei weniger RAM erfüllt.
Sie meinen wahrscheinlich virtuellen Speicher, nicht "virtuelle Adresse" .
SO meine eigentliche Frage: Wenn ein Prozess (eine einzelne Prozessanwendung) geladen wird, ordnet er den gesamten Code der virtuellen Adresse mit 4 GB zu, unabhängig davon, ob die Anwendung derzeit nur einen bestimmten Teil des gesamten Codes ausführt.
(Warum wird Ihre "echte Frage" nicht mit einer Nummer versehen?)
Ich habe keine endgültige Antwort, würde aber erwarten, dass das gesamte Programm geladen würde, um Relokationen durchzuführen und externe Verknüpfungen aufzulösen ( zB zu Bibliotheken).
Was geladen wird, muss zugeordnet werden, dh physischer Speicher zugewiesen.
Was ich verstehe ist, dass, wenn ein Prozess gestartet wird, der gesamte Code in den virtuellen Adressraum des 2-GB-Benutzermodus geladen wird und die restlichen 2 GB OS-Kernel-Dateien laden.
Sie missbrauchen wieder "Benutzermodus" .
Das Laden des Kernelcodes wird beim Booten ausgeführt, nicht wenn ein Prozess gestartet wird.
Wenn Sie nun Seitentabellen verwenden, wird die virtuelle Adresse im RAM und auf der Festplatte der physischen Adresse zugeordnet. Werden alle virtuellen 4-GB-Adressen dem physischen 4-GB-RAM zugeordnet und verbleiben in der Auslagerungsdatei?
Nein, Seitentabellen ordnen nur virtuellen Speicher (in Seiteneinheiten) dem physischen Speicher zu. Es gibt keine Zuordnung zu "Festplatte" . Das klingt nach einem weit verbreiteten Missverständnis über die Funktionsweise der Auslagerungsdatei und des virtuellen Speichers.
Die Seitendatei ist ein Sicherungsspeicher. Sie enthält vorübergehend Inhalte der virtuellen Speicherseiten, die nicht speicherresident sein können (dh zugewiesener physischer Speicher).
Wenn ich mich weigere, die Seitendatei zu verwenden, bedeutet dies, dass nur ein Prozess mit einer virtuellen Adresse von 4 GB unter 32-Bit-Betriebssystemen mit 4 GB ausgeführt werden kann.
Nein, da ein Prozess normalerweise nicht den gesamten virtuellen Adressraum verwendet und somit keine physischen Arbeitsspeicher von 4 GB benötigt.
Ich habe gesehen, dass mehr als zwei Dutzend Prozesse auf einem 32-Bit-Linux-System mit nur 512 MB RAM und ohne Auslagerungsdatei ausgeführt wurden.