Wenn ein übergeordnetes Element eine Fork verwendet, wird der untergeordnete Prozess in einem kontinuierlichen Speicherbereich erstellt.

888
ddmichael

Bei der Gabelung wird die genaue Umgebung des übergeordneten Prozesses kopiert. Ist dieser Speicherplatz in einem zufälligen Speicherplatz im RAM reserviert, oder der übergeordnete und der untergeordnete Prozess erhalten einen kontinuierlichen RAM-Speicherplatz (wie beispielsweise Array-Elemente)?

0
Lesen Sie Ihre gesamte Gabel-Manpage. Ich wette, Sie werden nicht feststellen, dass das Kind in einem solchen fortlaufenden Speicherbereich erstellt wird. Und was dann? uprego vor 10 Jahren 0
Ich denke nicht, dass diese Informationen in irgendeiner Weise in der Manpage enthalten sein sollten. ddmichael vor 10 Jahren 0
Benötigen Sie ein Betriebssystem, das nach Möglichkeit untergeordnete Prozesse neben seinen Eltern erstellt? uprego vor 10 Jahren 0
Nein, ich muss wissen, ob dies aus Neugier generell der Fall ist. Es muss einen Algorithmus für diese Zuordnung geben. ddmichael vor 10 Jahren 0
Ich werde versuchen (und Sie tun es vielleicht auch) die aktuelle Linux 3.13-Implementierung von Fork und versuchen, ein Beispiel zu geben [offensichtlich], das nicht auf andere Kernel anwendbar ist. Lassen Sie uns hoffen, dass uns ein bestimmter OS-Techniker über die allgemeinen Techniken aufklärt. uprego vor 10 Jahren 0
Diese SO-Frage (http://stackoverflow.com/questions/15315482/how-come-forked-processes-do-not-affect-each-other-hen-there-isa-global-pointe) könnte helfen . Varaquilex vor 10 Jahren 0
Seien Sie vorsichtig mit dem "Typ" des Speichers, nach dem Sie gefragt werden. Es gibt einen Unterschied zwischen "Adressen / Seiten des virtuellen Speichers" und den "Adressen / Seiten des physischen Speichers", die die virtuellen HINTERGRÜNDEN ... zum Beispiel. Der zusammenhängende Bereich virtueller Adressen für Ihr einfaches C-Array kann NICHT von den physischen Speicherseiten abhängig sein. Der Speicherplatz für den Benutzer ist wie folgt. Es sei denn, Sie verwenden spezielle Typen von Speicherzuordnungselementen, um nach bestimmten Seitenattributen zu fragen. Heston T. Holtmann vor 10 Jahren 0

1 Antwort auf die Frage

1
uprego

Wenn Sie es von kernel.org herunterladen und extrahieren (linux-3.13), können Sie feststellen, dass es in linux-3.13 / kernel / fork.c eine Reihe gut dokumentierter Funktionen gibt. Einer, do_fork (...), behauptet, die eigentliche Gabelung auszuführen. Hier ruft diese Funktion 'static struct task_struct * copy_process (...)' in der Zeile 1129 auf. Was Sie suchen, muss sich in der Nähe befinden.

OK hier, wie ich sehe, ruft die Funktion nach der Prüfung der Selinux-Berechtigungen 'dup_task_struct (...)' auf, was 'alloc_task_struct_node (...)', 'alloc_thread_info_node (...)' und 'arch_dup_task_struct (...)' aufruft. . In Anbetracht der Tatsache, dass 'alloc_task_struct_node (...)' "wenig mehr als das Aufrufen von kmem_cache_alloc_node (...)" bedeutet, und der Tatsache, dass diese Funktion in der Datei linux-3.13 / mm / slab.c deklariert ist, die auf den Speicher hinweist Management und die Tatsache, dass viele Kernel-Threads möglicherweise gegen Speicherverwaltungsaufgaben arbeiten (das Erstellen und Löschen von Strukturen kontinuierlich), würde ich wetten, dass insbesondere Linux keine normalen Prozessdatenstrukturen nebeneinander erstellt, da viele Threads dies tun die gleichen generischen Zuordnungen, die Fork verwendet .

Wenn Sie linux-3.13 / mm / slub.c öffnen, beginnt es mitzuteilen, dass es sich um einen Slab-Speicherzuweiser handelt. Eine Internet-Suchmaschine gibt diese Ergebnisse an: Wikipedia ... und lwn .