Wo befindet sich der freigegebene Linux-Speicher?

8

Ich wollte nur wissen, wo sich geteilter Speicher in einem Linux-System befindet? Ist es im physischen Speicher oder virtuellen Speicher?

Ich bin mir der Sende-Box des virtuellen Speichers des Prozesses bewusst, sie unterscheiden sich von Prozess zu Prozess und Prozesse sehen einander nicht, aber wir können die Daten zwischen den Prozessen mit IPC weiterleiten. Um das einfache Szenario zu implementieren, habe ich gerade ein einfaches Shared-Memory-Programm erstellt und versuche, die Shared-Memory-Adresse und Value-Return von shmat -Funktion zu drucken, jedoch beide Prozesse haben unterschiedliche Adresse, aber gleichen Wert.

Hier ist das Schreibprogramm.

write.c

%Vor%

Hier ist das Leserprogramm.

read.c

%Vor%

Es wäre großartig, wenn jemand im Detail erklären könnte, wie die Prozesse trotz unterschiedlicher Adressen den gleichen Wert sehen?

Diese Frage kommt von C pass void pointer mit Shared Memory .

Danke.

    
skanzariya 24.01.2014, 05:17
quelle

1 Antwort

15

Der gesamte festgeschriebene Speicher ist physisch.

Allerdings können Prozesse den physikalischen Speicher nicht direkt adressieren. Sie haben virtuelle Adressen, die der Kernel in physikalische Adressen auflöst. Wenn eine gemeinsam genutzte Speicherregion eingerichtet wird, wird derselbe physische Speicherort von den mehreren Prozessen adressiert. Die virtuellen Adressen können jedoch unterschiedlich sein. Jeder Prozess verwendet die virtuelle Adresse, die er nur in seinem eigenen Kontext erhalten hat. Beide virtuellen Adressen beziehen sich auf den gleichen physischen Speicher.

Im Falle eines gemeinsam genutzten Speicherbereichs ist die gleiche physikalische Speicheradresse gleichzeitig durch mehrere Prozesse adressierbar, da beide Prozesse virtuelle Adressen haben, die auf dieselbe physikalische Adresse zeigen.

Betrachten Sie zum Beispiel Folgendes:

  • virtuelle Adresse V1 (im Prozess T1 Kontext)
  • virtuelle Adresse V2 (im Prozess T2 Kontext)

zeigen beide auf den gemeinsamen Speicherbereich.
Dies ist eigentlich eine gemeinsame physikalische Adresse P .

Jetzt,
Prozess T1 referenzierende virtuelle Adresse V1
OR
Verarbeiten Sie die T2 referenzierende virtuelle Adresse V2

führt zu einem Zugriff auf die physikalische Adresse P , da der Kernel beide virtuellen Adressen auf den gleichen physischen Speicherort im Speicher überträgt.

Im folgenden Diagramm wird beispielsweise der physische Speicher PFN4 von den Prozessen X und Y gemeinsam verwendet, wobei VPFN3 und VPFN1 in den entsprechenden Feldern verwendet werden Kontexte.

    
TheCodeArtist 24.01.2014 05:44
quelle

Tags und Links