割り込み割り込み

割り込み割り込み

私は割り込み処理がどのように機能するかを知っています(モード切り替え、レジスタ保存、スタック変更...)。しかし、ユーザーモードではなくカーネルモードの間に割り込みが発生した場合はどうなりますか?

ベストアンサー1

まったく同じです。ただし、割り込みを処理している場合は、完了するまで何もないか、何もない可能性があります。

あらゆる状況で私たちがすること:

  • 無条件モードを保存し、モードを管理モードに設定します。 (ハードウェアによって実行されます。割り込みによってトリガされます)
  • 無条件状態の保存とスイッチスタック
  • 割り込みコードの実行
  • 無条件スタック、回復状態、回復モードの切り替え

「モードを管理者モードに設定」というフレーズは、次のいずれかに解釈できます。

  • モードがスーパーバイザーモードであることを確認してください。
  • ステータスレジスタのSビットに1を書き込みます。

割り込み割り込み

いくつかの(しかし制限的な)割り込み優先順位レベルがあるかもしれません。各レベルにはスタックがあります。割り込みは、優先順位の高い割り込みによってのみ中断できます。優先順位の低い割り込みは、優先順位の高い割り込みによってブロックされる可能性があります。これにより、スタックが破損しないことを除いて、ほとんどの問題が解決されます。

ただし、優先順位の低い割り込みはブロックされる可能性があります(ユーザープロセスを含めます。これは優先順位の最も低い割り込みです)。したがって、特に優先順位の高い割り込みの場合は、割り込みが速い(コードが多い)確認することが非常に重要です。タスクを実行して終了し、優先順位の低い割り込み(ユーザープロセスなど)が時間のかかるタスクを実行するようにします。

スタック

プロセスがカーネルを呼び出すと、カーネルはプロセスと同じスタックを使用できます(同期呼び出し:プログラムコードでシステムコールを使用)。

カーネルは、各割り込み優先度レベルのスタックも提供します。割り込みセクションを参照してください。

おすすめ記事