8

ISR (Interrupt Service Routine) と関数呼び出しの違いを理解したい。

関数呼び出しも ISR もハードウェア的には同じような気がします。間違っている場合は修正してください。ISR と関数呼び出しについて私が見つけたのは次のとおりです。

ISR:

  • プログラムの実行中にいつでも発生する可能性のある非同期イベント

  • PC、フラグ、およびレジスタをスタックに保存し、すべての割り込みを無効にして、ISR のアドレスをロードします。

  • ISR に渡すことができる引数を持つことはできません

  • 値を返すことはできません
  • 割り込みを有効にします
  • 他のプロセスに時間がかかっているため、通常は小さい
  • 一部の ISR には独自のスタックがあります

関数:

  • 関数呼び出しがあるたびに発生します

  • PCとレジスタをスタックに退避

  • 引数を持つことができます

  • 値を返すことができます

  • 実行のサイズと期間に制限なし

これ以外に違いはありますか?私にお知らせください。また、ISR からの関数呼び出しがどのように行われるかについても読みました。その上でハイライトしてください。

4

4 に答える 4

2

主な違いは、割り込みハンドラーが (通常) 周辺ハードウェアによって呼び出されることです。実際のハードウェア信号は周辺機器によって生成され、プロセッサ内のハードウェアは、割り込みの前に実行されていたコードによるアクションなしで、制御を適切なハンドラーに転送します。 . 関数とは異なり、呼び出しはありません。実行は、プロセッサ ハードウェアによって中断されたコードから取り除かれます。

マルチスレッド/プロセスをサポートする OS では、関数呼び出しは、呼び出し元と同じプロセス/スレッド コンテキスト内で行われます。割り込み OTOH には、スレッドまたはプロセス コンテキストがありません。Word 文書の編集中に、バックグラウンドでの BitTorrent ダウンロードに起因するネットワーク割り込みが発生する可能性があるため、ハンドラーができることは非常に限られています。バインドされているプロセス/スレッドに属する事前に割り当てられたバッファーとの間でデータをロードしたり、セマフォを通知したり、OS イベントフラグを設定したりできます。それはそれについてです。

多くの場合、割り込みハンドラーは割り込みリターンを直接実行するため、中断されたコードの実行はそれ以上の干渉なしに続行できます。複雑な OS なしで組み込みコードを実行することが多い yopur 8051 のような単純なコントローラーでは、これが利用可能な唯一のコースです。プリエンプティブなマルチスレッド OS では、割り込みハンドラーには、OS コードを介して割り込みからの復帰を実行する追加オプションがあり、スケジューラーが実行されます。これにより、割り込みハンドラーは、割り込みを待機していたスレッドを実行可能にし、場合によっては実行することができます (したがって、最初に中断されたスレッドをプリエンプトする可能性があります)。これにより、そのようなシステムは、ポーリングなしで優れた I/O パフォーマンスを実現できます。

ハードウェア割り込みソースは、プロセッサ チップに組み込まれた周辺機器 (ネットワーク コントローラー、ディスク コントローラー、ディスプレイ コントローラー、DMA コントローラー、USB コントローラー、コア間通信コントローラー (複数のコアを搭載したプロセッサー上))、タイマーなど、または割り込み要求ピン/パッケージの s を使用して、外部ハードウェア ソース (プッシュボタン、キーボード、キーパッド、タッチスクリーン ハードウェアなど) から割り込みを生成できます。

于 2013-07-21T09:16:25.907 に答える
1

上記の回答はほぼ完全です...クリフォードによるソフトウェア割り込みへの特別な注意。

私が作る唯一の追加はこれです。関数呼び出しで格納されるレジスタ コンテキストは、CPU アーキテクチャのプロシージャ呼び出し規約によって定義されます。これは通常、呼び出し元がスタックに何かを保存し、呼び出し先がいくつかのものを保存し、ほとんど静的なセットであることを意味します。例外: レジスタの保存/復元の動的ウィンドウを持つ IA64。

ISR では、保存される唯一のレジスタ コンテキストは、ISR で使用されるものです。1 つのレジスタが使用されている場合は、そのレジスタのみが保存/復元されます。

ほとんどの CPU では、関数呼び出しで保存/復元されるレジスタ セットは、プロシージャ呼び出し規則の静的な性質により、ISR で保存/復元されるレジスタ セットよりもはるかに大きくなります。

于 2013-08-13T20:40:16.010 に答える