2013-08-21 8 views
15

プロセスから複数のスレッドを作成すると、各スレッドは独自のスタックを持ちますか、またはそれらが親プロセスのスタックを共有していますか。スレッドがシステムコールを行うとどうなりますか?スレッドはプロセスのような独自のカーネルスタックも維持していますか?各スレッドには独自のスタックがありますか?

+1

はいスレッド固有のスタックです!グローバル値はスレッド間で共有できます(ローカルではありません) –

+0

@GrijeshChauhanスレッドからシステムコールを行うとどうなりますか? –

+2

例えば 'open()'システムコールを呼び出してファイルを開くとします。 'int f = open()'を使うと、コースの 'f'はスレッドのローカルです。ファイルディスクリプタはスレッド間で共有されていることに注意してください。 'f'の値を知っていれば、別のスレッドでその値を使って同じファイルにアクセスすることができます(再度開く必要はありません) –

答えて

9

はいスレッドには独自のスタックと独自のカーネルスタック(Linuxなど)があります。

スレッドがシステムコールをすると、カーネルモードにトラップし(ユーザモードから)、引数をカーネルに渡し、引数がチェックされ、カーネルは実行する必要がある場合スタック)、最終値をスレッドに戻し、ユーザーモードに戻ります。

+0

カーネルはスタックなしで "どうすればいいの?" – avakar

+0

私の答えで明確にします – Joohwan

+2

カーネルスタックは、既存のモデルに追加されたセキュリティ対策です。マルチスレッドの前提条件は複数のスタックです。カーネルは、重要なデータが流出するのを防ぐために、ユーザ空間で何が起こっているのかをパラレルにします。 – Potatoswatter

関連する問題