Also echt schlimm, was für ein Unsinn von manchen Leuten hier über die Windows-Speicherverwaltung erzählt wird, von Leuten, wo man meinen sollte, dass sie es besser wissen.
Ich glaube es wird echt mal Zeit für eine FAQ zu dem Thema...
noxon schrieb:
Er "verschenkt" aber Speicher aus dem Kernelspace und nicht aus dem Userspace. Der Kernelspace ist eh viel zu groß. Da würde selbst 1 GB ausreichen. Worauf es ankommt sind die unteren 2 GB.
Quatsch. Er verschenkt einfach nutzbaren Arbeitsspeicher, da im Kernelspace eh wie du selbst sagst wohl weniger als 1 GB reichen würden verschenkt er sogar defacto Userspace. Aber es gibt hier keine strikte Trennung.
Den einzigen Nachteil, den man durch die 750 MB weniger Kernelspace hat ist, dass der SuperFetch Cache kleiner ist.
Quatsch. Wie gesagt, Kernelspace kann immer bis zu 2 GB RAM einnehmen. Zudem wage ich zu bezweifeln dass der SuperFetch Cache in den Kernelspace wandert... aber in dem Punkt kann ich mich irren.
keshkau schrieb:
Nur wenn man spezielle Software hat, die unendlich viel RAM nutzen kann, sieht das anders aus.
Naja es reicht schon 2 Programme zu nutzen die viel RAM brauchen und schon lohnen sich 3 GB RAM unter Windows locker...
noxon schrieb:
Ich habe aber auch schon von Microsoft ein Statement gelesen, warum es in Vista nicht mehr möglich ist, dass Verhältnis zwischen User- und Kernelspace manuell zu verändern. In XP ging das ja noch mit dem /3GB Parameter, was im Übrigen zeigt, wie wenig Kernelspace man wirklich braucht. Dort hat selbst (1 GB Ram - Adressspace für die Hardware) ausgereicht um XP und seine Treiber zu fassen. Bei Vista wird das etwas mehr sein, aber ich denke, dass alles zusammen auch nicht mehr als 500 MB belegen wird. Ich kenne leider kein Programm, dass dies anzeigen würde.
In Vista wurde das benutzerdefinierte Aufteilen aus Stabilitätsgründen allerdings gar nicht mehr gestattet und dort bleibt die 50/50 Trennung bestehen. Das heißt, dass man bei 4 GB ganze 2 GB für den Kernel und die Treiber zur Verfügung hat, was völlig überdimensioniert ist. Da kann man ruhig ein paar Adressen für die restliche Hardware spedieren und dafür auf ein paar 100 MB Arbeitsspeicher verzichten.
Der Userspace bleibt davon unangetastet. Im Übrigen ist es auch ein Unterschied, ob ich 3 GB im System habe oder 4 GB wovon ich nur 3 GB nutzen kann.
Im ersten Fall hat man nur 1,5 GB im Userspace und im zweiten Fall 2 GB.
Ich sehe es also als absolut sinnvoll an bei 4 GB ein 32 Bit System zu verwenden. Damit bekommt man deutlich mehr Anwendungen in den Speicher als bei einem 64 Bit System, trotz des vermeindlich größeren Arbeitsspeichers.
@Mods: Entschuldigung für das große Zitat...
@noxon: Also, du hast keine Ahnung von der
virtuellen Speicherverwaltung von Windows.
Die 4 GB von denen du sprichst ist ein
virtueller Adressraum. Der ist bei jedem 32-Bit-Windows seit Windows 95 so, selbst bei Rechnern mit nur 16 MB RAM war das schon so. Unter Win32 bekommt
jeder Prozess einen
virtuellen Adressraum von 4 GB RAM, der wie in dem angesprochenen Verhältnis in 2 GB RAM Userspace und 2 GB RAM Kernelspace aufgeteilt wird. Defacto kann also ein Win32-Prozess nur 2 GB RAM nutzen. Entgegen dem Blödsinn, den man so oft liest, teilen sich verschiedene Prozesse diesen 2 GB Userspace nicht.
Der Kernelspace, welcher einen 2 GB Adressraum einnimmt, belegt physikalisch aber auch nur so viel Arbeitsspeicher, wie er auch wirklich benötigt - und lässt sich wenn nicht benötigt sogar auslagern, gerade Windows-eigene DLL-Dateien lassen sich sehr gut auslagern, weil sie in einem Dateiformat vorliegen, welches der virtuellen Speicherverwaltung unter die Arme greift (Memory Mapped Files).
Ich bitte euch inständig endlich mal den Unterschied zwischen "Arbeitsspeicher" und "virtuellem Adressraum" zu erkennen.
Der "Userspace" von 2 GB steht jedem Prozess zur Verfügung
unabhängig vom tatsächlich verbauten Arbeitsspeicher.
Der "Kernelspace" von 2 GB stellt der obere Bereich des virtuellen Adressraum eines jedes Prozesses dar. Der Kernelspace ist für jeden Prozess identisch.
Reicht der verbaute Arbeitsspeicher nicht aus für die Summe der Speicheranfragen, so wird eben ausgelagert.
Windows-Systemdateien wandern im Übrigen meist nicht in die Auslagerungsdatei sondern werden lediglich aus dem Speicher geworfen und bei Bedarf wieder eingelagert, das gilt auch für andere ausführbare Dateien/DLL-Dateien/etc welche als sogenannte Memory Mapped Files compiliert/organisiert wurden.
Wer mir nicht glaubt sollte sich mal folgende Fragen stellen:
- Wie sollte denn sonst Windows XP bei einem Rechner mit 512 MB RAM (oder weniger) hochfahren, wenn der Kernelspace immer 2 GB RAM einnehmen würde?
- Wieso sollte es Server-Varianten von Windows geben die deutlich mehr als 4 GB RAM adressieren können (bis zu 64 GB) - wenn in der Summe alle Prozesse nur 2 GB RAM und in der Summe der Kernel 2 GB RAM verwenden könnte? (Alternativ auch 3 GB / 1 GB)
Edit:
Und der legendäre "/3GB"-Schalter bringt auch nur dann etwas, wenn man entweder Programme hat, die damit umgehen können und tatsächlich mehr als 2 GB Userspace für sich brauchen, oder aber man Programme dementsprechend "hackt" (eben ein entsprechendes Bit im EXE-Header setzt) und das Programm auch tatsächlich mehr als 2 GB RAM anfordert.