GloomY
2005-03-05, 13:21:53
Bezüglich 64 Bit CPUs und Betriebssystemen (beziehungsweise der Knappheit der 32 Bit "Kollegen") bin ich gerade am Überlegen, in welchen Situationen mehr virtueller Adressraum verbraucht (belegt) wird, als physischer Speicher genutzt wird. Vielleicht kann mir da mal der eine oder andere auf die Sprünge helfen.
Dass grundsätzlich die Hälfte des virtuellen Adressraums durch den Kernel reserviert ist, ist sowieso klar, jedoch eine grundsätzliche Gegebenheit. Ich wollt's natürlich hier nur der Vollständigkeit halber erwähnen.
Bisher sind mir folgende Situationen eingefallen:
memory mapped I/O (PCI-Geräte, AGP- usw.)
Hier wird virtueller Adressraum für das Adressieren von Speicher(bereichen) von Erweiterungskarten benutzt. Physischer RAM-Speicher wird gar nicht belegt.
memory mapped files
Statt dem üblichen "open(...), read/write, close(...)" mit einer Datei wird ein Adressbereich reserviert, als ob die Daten schon im Speicher liegen würden. Bei Zugriff darauf gibt es einen Page Fault und das OS lädt die Datei in diesen Speicherbereich hinein. Hier wird zwar physikalischer Speicher verbraucht, aber nur soviel, wie Bereiche der Datei genutzt werden. Im Extremfall wird alles genutzt, dann ist der Verbrauch von virtuellem Adressraum gleich groß wie die Belegung von physikalischem Speicher. Im Schnitt dürfte das aber besonders bei größeren Files nicht der Fall sein, so dass effektiv mehr virtueller Adressraum als physikalischer Speicher belegt wird.
... (to be continued)
Wie sieht das bei dynamisch gelinkten Libraries aus? Da hab' ich noch nicht so ganz den Überblick, weil die doch auch erst zur Laufzeit geladen (=Belegung von physischem Speicher) werden. Wenn diese nicht genutzt würden, dann hätte man ja auch umsonst Adressraum belegt, ohne physischen Speicher zu belegen, oder?
Dass grundsätzlich die Hälfte des virtuellen Adressraums durch den Kernel reserviert ist, ist sowieso klar, jedoch eine grundsätzliche Gegebenheit. Ich wollt's natürlich hier nur der Vollständigkeit halber erwähnen.
Bisher sind mir folgende Situationen eingefallen:
memory mapped I/O (PCI-Geräte, AGP- usw.)
Hier wird virtueller Adressraum für das Adressieren von Speicher(bereichen) von Erweiterungskarten benutzt. Physischer RAM-Speicher wird gar nicht belegt.
memory mapped files
Statt dem üblichen "open(...), read/write, close(...)" mit einer Datei wird ein Adressbereich reserviert, als ob die Daten schon im Speicher liegen würden. Bei Zugriff darauf gibt es einen Page Fault und das OS lädt die Datei in diesen Speicherbereich hinein. Hier wird zwar physikalischer Speicher verbraucht, aber nur soviel, wie Bereiche der Datei genutzt werden. Im Extremfall wird alles genutzt, dann ist der Verbrauch von virtuellem Adressraum gleich groß wie die Belegung von physikalischem Speicher. Im Schnitt dürfte das aber besonders bei größeren Files nicht der Fall sein, so dass effektiv mehr virtueller Adressraum als physikalischer Speicher belegt wird.
... (to be continued)
Wie sieht das bei dynamisch gelinkten Libraries aus? Da hab' ich noch nicht so ganz den Überblick, weil die doch auch erst zur Laufzeit geladen (=Belegung von physischem Speicher) werden. Wenn diese nicht genutzt würden, dann hätte man ja auch umsonst Adressraum belegt, ohne physischen Speicher zu belegen, oder?