2012-02-22 13 views
13

私はLinuxカーネルの初心者です。
私はユーザー空間やカーネル空間で実行されている、2つのコンテキスト
1.プロセスのコンテキストがあることを知っている:どのような文脈のカーネルスレッドで
2.割り込みコンテキストカーネルスレッドはLinuxでどのようなコンテキストで動作しますか?

((元のシステムコールの一部として) ex:flushタスク)は実行されますか?

Linuxカーネルにプロセスコンテキストと割り込みコンテキスト以外のコンテキストはありますか?

答えて

15

カーネルスレッドは、カーネルスペースでprocess contextsで実行されます。割り込みを処理するいくつかのカーネルスレッドもありますが。それらはthreaded interrupt handlersと呼ばれます。しかし、彼らはまだプロセスのコンテキストで実行されます!

Hereは、2つのコンテキストの重要な違いの優れた説明です!

ここで理解を深めることができます。

What context does the scheduler code run in?

私の知る限りでは

、プロセスおよび割り込みのみ2つのコンテキストです。

+6

本質的にカーネル・スレッドの*ポイント*カーネルは、プロセスコンテキストでコードを実行できるようにすることであるが、直接ではなく、特定のユーザ空間に代わっプロセス。 – caf

+0

@Pavan:スレッド型割り込みハンドラ(softirqs)は割り込みコンテキストの特性を示します(スリープしないかもしれない)ので、プロセスコンテキストであると主張するのは矛盾します。 –

+0

@jørgensenhttp://www.kernel.org/doc/Documentation/gpio.txtのGPIOドキュメントを読むと、「そのようなGPIOにアクセスするには、スリープ状態になる可能性のあるコンテキストが必要です。例えば、スレッドされたIRQハンドラだから、スレッド化された割り込みハンドラが正しくスリープできることを意味しますか?あなたはsoftirqsについて正しいです。しかし、スレッド式割り込みハンドラの唯一の種類ではありません。それともスレッド割込みハンドラと言っても、実際にはsoftirqsを参照していますか? –

0

システムコールによって呼び出されることも、割り込みを処理することもない特定のタスクがあります。そのようなものは純粋なカーネルコンテキストとして扱われます。例えばswapperやINIT_TASkなど、ユーザー空間で対応するコードを実行していないものなどです。

1

いくつかの州がありますが、いくつかは他国の専門家である場合もあります。また、http://www.kernel.org/doc/htmldocs/kernel-hacking.htmlを参照してください。

  • NMIコンテキスト(in_nmi()
  • ハード割り込みコンテキスト(in_irq()
  • ソフト割り込みコンテキスト(in_softirq()
  • (タスクレット、タイマー、およびワークキューコンテキスト)
  • 原子コンテキスト(in_atomic())。おそらく入り口は、とりわけspin_lockです。
  • RCUコンテキストは、例えばrcu_read_lockと入力
  • ユーザコンテキスト
関連する問題