Auf der NT-Plattform ist der virtuelle Adressraum von 4 GB standardmäßig in zwei Teile unterteilt, die unteren 2 GB für Prozessadressen und die oberen 2 GB für die Systemnutzung.
Dieser Adressraum ist virtuell und wird nicht durch die RAM-Größe beeinflusst. Der CPU- und OS-Speichermanager ordnet bei Bedarf RAM-Bereiche in den virtuellen Adressraum ein. Dies ist sehr komplex und wird hier nicht beschrieben. Dies war eine Design-Entscheidung, die im Hinblick auf Leistung, Sicherheit und Zuverlässigkeit getroffen wurde.
Jeder Prozess verfügt über einen eigenen privaten Adressraum von 2 GB, es gibt jedoch nur einen Systemadressraum. Prozesse werden in ihrem eigenen privaten Adressraum isoliert und können andere nicht einmal sehen. Es ist vorgesehen, bei Bedarf die Adresse zwischen zwei oder mehr Prozessen zu teilen. Der Systemadressraum ist für normale Prozesse gesperrt und nur für Kernel-Komponenten wie das Betriebssystem selbst und Gerätetreiber zugänglich. Wenn ein Prozess in die Irre geht, kann er sich nur selbst verletzen. andere Prozesse und das Betriebssystem sind davon nicht betroffen.
Aber warum nicht dem System einen eigenen privaten Adressraum geben, genau wie bei Prozessen? Dadurch könnte der gesamte Adressraum von 4 GB für das System und die einzelnen Prozesse verfügbar sein. Das hätte getan werden können - aber es gab ein Problem.
Angenommen, das wurde getan. Der laufende Prozess hätte vollen Zugriff auf seinen eigenen Code und seine eigenen Daten und alles scheint gut zu sein. Was aber, wenn dieser Prozess einen Betriebssystemaufruf ausführt, der Zugriff auf den Systemadressraum erfordert, z. B. für einen E / A-Vorgang? Oder was passiert, wenn ein Interrupt vom Kernel verarbeitet werden muss?
Nur der Adressraum des laufenden Prozesses ist für die CPU sichtbar. Was ist zu tun? Die Lösung besteht darin, einen Kontextwechsel durchzuführen, der den Systemadressraum in Sicht bringt. Das Betriebssystem kann dies ziemlich effizient, aber es braucht Zeit. Wenn häufig auf den Systemadressraum zugegriffen werden muss, wäre der Aufwand für Kontextwechsel zu groß und die Leistung wird beeinträchtigt.
Es musste einen besseren Weg geben.
Die Lösung bestand darin, den gesamten Adressraum von 4 GB in zwei Teile von jeweils 2 GB zu unterteilen. Bearbeiten Sie den Adressraum in den unteren 2 GB und das System in den oberen. Dadurch kann der Systemadressraum immer im Gültigkeitsbereich sein und jederzeit ohne Kontextwechsel verfügbar sein. Designentscheidungen werden häufig aus praktischen Gründen getroffen.
2 GB scheinen jetzt sehr klein und restriktiv zu sein, aber es war riesig, als NT 1993 veröffentlicht wurde. Und vergessen Sie nicht, dass jeder Prozess seine eigenen 2 GB hat.