この記事では、 ISR そして 関数呼び出し ですが、違いについて説明する前に、ISR と関数呼び出しについて簡単に知っておく必要があります。
ISRとは何ですか?
割り込みサービス ルーチン (ISR) は、割り込みに応答してハードウェアが呼び出すソフトウェア ルーチンです。 ISR は割り込みを調べ、その処理方法を決定し、実行して、論理割り込み値を返します。それ以上の処理が必要ない場合、ISR はカーネルに戻り値を通知します。 ISR は、デバイスの動作や優先度の低いすべての ISR の動作の低下を避けるために、非常に高速に実行する必要があります。
ISR は、CPU レジスタまたはハードウェア ポートからメモリ バッファにデータを移動する場合がありますが、一般に、必要な処理のほとんどは、割り込みサービス スレッド (IST) と呼ばれる専用の割り込みスレッド (またはタスク) に依存します。追加の処理が必要な場合、ISR は論理割り込み値をカーネルに返します。次に、物理割り込み番号を論理割り込み値にマッピングします。
割り込み処理の仕組み
以下は、次のようなステップでの割り込み処理のメカニズムです。
- 割り込みは、CPU に現在のプログラムを一時停止させ、ISR を実行させる条件です。 ISR は、割り込みの原因となった状態に対処するために特別に作成されたプログラムです。
- 割り込みが処理された後、CPU は、終了した次の命令から正確にメイン プログラムに戻ります。
- 割り込み駆動のデータ転送では、I/O デバイスがデータ転送の準備ができるたびに、CPU に割り込みが発生します。 ISR では、CPU がデータ転送を実行します。
- この方法は、CPU が I/O デバイスのステータスをチェックするために時間を無駄にする必要がないため、ポーリングよりも優れています。キーボードは、割り込み駆動の I/O アクセスの良い例です。
- CPU をチェックする代わりに、キーが押されたときにキーボードが CPU に割り込む必要があります。したがって、ユーザーがまったく入力していないときにキーボードを繰り返しチェックするのに時間が無駄になることがなくなります。
- I/O デバイスは、 $overline{INTR}$ CPUに信号を送ります。
- CPUが受信するたびに $overline{INTR}$ 信号が送信されると、現在の命令の実行が完了し、ISR が実行されます。 CPU の準備が完了すると、CPU はアクノリッジ信号を送信します。 その間 ライン。
- ISR が実行され、CPU はメイン プログラムに戻ります。
- I/O デバイスの電源がオフになります。 $overline{INTR}$ 実行後のシグナル。
例えば: 以下の例では、割り込み駆動 I/O による I/O 転送が行われます。
- プロセッサーとのデータ転送を実行したい I/O デバイスがプロセッサーに割り込む必要がある場合。
- 割り込みは、プロセッサに割り込みサービス ルーチンを実行させる条件です。
- ISR では、プロセッサは I/O デバイスとのデータ転送を実行します。
この例では、キーボードのキーを押してリクエストを中断し、
- プロセッサがキーが押されたかどうかを確認する代わりに、キーが押されたときにキーボードがプロセッサに割り込みます。
- キーボード ドライバー ソフトウェアの一部であるキーボードの ISR では、プロセッサがキーボードからデータを読み取ります。
ISRの利点
ISR には次のような利点があります。
- ISR 非同期イベントは、プログラムの実行中にいつでも発生する可能性があります。
- ISR は、PC、フラグ、レジスタをスタックに保存し、すべての割り込みを無効にして、ISR のアドレスをロードします。
- ISR には、渡すことができる引数を持つことはできません。
- ISR は値を返すことができません。
- ISR は割り込みを有効にします。
- 一般に、ISR は他のプロセスの時間がかかるため、小さくなります。
- 一部の ISR には独自のスタックがあります。
関数呼び出しとは何ですか?
関数呼び出しはサブルーチン呼び出しとも呼ばれます。サブルーチンは、プログラムによって繰り返し必要とされる一連の命令です。これは、特定のタスクの実行を担当する、より大きなプログラムの一部です。より大きなプログラムは重いワークロードを実行する可能性があり、サブルーチンは残りのプログラム コーディングから独立した単純なタスクのみを実行する可能性があります。
関数は、異なる場所から (他の関数内からも) 複数回呼び出すことができる方法でコーディングされます。関数が呼び出されると、プロセッサは関数のコードが存在する場所に移動し、関数の命令を 1 つずつ実行します。関数が完了すると、プロセッサは中断した場所に正確に戻り、次の命令から実行を継続します。
関数はコードを再利用するための優れたツールです。最新のプログラミング言語の多くは関数をサポートしています。関数の集合を「」といいます。 図書館 。ライブラリは、ソフトウェアの共有および取引の手段としてよく使用されます。場合によっては、プログラム全体が一連のサブルーチンになることがあります。
8086 プロセッサの場合、サブルーチンは 電話 命令によって制御が戻ります。 右 命令。プログラムのサイズが小さくなります。
10mlからオンス
ISR と関数呼び出しの違い
関数は明示的に呼び出す必要があり、呼び出し元と同じコンテキストおよび実行スレッドの一部です。ハードウェア ISR は明示的に呼び出されるのではなく、何らかの外部イベントによって呼び出されます。現在のスレッドのコンテキストは、コンテキストを ISR に切り替える前に割り込みが呼び出されるときに自動的に保存されます。
その代わりに、リバース コンテキスト スイッチが発生し、割り込み前のプロセッサの状態が復元され、割り込み時点から実行が継続されます。以下に、ISR と関数呼び出しの違いをいくつか示します。
ISR | 関数呼び出し |
---|---|
割り込みは通常、命令の実行ではなく、内部または外部の信号マイクロプロセッサによって開始されます。 ISR は、プログラムの現在のステータスをスタックに保存した後に実行されます。 ISR は、中断されたデバイスまたはプログラマが作成した命令に応じて、さまざまなタスクを実行します。 | 関数呼び出しは、特定のタスクを実行してプログラムのサイズを削減する命令を実行することによって呼び出されます。 |
ハードウェアは ISR のアドレスを決定します。 ISR アドレスは割り込みベクタテーブル内に記述されており、各割り込みの ISR アドレスは固定されています。 | サブルーチンのアドレスは、メイン プログラム コード内に記述される命令内に記述されます。 |
ISR はすべての汎用タスクに使用されます。 | 関数呼び出しは、プログラム固有のタスクに対して行われます。 |
したがって、現在のプログラムの実行中に割り込みが発生した場合、プロセッサは現在の命令の実行後に ISR を実行します。 ISR の実行後、プロセッサは割り込みが発生する前とまったく同じようにプログラムを再開する必要があります。 このために、PC の内容、µP レジスタ、およびいくつかのステータス条件が保存されます。マイクロプロセッサ内のすべてのステータス ビットの状態を集めたものを PSW (プログラム ステータス ワード) と呼びます。
| ここでは、メイン プログラムの次の命令のアドレスを取得するために、PC のみがスタックに格納されます。 サブルーチンは、呼び出し元のサブルーチンからのデータにアクセスし、そのサブルーチンに結果を返す必要があります。このため、サブルーチンのパラメータとデータの連携が行われます。 これは次の方法で実行できます
|