PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Threads und fork()



lin
30.01.04, 09:00
Hi,

ich muß folgende Frage beantworten:

Falls ein Prozess mit mehren Threads ein fork ausführt, kann es zu einem Problem kommen, wenn das Kind von allen Threads des Elternprozesses eine Kopie erhält.
Angenommen einer der original Threads hatte auf eine Tastatureingabe gewartet.
Dann warten jetzt zwei Threads auf die Tastatureingabe, einer in jedem Prozess.
Kann das Problem auch in Prozessen auftreten, die nur aus einem einzigen Thread bestehen?
Begründen Sie Ihre Aussage.

Währe folgende Antwort korrekt im Sinne der Aufgabe, oder gäbe es noch mehr
dazu zu sagen:

Das Problem tritt bei Prozessen, die nur aus einem einzigen Thread bestehen nicht auf, da dieser eine Thread zum Zeitpunkt des fork – Aufrufes nicht gleichzeitig auf eine Tastatureingabe (blockierend) warten kann.

MfG (-:

geronet
30.01.04, 09:29
Seitwann bekommt der neue Thread (Prozess) alle anderen Kinder-threads mitgeschenkt wenn man forkt? Wär ja schmarrn, so könnte man nie drei Threads erzeugen.

Grüsse, Stefan

peschmae
30.01.04, 11:06
Ju, Threads unter Linux sind nämlich nur eine spezielle Art Prozesse (mit ein bisschen weniger Overhead

MfG Peschmä

lin
30.01.04, 19:10
Hi!

In Linux werden Threads nachgebildet indem statt dem fork() der clone() - Funktions-
aufruf verwendet wird. Dadurch können sich Prozesse den gleichen Adressbereich,
geöffnete Dateien usw. gemeinsam teilen, eine Eigenschaft die normalerweise
Threads ein und desselben Prozesses besitzen. Dabei handelt es sich um eine
Notlösung, um eben diese Eigenschaft von Threads nachzubilden. Ab
Linuxkernelversion 2.6 werden Threads nun direkt vom Kernel unterstützt. Threads
sind immer Bestandteil eines Prozesses. Es sind zwar eigenständige Prozesse in
Linux, aber die Eigenschaften von Threads werden nachgebildet und darauf kommt es an.
Aber das nur nebenbei.
Worum es in der Aufgabe geht, ist die Tatsache, wenn ein Prozess dupliziert wird,
dann erbt der Kindsprozess alle Eigenschaften des Vaterprozesses, so auch die
Threads. Wartet einer der Threads z.B. auf eine Tastatureingabe und ist dadurch
blockiert, wird dies auch der Thread des Kindsprozesses sein. Beinhaltet der Prozess
nur einen Thread, wird meine Antwort schon richtig sein. Ich dachte halt nur, dass
evtl. noch jemand etwas mehr dazu beitragen könnte. Schließlich kann man auch
noch in verschiedene Implementierungen unterscheiden und zwar in User-Level- und
Kernel-Level-Threads und meinetwegen auch noch die Lösung für Linux bis Kernel
2.6. Obwohl letzteres ohne weitere Bedeutung ist, da es eine Nachbildung ist, mit
entspr. Nachteilen, z.B. hinsichtlich Prozesshierarchie und gemeinsame Nutzung der
Signale usw. Es soll aber auch Leute geben, die gewisse Vorteile in dieser Lösung
sehen (-;
Die Frage bezieht sich auch eher allgemein auf Unix - Betriebssysteme.
Ich persönlich nutze lieber FreeBSD als Linux, es sagt mir von der Administration usw.
eher zu.
MfG