Adressraum: Wie können die Prozesse auf den Speicher eines anderen Prozesses zugreifen?
-
Hallo Forum,
jedem Prozess wird doch vorgegaukelt das es die vollen 4 bzw 2-3 Gigabyte die bei einer 32 Bit Architektur möglich sind auch verfügbar sind. Wie kommt es dann das verschiedene Prozesse untereinander auf den Adressraum des anderen Prozesses zugreifen können?
Vielen Dank
Mark
-
können sie nicht, ausser per APIs die das betriebssystem bereitstellt.
-
Vielen Dank
-
man kann in die DLL eine 'shared' section einbauen, dann geht das unter den prozessen die die selbe dll nutzen.
ansonsten kann ein prozess ueber das OS versuchen ein mapping auf einen anderen prozess zu bekommen. das geht natuerlich nur wenn das OS diese sache unterztuetzt, es kann dann aber durchaus sein dass der addressraum nicht der selbe ist, sondern nur der speicherbereich gemappt wurde.
-
Dann kann der insgesamt verfügbare Speicher auch 4 GB übersteigen? Wenn also das OS (sagen wir Windows 32 Bit) das obere Gigabyte verwendet, eine Anwendung 2 GB verwendet, dann kann eine neu gestartete Anwendung nur die restlichen 2 GB anfordern. Weil ja das Betriebssystem nur 4 GB verwalten kann.
Hat der Rechner mit Ram und Auslagerungsdatei weniger zur Verfügung, dann ist das die Obergrenze des Verfügbaren Speichers. Korrekt?
-
Mark Fumer schrieb:
Dann kann der insgesamt verfügbare Speicher auch 4 GB übersteigen? Wenn also das OS (sagen wir Windows 32 Bit) das obere Gigabyte verwendet, eine Anwendung 2 GB verwendet, dann kann eine neu gestartete Anwendung nur die restlichen 2 GB anfordern. Weil ja das Betriebssystem nur 4 GB verwalten kann.
Hat der Rechner mit Ram und Auslagerungsdatei weniger zur Verfügung, dann ist das die Obergrenze des Verfügbaren Speichers. Korrekt?Unter Linux nicht, dort hat Anforderung nichts mit tatsächlicher Nutzung zu tun, wenn du aber Anfordern mit Nutzen ersetzt dann passt deine Aussage.
Ansonsten kann man auch unter 32Bit mehr als 4GB adressieren.
-
Mein letztes Posting habe ich leicht vergeigt.
Bei Windows XP kann man aber nicht mehr als 4 GB Speicher benutzen? Da Win ein Gigabyte Adressen benutzt bleiben für die Anwendungen nur 3 Gig real verfügbar. In diesen 3 Gig werden alle Anwendungen abgelegt. Den Anwendungen wird vorgegaukelt das sie 4 Gig haben, die Gesamtsumme des von den Anwendungen angeforderten Speichers kann jedoch diese 3 Gig nicht übersteigen. Korrekt?
Bei einem 4 Gig Ram Rechner braucht man auch keine Auslagerungsdatei mehr. Korrekt? (Windows)
Du schreibst das ein 32 Bit OS mehr als 4 GB Speicher zur Verfügung stellen kann? Wie soll das gehen, wenn die Adressen nur 32 Bit breit sind. Oder meinst Du sowas wie Mapping beim 3'86 wo ein Fenster immer hin und her geschoben wird?
-
Marek Fumer schrieb:
Mein letztes Posting habe ich leicht vergeigt.
Bei Windows XP kann man aber nicht mehr als 4 GB Speicher benutzen? Da Win ein Gigabyte Adressen benutzt bleiben für die Anwendungen nur 3 Gig real verfügbar. In diesen 3 Gig werden alle Anwendungen abgelegt. Den Anwendungen wird vorgegaukelt das sie 4 Gig haben, die Gesamtsumme des von den Anwendungen angeforderten Speichers kann jedoch diese 3 Gig nicht übersteigen. Korrekt?
a) Win XP gibt es auch in 64Bit
b) Für 32Bit CPUs und Betriebssysteme gibt es PAE (Feature von IA-32 CPUs), siehe hier (aber ganz lesen und nicht nach der Hälfte aufhören!).Bei einem 4 Gig Ram Rechner braucht man auch keine Auslagerungsdatei mehr. Korrekt? (Windows)
Wenn du Ruhezustand willst dann schon. Außerdem will Windows, aus welchen Gründen auch immer, min 2MB Auslagerungsdatei.
Du schreibst das ein 32 Bit OS mehr als 4 GB Speicher zur Verfügung stellen kann? Wie soll das gehen, wenn die Adressen nur 32 Bit breit sind. Oder meinst Du sowas wie Mapping beim 3'86 wo ein Fenster immer hin und her geschoben wird?
Mit PAE.
-
Mark Fumer schrieb:
Dann kann der insgesamt verfügbare Speicher auch 4 GB übersteigen? Wenn also das OS (sagen wir Windows 32 Bit) das obere Gigabyte verwendet, eine Anwendung 2 GB verwendet, dann kann eine neu gestartete Anwendung nur die restlichen 2 GB anfordern. Weil ja das Betriebssystem nur 4 GB verwalten kann.
Hat der Rechner mit Ram und Auslagerungsdatei weniger zur Verfügung, dann ist das die Obergrenze des Verfügbaren Speichers. Korrekt?virtual address space wird pro anwendung vergeben, jede kann also diese menge an speicher addressieren.
-
@SysAdmin: Vielen Dank für Aufklärung
@Rapso: Aber ohne PAE auf einem normalen WinXP System mit 4 Gb Ram kann das Betriebssystem nur 4 GB RAM verwalten. Es gibt doch nur 32 Bit für die Adressierung? Auf der Anwendungsseite wird virtuell jeweils 4 GB zur Verfügung gestellt. malloc() wird jedoch versagen sobald global die 4 GB vollgelaufen sind.
-
Mark Fumer schrieb:
@SysAdmin: Vielen Dank für Aufklärung
@Rapso: Aber ohne PAE auf einem normalen WinXP System mit 4 Gb Ram kann das Betriebssystem nur 4 GB RAM verwalten. Es gibt doch nur 32 Bit für die Adressierung? Auf der Anwendungsseite wird virtuell jeweils 4 GB zur Verfügung gestellt. malloc() wird jedoch versagen sobald global die 4 GB vollgelaufen sind.
wenn du speicher allokierst, wird dir dein OS nur addressraum geben. erst wenn du drauf zugreifst, bekommst du nach einem page-miss auch wirklich diesen speicher, in dem moment kann das OS den speicher von anderen applikationen auslagern.
was passiert ist rein vom OS abhaengig, ich weiss nicht was windows macht.
auf anderen OS ist der addressraum oft so virtualisiert, dass deine applikation sogar auf mehreren systemen gleichzeitig laufen kann (cluster software).
-
Mark Fumer schrieb:
malloc() wird jedoch versagen sobald global die 4 GB vollgelaufen sind.
nö, dann wird kräftig ausgelagert und nichtvorhandenes RAM mit dem paging file simuliert.
-
@~fricky: Du meinst mit Paging das swapping: http://de.wikipedia.org/wiki/Virtuelle_Speicherverwaltung
Jetzt mal ein kleines Beispiel:
- 2 Bit Adressierung. Es gibt 4 Speicheradressen (SP0, SP1, SP2, SP3), der Ram besteht jedoch nur aus 2 Speicherzellen. Alle Anwendungen werden 4 vorgegaukelt. Das OS benötigt eine Speicherzelle (SP0).- Anwendung 1 benötigt 2 Speicherzellen (V0 und V1 die real in SP1 und SP2 gespeichert werden).
- Anwendung 2 benötigt 1 Speicherzelle. (V0, ist in SP3 gespeichert)
Wenn eine Anwendung nun auf den Speicher zugreift wird er konkret in den Ram geladen. Wird jedoch eine weitere Speicherzelle angefordert ist das doch nicht möglich weil die 2 Bit Adressierung nicht mehr hergibt? Mir fehlt so das schlagende Argument warum eine 32 Bit Adressarchitektur ohne Tricks mehr als 4GB ansprechen können soll.
-
^^wenn jeder prozess nur 4 speicherzellen haben kann, muss das OS doch nicht mit der selben einschränkung leben (und auch nicht mit der selben adressierungsart auf realen speicher, wie seine prozesse auf ihren virtuellen speicher zugreifen).