Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 例外と割り込みのLinux処理

例外と割り込みのLinux処理

  

1。例外処理

Linuxは、例外を使用して2つの異なる目的を達成します。

·プロセスにシグナルを送り、異常な状況を知らせます

·ハードウェアリソースの管理< Br>

たとえば、プロセスが0で除算を実行した場合、CPUは「除算エラー」例外を生成し、対応する例外ハンドラは現在のプロセスにSIGFPEを送信します。シグナル現在のプロセスがこのシグナルを受け取った後、エラーから回復するか実行を終了するために必要な多くのステップを踏みます(このシグナルに対応するシグナルハンドラがない場合)。

2番目のケースでは、カーネルは2つの例外を使用してハードウェアリソースを効率的に管理します。対応するハンドラはより複雑です。この場合、例外はエラー状態を示すものではありません。

·浮動小数点レジスタのロードを延期するには、 "Device Unavailable"例外を使用します。

· [ページについて]例外を使用して、新しいページフレームをプロセスに投稿します。

カーネルには、例外ハンドラ呼び出しの標準構造があり、次の3つの部分から構成されています。

·ほとんどのレジスタの内容をカーネルスタックに保存します(アセンブリ言語で実装)。

· Cの例外ハンドラを呼び出します。

· ret_from_exception()を使用して例外を終了します。

カーネルでの例外処理の詳細はここでは説明しません第6章「メモリ管理」では、「ページアウト」例外ハンドラについて説明しますが、ここでは割り込み処理について説明します。

2。割り込み処理

割り込みが発生したとき、すべての操作が同じ緊急度を持つわけではありません。実際、すべての操作を割り込みハンドラ自体に含めることは適切ではありません。割り込みハンドラが実行されているときは、対応するIRQ割り込みラインで再発行された信号は無視されるため、長時間を必要とする長く重要でない操作はプッシュバックする必要があります。さらに重要なことに、割り込みハンドラはプロセスに代わって実行され、それが表すプロセスは常にTASK_RUNNING状態になっている必要があります。したがって、割り込みハンドラは、I /Oデバイス操作などのブロッキングプロセスを実行できません。そのため、Linuxでは、割り込みによって実行される操作は、次の3つのカテゴリに分類されます。

(1)Critical(

割り込みが到着したときの割り込みコントローラなどの操作確認し、割り込みコントローラまたはデバイスコントローラを再プログラムするか、またはデバイスとプロセッサの両方がアクセスするデータ構造を変更します。これらの操作は緊急であり、非常に迅速に実行する必要があります。つまり、緊急操作は割り込みハンドラ内で直ちに実行する必要があり、割り込みは無効になります。

(2)重要ではない

プロセッサだけがアクセスできるデータ構造の変更などの操作(たとえば、キーのスキャン後にスキャンコードを読み取るなど)。これらの操作も非常に迅速に行われるため、割り込みハンドラによってただちに実行されますが、割り込みは有効になっています。

(3)重要ではない延期

この操作は、たとえば、バッファの内容を一部のプロセスのアドレス空間にコピーします(たとえば、キーボードラインバッファ)。コンテンツは端末ハンドラのプロセスに送信されます。これらの操作は、カーネル操作に影響を与えずにより長い時間遅らせることができます。関心のあるプロセスは必要なデータを待ちます。緊急ではない遅延可能な操作は、「下半分」(下半分)と呼ばれる多数の機能によって実行されます。次のセクションで「下部」について説明します。

すべての割り込みハンドラは、4つの基本操作を実行します。

· IRQ値とレジスタの内容をカーネルスタックに保存します。

· IRQ割り込みラインに接続されている割り込みコントローラに確認応答を送信します。これにより、この割り込みラインでさらに割り込み要求を発行できます。

·このIRQを共有しているすべてのデバイスに対して割り込みサービスルーチン(ISR)を実行します。

· ret_from_intr()のアドレスにジャンプして終了します。

Copyright © Windowsの知識 All Rights Reserved