2012-03-15 32 views
2

私は複数のスレッドを持つプロセスを持っています。私のスレッドの1つがgettimeofday()のようなシステムコールを呼び出すと、カーネルはそのスレッドをコンテキストから切り離してシステムコールを処理するだけですか、それともプロセス全体(そして他のすべてのスレッド)をコンテキストから切り離しますか?スレッドがシステムコールを呼び出すときのコンテキスト切り替え

+0

Linuxは1:1スレッドです。システムコールですべてのスレッドを切り替えるN:1やM:Nのような他のものについては、[Wikipediaのスレッドモデル](http://en.wikipedia.org/wiki/Thread_%28computing%29#Models)を参照してください。 1≦some≦allが影響を受ける可能性があります。 – ephemient

答えて

2

ほとんどの場合、system callsにコンテキスト切り替え(他のタスクが実行可能な場合)があり、プロセッサの状態をカーネルモードに切り替えることがあります。

しかし、gettimeofday(たとえば、getpid())は珍しいです。最近のカーネルでは、それを避けるためにVDSOを使用しています(そして、syscallまたはsysenter命令をカーネルモードに切り替えることさえも避けます)。

1

Linuxカーネルのスレッドはプロセスです。そのため、カーネルはプロセスの他のスレッドに興味がなく、そのうちの1人がシステムコールを作成します。

関連する問題