Wenn ich ein Programm mit Threads habe und fork()
ein Unix-basiertes System aufrufe, werden die Threads kopiert? Ich weiß, dass der virtuelle Speicher für den aktuellen Prozess 1: 1 in den neu erzeugten Prozess kopiert wird. Ich weiß, dass Threads einen eigenen Stapel im virtuellen Speicher eines Prozesses haben. Daher sollte zumindest auch der Thread-Stapel kopiert werden. Ich weiß jedoch nicht, ob Threads mehr enthalten, die sich nicht im virtuellen Speicher befinden und daher NICHT kopiert werden. Wenn dies nicht der Fall ist, teilen sich die beiden Prozesse die Threads oder handelt es sich um unabhängige Kopien?
Von The Open Group Basisspezifikationen Ausgabe 7, 2018 Ausgabe der Gabel :
quelle
Ursprünglich wurde "Fork" erreicht, indem die Aufgabe auf die Festplatte geschrieben und dann, anstatt in einem anderen Thread zu lesen (was geschehen würde, wenn die Aufgabe durch einen anderen ersetzt würde), die Aufgaben-ID des noch im Speicher befindlichen Bildes geändert und fortgefahren würde mit seiner Ausführung (als neue Aufgabe). Dies war eine sehr einfache Modifikation des grundlegenden Mechanismus zum Umschalten von Aufgaben, bei dem jeweils nur eine Aufgabe RAM-Speicher belegen würde.
Mit zunehmender Ausarbeitung der Speicherverwaltung wurde dieses Schema natürlich an die neue Umgebung angepasst.
quelle