Linuxの割り込み再入

Linuxの割り込み再入

「Linuxデバイスドライバ、第3版」を読んでいますが、割り込みハンドラを説明する部分を完全に理解していません。私は何かを明確にしたいと思います:

  • Linuxの割り込みハンドラはプリエンプティブではありませんか?
  • Linuxの割り込みハンドラは再入できませんか?

上半身が実行されている限り、割り込みが無効になり、ハンドラが再び入ることができないという上下半分のモデルをよく理解していると思います。

しかし、優先順位の高い割り込みはどうですか?基本的なLinuxまたは特定のリアルタイム拡張でのみサポートされていますか?低い優先順位割り込みが高い優先順位割り込みによって中断されるとどうなりますか?

答え1

Linuxカーネルは、すべてのUNIXカーネルと同様に再入可能です。これは、CPUが複数のプロセスを実行できることを意味します。ディスクアクセスの読み取りが非常に遅いHDDコントローラによって処理されるのを待つ必要はありません。 CPUはディスクアクセスが完了するまで他のタスクを処理できます(そうであれば、それ自体が中断されます)。

通常、割り込みは他の割り込みによって中断(プリエンプション)される可能性があり、これを「ネストされた実行」と呼びます。アーキテクチャによっては、割り込みを完全にディセーブルにし、中断せずに(非プリエンプティブ)実行する必要があるいくつかの重要な機能がまだあります。 x86では、時間関連関数(time.c、、hpet.cxenなどがあります。

割り込みには「全割り込み許可」または「全割り込み禁止」という2つの優先順位しかないので、「高い優先順位割り込み」が2番目のようです。これは、Linuxカーネルが割り込み優先順位に関して知っている唯一の動作であり、リアルタイムのサイジングとは関係ありません。

割り込み可能割り込み(「低優先順位割り込み」)が他の割り込み(「高」または「低」)によって中断されると、カーネルは割り込みによって中断された古い実行コードを保存し、新しい割り込み処理を開始します。この「ネスト」は複数回発生する可能性があるため、複数レベルの中断が発生します。その後、カーネルは以前の割り込みから保存されたコードを再ロードし、古い割り込みを完了しようとします。

答え2

非線点型は、これらのハンドラを他の割り込みによって中断できないことを意味します。

非プリエンプティブハンドラの場合、再エントリは問題になりません。最初からこれを中断できないからです。

カーネルが何をしているのかについては、wagの答えを見てください。私はこのトピックについて彼ができるようにコメントすることはできません。

関連情報