Warum ist die Adresse der Variablen Kindprozess und Elternprozess gleich?

8

Hier ist mein Code

%Vor%

Die Ausgabe des Programms ist wie folgt:

%Vor%

Meine Frage ist, warum die Adresse der Variablen von Kind und Elternteil gleich ist, aber der Wert anders ist?

    
Janus.Le 31.08.2011, 07:08
quelle

2 Antworten

21

Weil es eine virtuelle Adresse ist, keine physische.

Jeder Prozess erhält seinen eigenen Adressraum (z. B. kann ein 32-Bit-System jedem Prozess einen eigenen Adressraum mit dem vollen 4G-Bereich zuweisen).

Es ist die Speicherverwaltungseinheit, die virtuelle Adressen physischen Adressen zuordnet (und Dinge wie Seitenfehler behandelt, wenn ausgelagerte Seiten aus dem sekundären Speicher zurückgekauft werden müssen).

Das folgende Diagramm kann hilfreich sein, wobei jeder Abschnitt einen 4K-Speicherblock darstellt:

%Vor%

In diesem Diagramm sehen Sie die Trennung zwischen virtuellen Speicheradressen und physischen Speicheradressen (und die Möglichkeit, dass sich Prozesse auch Speicherblöcke teilen). Die Adressen auf der linken und rechten Seite sind virtuelle Adressen, die die Prozesse sehen.

Die Adressen im zentralen Block sind tatsächliche physikalische Adressen, wo die Daten "wirklich" sind, und die MMU behandelt das Mapping.

Für eine tiefere Erläuterung von fork (und exec ) sollten Sie sich auch diese Antwort .

    
paxdiablo 31.08.2011, 07:14
quelle
1

Die Adresse ist die "selbe", da jeder Prozess seinen eigenen virtuellen Adressraum hat und die Variable im Allgemeinen an den gleichen Ort geladen wird. Beachten Sie, dass dies nicht die physikalische Adresse im Speicher ist. Beachten Sie auch, dass es Schemata gibt, die den Speicherort, an dem ein Prozess geladen wird, bewusst randomisieren, um es schwieriger zu machen, den Prozess anzugreifen / zu hacken. In diesem Fall ist die Adresse anders.

    
trojanfoe 31.08.2011 07:10
quelle

Tags und Links