2

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

4

2 に答える 2

2

ほとんどのシステム コールには、コンテキストの切り替え (他のタスクが実行可能な場合) が含まれ、プロセッサの状態がカーネル モードに切り替えられます。

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

于 2012-03-15T22:21:16.470 に答える
1

Linux カーネルにとって、スレッドはプロセスです。そのため、カーネルは、プロセスの他のスレッドの 1 つが syscall を行った場合、そのスレッドには関心がありません。

于 2012-03-15T21:38:17.217 に答える