PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisschwierigkeiten zu virtuellem Adressraum :(


Azubi
2007-12-31, 17:03:28
Hallo,

könnt ihr mir einige Fragen zu den Problemen in Bezug zu Vista 32-bit, DX10-GraKa und DX9-Game beantworten?

Es kam in einem anderen Forum die Frage auf, warum beispielsweise ein game (The Witcher) auf einem Vista-32-System nach ca. 15 Min. bei einem Spieler ständig abstürzte.

Ich hatte in Erinnerung, daß der virtuelle Adressraum da eine Rolle spielen könnte und hatte dem Spieler zu einem Patch von Microsoft geraten, der wohl dieses Problem versucht zu lösen.

Nun wurde ich aber neugierig und habe mir so einiges zum virtuellen Adressraum duchgelesen. Aber so richtig verstanden habe ich es eigentlich noch nicht.

Ich versuche mal kurz zu schreiben wie ich es bisher verstanden habe.

Bei einem Vista mit 32-bit ist der virtuelle Adressraum auf 2GB festgelegt. Es ist eine DX10-fähige Grafikarte mit 512MB im System. Starte ich jetzt ein DX9-Game (The Witcher), habe ich bereits den virtualisierten Adressbereich des WDDM-Videospeichermanagers und die erzeugte Kopie vom Spiel im Virtuellen Adressbereich.

Frage
Ist das so richtig? Oder entstehen diese Kopien erst, wenn ich zwischen game und Vista-Oberfläche hin und her springe?

Jetzt ist eine "starke" Grafikkarte im System. Das game läuft dadurch in einer sehr hohen Auflösung (sagen wir mal 1600 x 1200) mit 8xAA. Die entstehenden framebuffers sind also sehr groß.

Frage
Wenn man die Auflösung auf ca. 1280 x 1024 reduziert und nur noch 4xAA einstellt; hätte das bereits große Auswirkungen auf das Überlaufen des Adressbereichs? Bzw. kann das Überlaufen unterbinden?

Wenn ich nun anstatt der DX10-fähigen Grafikkarte eine andere Karte verwende, die nur DX9 unterstützt, habe ich dann trotzallem noch das Problem mit dem WDDM?

Frage
Brauche ich unbedingt eine DX10-Karte im System damit es zu diesem Fehler im virtuellen Adressbereich kommen kann? Also anders ausgedrückt: Ein Überlauf des virtuellen Adressbereichs kann nur entstehen, wenn ich Vista-32 mit einer DX10-Karte nutze und in einem DX9-Spiel zusätzlich sehr hohe Auflösungen mit viel AA spiele?

Eigentlich hatte ich noch einige Fragen mehr zu diesem Problem. Fallen mir bestimmt auch noch ein. Dann frage ich einfach nochmal.

Ach ja, da ist dann noch eine Frage
Wenn ich ständig zwischen DX9-game und Vista umschalte, beschleunigt das die Gefahr eines virtuellen Adressbereichs-Überlaufes?

Schon mal vielen Dank

Coda
2008-01-01, 23:05:40
Es ist keine Kopie im Adressraum, sondern eine Referenz. Es wird dadurch kein physikalischer RAM verbraucht, aber es entzieht der Applikation eben Adressraum den sie brauchen würde um z.B. physikalischen RAM anzusprechen. Mit dem Patch werden dort nur noch Dinge eingeblendet die auch wirklich benötigt werden.

Jeder Prozess hat seinen eigenen virtuellen Adressraum, d.h. es ist völlig unabhängig von äußeren Faktoren. Es hat auch nichts mit D3D9 oder D3D10 zu tun, sondern es ist ein allgemeines "Problem" des Vista-Treibermodells.

Die Lösung des Problems ist den Vista-Patch einzuspielen und falls das nichts nützt (wäre ungewöhnlich, dann sollten die Probleme eigentlich auch unter XP existieren) die Applikation auf Large-Address-Aware zu patchen und dann Vista x64 zu verwenden.

Exxtreme
2008-01-01, 23:43:46
Also wenn ein Spiel nach 15 Minuten abstürzt und das regelmässig dann ist entweder das System zu warm oder das Spiel hat einen Speicherleck. Und da hilft weder Vista noch irgendwelche Betriebssystempatches. Da hilft nur ein Patch des Spiels. Mehr RAM und ein grösserer Addressraum verlagern das Problem lediglich nach hinten. Dann kannst du halt nicht 15 Minuten spielen sondern 45 Minuten und das Problem tritt dann wieder auf.

Coda
2008-01-01, 23:47:21
Also wenn ein Spiel nach 15 Minuten abstürzt und das regelmässig dann ist entweder das System zu warm oder das Spiel hat einen Speicherleck.
Nein. Speicherfragmentierung kommt auch in Frage.

Azubi
2008-01-02, 10:26:47
Vielen Dank für eure schnellen und ausführlichen Amtworten. :smile:

Zu meiner Schande muß ich gestehen - ich habe es immer noch nicht verstanden - :frown:

Ich habe mir diesen Text hier jetzt mehrmals durchgelesen. Insbesondere hier den Abschnitt zu "weitere Informationen". (http://support.microsoft.com/kb/940105/de)

Ist es denn jetzt nicht so, daß gerade im Zusammenspiel Vista und DirectX9-Anwendung es zu diesem "Überlauf" des virtuellen Adressbereichs kommen kann? Halt wegen der Nutzung unterschiedlicher APIs.

Also ich habe da noch schwere Verständnisprobleme mit diesem Satz aus dem oben genannten Microsoft-link.

Wenn eine Anwendung eine eigene Kopie ihrer Videoressourcen im Speicher erstellt oder DirectX 9 oder eine frühere Version verwendet, enthält der virtuelle Adressraum den virtualisierten Adressbereich des WDDM-Videospeichermanagers und die Kopie der Anwendung. Anwendungen, die Grafik-APIs vor DirectX 10 verwenden und auf GPUs zugreifen, die einen großen Videospeicher haben, können ihren virtuellen Adressraum leicht erschöpfen.

Ich habe immer noch nicht genau verstanden wie der Zusammenhang mit dem großen Videospeicher und dem "Crash" im virtuellen Adressbereich zustande kommt. Was zum Kukuck meinen die denn immer mit den sogenannten "Kopien" in diesem Artikel? Und ist es dann nicht auch so, daß es nicht zu diesem Problem kommen kann, wenn eine Grafikarte verwendet wird, deren GPU nur auf 256MB zugreifen kann? Bzw. welchen Einfluß hat dann die gewählte Auflösung auf dieses Problem. Habe ich eine Grafikkarte mit 512MB und eine hohe Auflösung dazu, ist das für den virtuellen Adressbereich vom Grunde her das gleiche als würde ich die selbe Karte mit niedriger Auflösung nutzen?

Ich krieg da echt noch keinen Kopp dran. :(

Exxtreme
2008-01-02, 10:45:17
Das mit dem Kopien bedeutet so eine Art Memory Mapping. Sprich, das Spiel hält eine Kopie des Videospeichers nochmal vor. Denn der eigentliche Inhalt des Videospeicher kann "verloren" gehen. Hat man eine Kopie davon dann kann man den Inhalt des Videospeichers wieder herbeizaubern.

Wie dem auch sei. IMHO hat die Beschreibung nichts mit dem Problem des Spiels zu tun. IMHO ist das Spiel einfach mal scheisse programmiert wenn es zu solchen Fehlern kommt.

Azubi
2008-01-02, 10:56:00
Das mit dem Kopien bedeutet so eine Art Memory Mapping. Sprich, das Spiel hält eine Kopie des Videospeichers nochmal vor. Denn der eigentliche Inhalt des Videospeicher kann "verloren" gehen. Hat man eine Kopie davon dann kann man den Inhalt des Videospeichers wieder herbeizaubern.

Wenn ich nun aus dem Spiel auf die Vistaoberfläche wechsel, dann wäre doch so ein Fall gegeben in dem Moment, wo ich wieder zum Spiel zurück wechsle. Wenn ich nun öfters hin und her wechsle, hat das negative Auswirkungen für den virtuellen Adressraum?

Wie dem auch sei. IMHO hat die Beschreibung nichts mit dem Problem des Spiels zu tun. IMHO ist das Spiel einfach mal scheisse programmiert wenn es zu solchen Fehlern kommt.
Und da ist dann die Frage - Kann man einem Spieler raten die Auflösung etwas zu reduzieren um dem Problem entgegenzuwirken? Bringt das überhaupt etwas bei diesem Problem?

Exxtreme
2008-01-02, 10:58:07
Wenn ich nun aus dem Spiel auf die Vistaoberfläche wechsel, dann wäre doch so ein Fall gegeben in dem Moment, wo ich wieder zum Spiel zurück wechsle. Wenn ich nun öfters hin und her wechsle, hat das negative Auswirkungen für den virtuellen Adressraum?
Nein, das >>>sollte<<< keine Auswirkungen haben. Das Problem ist, ich weiss nicht wie das Spiel da drauf reagiert bzw. was es überhaupt tut.
Und da ist dann die Frage - Kann man einem Spieler raten die Auflösung etwas zu reduzieren um dem Problem entgegenzuwirken? Bringt das überhaupt etwas bei diesem Problem?
Testen würde ich es. Ich gehe aber davon aus, daß sich das Problem nicht bessert sondern allenfalls nach hinten verschiebt.

Edit: Es gibt einen "Sonderfall" wo ein Programm keinen Speicher zugewiesen bekommt obwohl eigentlich genug verfügbar ist. Das tritt dann ein wenn man zuviel Speicher in einem Stück reservieren will. Ist dieses Stück RAM nicht physikalisch auch in einem Stück verfügbar dann gibt es auch Fehler. Sprich, ich fordere 512 MB RAM an, es sind aber einmal 256 MB und einmal 300 MB frei. Dann weist Windows keinen Speicher zu.

PatkIllA
2008-01-02, 13:00:02
Ist dieses Stück RAM nicht physikalisch auch in einem Stück verfügbar dann gibt es auch Fehler.Physikalisch ist mehr oder minder egal. Dafür wird ja von der virtuellen zur echten Adresse übersetzt und das muss nicht durchgängig sein. Sonst war im Multitasking vermutlich schon nach wenigen Minuten der Speicher aus.
Es muss nur im virtuellen Adressraum 512 MB am Stück verfügbar sein.

Wobei ich aber auch gerne mal wissen, was Vista da jetzt genau virtualisiert. Alle Resourcen noch mal in den Speicher zu kopieren kann ich mir ja aus performancetechnischer Sicht ja nicht vorstellen. Oder ist das nur eine Referenz, die dann in den unter Vista vollständig eingemappten Videospeicher verweist? Ist das anders unter Vista, wenn das Device verloren geht oder zurückgesetzt wird?

Der Patch macht doch glaube ich auch nicht anderes, als das ein Spiel die Funktion jetzt explizit anfordern muss oder?

HellHorse
2008-01-02, 14:20:26
.... die Applikation auf Large-Address-Aware zu patchen und dann Vista x64 zu verwenden.
Gibt es da Anleitungen? Gibt es irgendwo Berichte in wie vielen Fällen so was von Erfolg gekrönt ist?

HOT
2008-01-02, 14:22:54
Der Videospeicher ist per Hardware remapped. Das heißt, sowohl BIOS als auch Windows adressieren erstmel nur 256MB RAM, egal die gross die Grafikkarte nun wirklich ist. Erst der Grafiktreiber sorgt dafür, dass der gesamte Grafikspeicher zur Verfügung steht, benötigt dafür aber auch einiges an Kernelspace des OS mehr, als per Hardware adressiert wird.
Will heißen, von einer GraKa mit 1GB werden vom 32Bit OS nur 256MB erkannt. Der Treiber nutzt aber wahrscheinlich den Kernelspace, um den vollen Speicherbereich quasi separat zu adressieren (bin ich jetzt nicht sicher, wie genau die das machen).

@HellHorse Mit dem CFF-Explorer
http://www.download.com/CFF-Explorer/3000-2383_4-10564296.html
kann man das LAA für eine Applikation setzen.
.exe laden, auf File-Headers klicken, unter Characteristics/Meanings steht ein "cklick here", da gibt es einen Punkt der heißt "App can handle >2GB Adressset".
Macht wie gesagt aber nur mit einem 64Bit OS wirklich Sinn, da bei 32Bit OS mit /3GB Schalter sehr sicher die Stabilität des Systems flöten geht.
Das geht bei fast allen Games, die mit viel RAM umgehen können. Z.B. läuft Gothic3 damit einwandfrei, auch bei Civilisation 4, Armed Assault und Oblivion ist der Schalter geradezu essentiell wichtig, wenn man diese Games moddet und beispielsweise bei Civ sehr grosse Userkarten spielen möchte oder bei Oblivion gerne eine Texturepack verwenden möchte.
Viele neue Games und vor allem MMO Clients sind mittlerweile von Haus aus gepatcht. So läuft z.B. der HDR-O Client von Anfang an mit LAA aktiv, bei Vanguard wurde das vor kurzen reingepatcht. Bei Crysis 32Bit ist LAA ebenfalls standardmässig aktiv.
Der LAA Patch kann sich aber auch für Apps lohnen, die nicht zwingend an das Adressraumlimit stossen. Aber es muss halt weniger aufgeräumt werden und es kann mehr physischer RAM belegt werden, wenn mehr Adressraum vorhanden ist, was zu weniger Nachladerucklern führt. Nahezu jedes Game, das mehr als 1GB RAM braucht um anständig zu laufen profitiert theoretisch von LAA.

Coda
2008-01-02, 15:40:11
Gibt es da Anleitungen? Gibt es irgendwo Berichte in wie vielen Fällen so was von Erfolg gekrönt ist?
http://www.keindesign.de/stefan/poser/3gb.html

Das funktioniert in sehr vielen Spielen (u.a. Supreme Commander und Gothic 3).

Ist dieses Stück RAM nicht physikalisch auch in einem Stück verfügbar dann gibt es auch Fehler. Sprich, ich fordere 512 MB RAM an, es sind aber einmal 256 MB und einmal 300 MB frei. Dann weist Windows keinen Speicher zu.
Physikalische Speicherfragmentierung gibt es nicht, nur virtuelle.

Azubi
2008-01-03, 12:00:44
Und da ist dann die Frage - Kann man einem Spieler raten die Auflösung etwas zu reduzieren um dem Problem entgegenzuwirken? Bringt das überhaupt etwas bei diesem Problem?

Testen würde ich es. Ich gehe aber davon aus, daß sich das Problem nicht bessert sondern allenfalls nach hinten verschiebt.



Sorry, ich muß aber nochmal drauf rumreiten. :smile:

Mittlerweile denke ich, eine Verminderung der Auflösung bringt absolut keine Verbesserung.

Ich stelle es mir mittlerweile ungefähr so vor.

Wenn ich unter 32bit 4GB adressieren kann und (damit es extremer in der Aussage wird) 2x8800er mit je 768MB RAM im System habe, dann sind schonmal ca. 1,5GB der mögl. adressierbaren 4GB weg. Auch wenn ich nur eine Auflösung von 640x480 ohne alles nutze. Die GPUs können ja jeweils auf volle 768MB zugreifen und nehmen sich auch den nötigen Adressbereich dafür weg.

Jetzt habe ich (nur als Beispiel) noch einen RAID-Controller im System, der sich auch noch 128MB des adressierbaren Bereichs sichert. Dazu dann noch die Soundkarte die sich evtl. noch 64MB sichert.

Nun habe ich nur noch ca. 2,3GB an adressierbarem Raum übrig. Jetzt schnappt sich der Kernel auch nochmal so ca. 1GB (?, glaube es sind gar 2GB) für sich und es bleiben nur noch ca. 1,3GB übrig.

Diese 1,3GB sind dann das, was für den adressierbaren Bereich einer Anwendung übrig bleibt ??? :eek:

PatkIllA
2008-01-03, 12:03:44
Der Kernel schnappt sich 2 GiB. Da sind aber schon die von der Hardware verwendeten Addressen schon drin.

Azubi
2008-01-03, 12:26:31
Der Kernel schnappt sich 2 GiB. Da sind aber schon die von der Hardware verwendeten Addressen schon drin.

Aber bedeutet das dann nicht, das grundsätzlich die Erhöhung des adressierbaren Bereichs in der Boot.ini auf 3GB in einem System mit 2GB RAM unwiderruflich Instabilitäten hervorruft, weil Adressbereiche überlappen können? Der Kernel nimmt sich von den 4 möglichen adressierbaren GB schon zwei weg für sich und die Hardware. Demnach bleiben eigentlich die standardmäßigen 2GB für den virtuellen Adressraum für Anwendungen. Erhöhe ich hier auf 3GB virtuellem Adressraum überlappt sich das doch bereits in der Größeneinheit von 1GB mit den 2GB des Kernels. Oder habe ich hier immer noch einen Denkfehler.

Aber zumindest habe ich jetzt (hoffe ich) verstanden, daß es egal ist ob ich 1x oder 10x von game zu Desktop und zurück wechsle. Das hat jedenfalls keine Auswirkungen auf den adressierbaren Bereich. Auswirkungen haben lediglich Kernel, Hardware & Anwendung.

Im Grunde genommen wären ja dann in einem Vista 32Bit oder XP-System alles Schmarn was größer als 2GB an RAM reingesetzt wird, da einer Anwendung eh nur 2GB an adressierbaren Bereich bleiben. Richtig?

Aber wie kann ich nun errechnen, wie der optimale Wert für z.B. mein System wäre, den ich in der boot.ini angeben kann. Kann ich irgendwie auslesen lassen wieviel der Kernel für sich & Hardware wirklich braucht? Theoretisch würde ich doch erreichen, daß z.B. Nachladeruckler im game geringer werden, da ein größerer Adressbereich zur Verfügung gestellt wird und mein System in der Leistung optimiert würde.

Exxtreme
2008-01-03, 13:08:35
Azubi, Windows kann auch Festplattenspeicher als Speicher für Programme zuweisen. Das Programm merkt davon nix. Von daher ist das erstmal unerheblich wieviel physikalischen RAM das System hat solange das OS Platz darin hat. Das Programm läuft dann lediglich langsamer weil Auslagern halt massiv langsamer ist als echten RAM zu nutzen.

Ich vermute einfach mal weiterhin, daß das Spiel halt irgendwie einen Bug hat.

Azubi
2008-01-03, 13:31:12
Azubi, Windows kann auch Festplattenspeicher als Speicher für Programme zuweisen. Das Programm merkt davon nix. Von daher ist das erstmal unerheblich wieviel physikalischen RAM das System hat solange das OS Platz darin hat. Das Programm läuft dann lediglich langsamer weil Auslagern halt massiv langsamer ist als echten RAM zu nutzen.

Ich vermute einfach mal weiterhin, daß das Spiel halt irgendwie einen Bug hat.

Ich meinte folgendes, es wird ja nicht Arbeitsspeicher an sich geklaut, sondern die Adressen, welche dem Arbeitsspeicher zugewiesen werden können. Wenn ich aber im Normalfall nur 2GB Adressraum einer Anwendung zuweisen kann, die Anwendung nun der CPU diese virtuellen Adressen mitteilt, damit die CPU für ihre Arbeit die "richtigen" Daten nutzen kann, dann liegt doch einiges an physikalischem Speicher brach. Im Falle eines 3GB Systems dann halt 1GB brach. Die CPU muß doch irgendwie die virtuellen Adressen wieder umsetzen in reale RAM-Adressen. Das was da dann noch an realem RAM übrig bleibt (also 1GB) liegt brach bzw. wird von der CPU für andere virtuelle Adressen anderer Anwendungen verbraucht. Aber bei einer laufenden Anwendung wäre es doch in einem 3GB-RAM System egal. Es läge alles über 2GB realem RAM brach, oder?

Man wird das jetzt knieflig hier. Ich gehe mal eine rauchen und versuche das in den Kopp zu bekommen. :confused::wink:

Eigentlich versuche ich nicht das game an sich durch eure Erklärungen zu optimieren. Ich habe grundsätzlich noch nicht verstanden, wie die virtuellen Adressraum-Aufteilungen und -Zuordnungen funktionieren. :(

PatkIllA
2008-01-03, 13:55:25
Erhöhe ich hier auf 3GB virtuellem Adressraum überlappt sich das doch bereits in der Größeneinheit von 1GB mit den 2GB des Kernels. Oder habe ich hier immer noch einen Denkfehler.Mit der Erhöhung auf 3 GiB reduzierst du gleichzeitig den Kernelspace auf 1 GiB was schon mal Ärger machen kann.
Es läge alles über 2GB realem RAM brach, oder?
Da können sich dann andere Programme breitmachen.

Azubi
2008-01-03, 15:31:30
Mit der Erhöhung auf 3 GiB reduzierst du gleichzeitig den Kernelspace auf 1 GiB was schon mal Ärger machen kann.


Bedeutet das nun, der Kernel operiert mit nur noch 1GB Adressbereich obwohl er nach wie vor mehr nötig hätte? Ist das der Punkt im TaskManager unter Systemleistung, der mit "ausgelagertem Kernel" dargestellt wird?

Und ich möchte mich mal gleich für eure Ausdauer mit mir bedanken. Ich hatte in der Schule schon das Talent die Lehrer mit meinen Fragen an den Rand des Nervenzusammenbruchs zu bringen. :frown:

Aber um jetzt für mich mal hier zum Abschluß zu kommen, nur noch eine Verständnisfrage an euch.

Ich habe in meinem System reale 2GB RAM. Was bringt mir die Erhöhung des virtuellen Adressbereichs auf 3GB (angenommen es würde bei mir keine Probleme verursachen) wenn ich doch dann CPU & Speichercontroller dazu zwinge, mit ausgelagertem "Speicher" zu werkeln. Ich meine, warum sollte ich den virtuellen Adressraum höher setzen als mein realer RAM ist? Wodurch ergibt sich da für mich der Vorteil?

Wäre es (bei meinen 2GB RAM) nicht besser die virtuelle Größe des Adressbereichs auch auf 2 GB stehen zu lassen? Ansonsten zwinge ich doch meinen Rechenknecht dazu ständig auf "ausgelagerte" Ressourcen zuzugreifen. Ich sehe da nur den Vorteil, eine Anwendung braucht zwingend mehr adressierbaren Raum.

Aber sollte ich in so einem Fall die Größe des realen RAM nicht auch nach oben hin korrigieren oder anpassen um unnötige Systemoperationen des Speichercontrollers zu unterbinden. Er müßte doch ständig die "ausgelagerten" Ressourcen zur Verfügung stellen.

Da ich immer mehr Fragen habe je mehr ich mich mit der Problematik hier auseinandersetze mache ich für mich mal einen Schlußstrich hier. Ich habe ja nun wenigstens einige Grundsätze des virtuellen Adressbereichs verstanden. :wink:

Vielen Dank an euch allen hier und eure Geduld. :smile:

PatkIllA
2008-01-03, 15:36:40
Da muss noch nicht unbedingt was ausgelagert werden.
Mehr Addressraum kann nie schaden. Idealerweise ist er ein Vielfaches vom realen RAM.

Es kann auch bei 2 GiB Speicher durchaus passieren, dass du noch bspw. 100 MB RAM frei hast, aber eine Anwendung keine 50 MB mehr am Stück bekommen kann, weil eben nicht genug im Addressraum der Anwendung frei ist.
Stichwort Fragmentierung.

Coda
2008-01-03, 15:37:51
Aber bedeutet das dann nicht, das grundsätzlich die Erhöhung des adressierbaren Bereichs in der Boot.ini auf 3GB in einem System mit 2GB RAM unwiderruflich Instabilitäten hervorruft, weil Adressbereiche überlappen können? Der Kernel nimmt sich von den 4 möglichen adressierbaren GB schon zwei weg für sich und die Hardware. Demnach bleiben eigentlich die standardmäßigen 2GB für den virtuellen Adressraum für Anwendungen. Erhöhe ich hier auf 3GB virtuellem Adressraum überlappt sich das doch bereits in der Größeneinheit von 1GB mit den 2GB des Kernels. Oder habe ich hier immer noch einen Denkfehler.
Es überlappt sich überhaupt nichts. Erstens werden z.B. bei 2x8800GTX ein Großteil des RAMs der Karten gemeinsam gemappt, weil sie eh die gleichen Daten speichern müssen. Zweitens muss der Treiber Swapping betreiben. Es ist unmöglich im Kernelspace 768MiB virtuellen Adressraum zu bekommen unter 32-Bit-Windows.

Bedeutet das nun, der Kernel operiert mit nur noch 1GB Adressbereich obwohl er nach wie vor mehr nötig hätte?
Es kann Probleme geben mit Treibern die den Adressraum unbedingt haben wollen, ja.

Ist das der Punkt im TaskManager unter Systemleistung, der mit "ausgelagertem Kernel" dargestellt wird?
Nein.

Wäre es (bei meinen 2GB RAM) nicht besser die virtuelle Größe des Adressbereichs auch auf 2 GB stehen zu lassen? Ansonsten zwinge ich doch meinen Rechenknecht dazu ständig auf "ausgelagerte" Ressourcen zuzugreifen. Ich sehe da nur den Vorteil, eine Anwendung braucht zwingend mehr adressierbaren Raum.
Jeder Prozess hat seinen eigenen 4GiB großen Adressraum. Wobei die oberen 1 oder 2 GiB durch auf den Kernel gemappt werden. Wie schon gesagt kann man aus vielen Gründen mehr virtuelle Adressen brauchen als physikalischer RAM zur Verfügung steht.

Da ich immer mehr Fragen habe je mehr ich mich mit der Problematik hier auseinandersetze mache ich für mich mal einen Schlußstrich hier. Ich habe ja nun wenigstens einige Grundsätze des virtuellen Adressbereichs verstanden. :wink:
Irgendwie hab ich nicht das Gefühl ;)

Azubi
2008-01-04, 11:29:00
Da muss noch nicht unbedingt was ausgelagert werden. Mehr Addressraum kann nie schaden. Idealerweise ist er ein Vielfaches vom realen RAM.

Ich hatte es bisher so verstanden, daß der virtuelle Adressbereich als auch der physikalische Adressraum durch die Adressbreite der CPU vorgegeben wird. Also bei 32bit Adressbreite 2^32=4GB.

Wäre es deshalb nicht besser nöglichst nah an diese Grenzwerte auch beim installierten RAM zu kommen? Ich stelle es mir immer noch ungefähr so vor....

standardmäßige Größe für den Virtuellen Adressraum ist 2GB.

System A hat 1024MB installiert
System B hat 2048MB installiert
System C hat 3072MB installiert

Das langsamste System ist System A, da für die Programmausführung halt nur 1024MB RAM zur Verfügung steht. Bei einem Virtuellen Adressbereich von 2GB (und angenommen, die Anwendung würde diesen Bereich auch ausnutzen) müßte ständig ein Austausch mit dem "ausgelagerten" Bereich stattfinden.

Bei System B mit 2048MB RAM sähe das ganze schon einiges besser aus, weil im Idealfall der komplette virtuelle Adressbereich der RAM-Größe entspricht.

System C hätte keinen großen Vorteil gegenüber System B, da der Virtuelle Adressbereich ja auf 2GB festgelegt ist. Erhöhe ich bei System C den virtuellen Adressbereich auf 3GB (angenommen es würde keine Probleme machen) müßte da aber dann doch ein Vorteil gegenüber System B entstehen.

Deshalb meinte ich etwas weiter oben, das verbaute RAM sollte mindestens die Größe des eingesetzten virtuellen Adressbereichs haben. Denke ich im Moment zumindest noch.


Es kann auch bei 2 GiB Speicher durchaus passieren, dass du noch bspw. 100 MB RAM frei hast, aber eine Anwendung keine 50 MB mehr am Stück bekommen kann, weil eben nicht genug im Addressraum der Anwendung frei ist.
Stichwort Fragmentierung.

Jetzt bin ich bald komplett durcheinander. ;D Was du meinst ist aber jetzt doch der logische Adressraum. Oder? Der logische Adressraum ist immer kleiner als der physikalische Adressraum, da er den zusammenhängenden, linear adressierbaren Adressbereich angibt. Und den kann man mit Fragmentierung erhöhen. Aber der virtuelle Adressbereich kann nicht defragmentiert werden. Oder geht das doch?

Puh, mir qualmt schon wieder der Kopf. Finde ich ja echt prima hier :smile:

PatkIllA
2008-01-04, 11:39:59
Nur ganz kurz.
System ist nur dann langsamer wenn systemweit mehr als 1024 MB gebraucht. Danach ist es langsamer. Aber nicht unbedingt weil der Adressraum zu klein wird sondern weil dann die Platte benutzt wird.
Ebenso kann System C auch ohne 3GB Switch schneller sein, weil man ja nicht nur eine Anwendung am laufen hat.
Wenn der Addressraum ausget, dann kommt man auch nicht mit Auslagern weitern, sondern dann muss man im Speicher umkopieren um so wieder große Blöcke freizubekommen. Das ist dann so eine Art Defragmentierung.

Die Größe des logischen/virtuellen Addressraum ist auch nicht von der Größe des physikalischen Addressraum abhängig. Die pysikalischen Adressen können den normalen Anwendungsentwckler eh egal sein, weil man da eh nicht rankommt.

Krischi
2008-01-06, 19:39:50
Hey Azubi,

also ein 32-Bit-Programm hat immer seinen eigenen 4GiB großen Adressraum. Weil halt mit 32Bit max. 4GiB adressiert werden können.
Und damit hört es für die Anwendung auch schon auf, interessant zu werden.

Der ganze Rest von wegen physischer Speicher hier, ausgelagert da und Page/Frame/Segment wird vom Betriebsystem oder der Hardware beackert.

Wie oben gesagt, von den 4GiB virtuellem Speichern, den JEDES Programm für sich adressieren kann, bewirkt dieser Switch nur, dass der Kernelbereich von 2 auf 1 GiB verkleinert wird (Im Kernelbereich sind die Adressen für die Hardware etc. drin, d.h. Zugriff auf Graka-Speicher, Festplatte, Soundkarte, Netzwerk, Tastatur, Maus etc...).

Das mit der Speichersegmentierung, genauer den Frames und Pages (Frames sind verfügbar, Pages sind zugewiesen) ist Sache des betreibssystems und der MMU (Memory Management Unit) im Prozessor.

Es ist ja so, dass ein Programm, was vielleicht 1 GiB Speicher nutzt, nicht ständig auf den kompletten GiB zugriefen muss. Das, was das Programm gerade nciht braucht, wird ausgelagert (auf Festplatte) und der physische Speicher steht anderen Programmen zur Verfügung. Nur die Programme merken davon nichts, für die fühlt sich alles quasi immer gleich an. Jedes Programm denkt, es wär allein auf dem Rechner.

Fazit: Das Programm kann perse (wenn 32-Bit) nur 4 GiB adressieren, dass heisst mehr Platz für Daten kann es erstmal nicht verbrauchen. Unter Windwos schrumpft dies auf 2 GiB zusammen, aufgrund der I/O- und Kernel-Bereiche, die die anderen 2 GiB besetzen.

64-Bit-Programme haben einen viel größeren Adressraum und können deswegen weit mehr Speicher (virtuell) verbrauchen.

Gruß Krischi

Azubi
2008-01-06, 20:06:36
Hey Azubi,

also ein 32-Bit-Programm hat immer seinen eigenen 4GiB großen Adressraum. Weil halt mit 32Bit max. 4GiB adressiert werden können.
Und damit hört es für die Anwendung auch schon auf, interessant zu werden.

Der ganze Rest von wegen physischer Speicher hier, ausgelagert da und Page/Frame/Segment wird vom Betriebsystem oder der Hardware beackert.

Wie oben gesagt, von den 4GiB virtuellem Speichern, den JEDES Programm für sich adressieren kann, bewirkt dieser Switch nur, dass der Kernelbereich von 2 auf 1 GiB verkleinert wird (Im Kernelbereich sind die Adressen für die Hardware etc. drin, d.h. Zugriff auf Graka-Speicher, Festplatte, Soundkarte, Netzwerk, Tastatur, Maus etc...).

Das mit der Speichersegmentierung, genauer den Frames und Pages (Frames sind verfügbar, Pages sind zugewiesen) ist Sache des betreibssystems und der MMU (Memory Management Unit) im Prozessor.

Es ist ja so, dass ein Programm, was vielleicht 1 GiB Speicher nutzt, nicht ständig auf den kompletten GiB zugriefen muss. Das, was das Programm gerade nciht braucht, wird ausgelagert (auf Festplatte) und der physische Speicher steht anderen Programmen zur Verfügung. Nur die Programme merken davon nichts, für die fühlt sich alles quasi immer gleich an. Jedes Programm denkt, es wär allein auf dem Rechner.

Fazit: Das Programm kann perse (wenn 32-Bit) nur 4 GiB adressieren, dass heisst mehr Platz für Daten kann es erstmal nicht verbrauchen. Unter Windwos schrumpft dies auf 2 GiB zusammen, aufgrund der I/O- und Kernel-Bereiche, die die anderen 2 GiB besetzen.

64-Bit-Programme haben einen viel größeren Adressraum und können deswegen weit mehr Speicher (virtuell) verbrauchen.

Gruß Krischi

Thx @Krischi,

hat sich aber nun erledigt. Ich hatte noch eine gute Infoseite mit Pics :smile: bei einer Uni gefunden. Wenn ich es nochmals finde, setze ich den link hier rein. :wink:

Gruß

Azubi