2013-08-21 8 views
15

Wenn ich mehrere Threads von einem Prozess erstellen, hat dann jeder Thread seinen eigenen Stapel, oder teilen sie sich den Stapel ihres übergeordneten Prozesses. Was passiert, wenn ein Thread einen Systemaufruf tätigt? Behalten Threads auch ihren eigenen Kernel-Stack wie Prozesse?Hat jeder Thread seinen eigenen Stack?

+1

ja threadspezifischer Stack !, globale Werte können unter Thread geteilt werden (lokal nicht) –

+0

@GrijeshChauhan Was passiert, wenn wir einen Systemaufruf von einem Thread ausführen? –

+2

zum Beispiel, wenn Sie 'open()' Systemaufruf aufrufen, um eine Datei zu öffnen. mit 'int f = open()' dann ist natürlich 'f' lokal zu thread. Beachten Sie jedoch, dass die Dateideskriptoren zwischen den Threads geteilt werden. Wenn Sie den Wert von "f" kennen, können Sie diesen Wert in einem anderen Thread verwenden, um auf dieselbe Datei zuzugreifen (Sie müssen nicht erneut öffnen). –

Antwort

9

Ja-Threads haben ihre eigenen Stacks und ihre eigenen Kernel-Stacks (z. B. Linux).

Wenn ein Thread einen Systemaufruf macht, trapft man in den Kernelmodus (vom Benutzermodus), übergibt die Argumente an den Kernel, die Argumente werden überprüft, der Kernel tut es (im Kernel) stack), gibt den endgültigen Wert zurück an den Thread und Sie kehren zum Benutzermodus zurück.

+0

Wie macht der Kernel "ohne es zu tun" ohne einen Stack? – avakar

+0

Ich werde in meiner Antwort zu klären – Joohwan

+2

Der Kernel-Stack ist nur eine Sicherheitsmaßnahme auf ein bereits vorhandenes Modell hinzugefügt. Mehrere Stacks sind eine Voraussetzung für das Multithreading. Der Kernel bietet im Wesentlichen eine parallele Version dessen, was im Benutzerbereich passiert, um zu verhindern, dass sensible Daten austreten. – Potatoswatter

Verwandte Themen