fork() Systemaufruf und Speicherplatz des Prozesses

fork() Systemaufruf und Speicherplatz des Prozesses

Zitiere mich selbst aus einem anderen Thread.

  • Um zu verstehen, warum diese Programme denselben Speicherplatz zu verwenden scheinen (was nicht der Fall ist), möchte ich einen Teil des Buches "Operating Systems:Principles and Practice" zitieren.

    Diese virtuellen Adressen sind also Übersetzungen physikalischer Adressen und stellen nicht denselben physikalischen Speicherplatz dar. Um ein praktischeres Beispiel zu hinterlassen, können wir einen Test durchführen, wenn wir ein Programm kompilieren und mehrmals ausführen, das die Richtung einer statischen Variablen anzeigt. wie dieses Programm.

    #include <stdio.h>
    
    int main() {
        static int a = 0;
    
        printf("%p\n", &a);
    
        getchar();
    
        return 0;
    }
    

    Es wäre unmöglich, dieselbe Speicheradresse in zwei verschiedenen Programmen zu erhalten, wenn wir uns direkt mit dem physikalischen Speicher befassen.

    Und die Ergebnisse, die durch mehrmaliges Ausführen des Programms erzielt werden, sind...


Ja, beide Prozesse verwenden dieselbe Adresse für diese Variable, aber diese Adressen werden von unterschiedlichen Prozessen verwendet und befinden sich daher nicht im selben virtuellen Adressraum.

Das bedeutet, dass die Adressen dieselben sind, aber nicht auf denselben physischen Speicher verweisen. Sie sollten mehr über virtuellen Speicher lesen, um dies zu verstehen.


Die Adresse ist dieselbe, aber der Adressraum nicht. Jeder Prozess hat seinen eigenen Adressraum, also ist 0x1370010 von Parent nicht dasselbe wie 0x1370010 von Child.