ARM 例外と割り込み (4)

邪魔をして

割り込み (Interrupt) メカニズム、つまり、プロセッサはプログラムの命令フローを順次実行する過程で他の要求によって突然割り込まれ、現在のプログラムの実行を一時停止し、他の処理に切り替えます。前のプログラムが中断された場合でも、前のプログラムの命令フローを継続して実行します。

割り込み要求、割り込みソース

プロセッサによるプログラム命令フローの実行を中断する「その他の要求」を割り込み要求 (Interrupt Request) と呼び、「その他の要求」の発生源を割り込みソース (Interrupt Source) と呼びます。周辺機器。

割り込みサービスルーチン

プロセッサが処理する「その他のもの」は、割り込みサービス ルーチン (割り込みサービス ルーチン ISR) と呼ばれます。

シーンの保存、シーンの復元

割り込み処理は通常のメカニズムであり、エラー状態ではありません。プロセッサは割り込み要求を受信した後、現在のプログラムのシーンを保存する必要があります。これを、略してシーンの保存と呼びます。割り込みサービス ルーチンを処理した後、プロセッサは以前に中断されたプログラムの実行を続行するために、前のシーンを復元する必要があります。これは復元シーンと呼ばれます。

割り込み調停、割り込み優先

複数の割り込みソースがプロセッサへのリクエストを同時に開始する状況が発生する可能性があるため、どの割り込みソースを優先するかを選択するためにこれらの割り込みソースを調停する必要があります。この状況は割り込み調停と呼ばれ、異なる割り込みに優先順位を割り当てることができます。アービトレーションのため、割り込みには割り込み優先順位の概念があります。

ネスティングを中断する

プロセッサが割り込みを処理している場合 (割り込みを実行している ISR で)、この時点でより高い優先順位を持つ新しい割り込み要求が到着します。プロセッサは 2 つの場合にそれをどのように処理しますか

  • 1 つ目の可能性は、プロセッサが新しい割り込みに応答せず、現在処理中の割り込みサービス プログラムの実行を継続し、それが完全に完了するまで新しい割り込み要求に応答しないことです。これは、プロセッサが割り込みのネスティングをサポートしていないと呼ばれます。 。
  • 2 番目の可能性は、プロセッサが現在の割り込みサービス ルーチンを一時停止し、新しい割り込みへの応答を開始し、新しい割り込みの割り込みサービス ルーチンを実行して、割り込みのネストを形成することです (つまり、前の割り込みの応答が完了しておらず、新しい割り込みへの応答の開始)、ネスト レベルには多くのレベルを含めることができます。

ノート:

  • 新しい割り込み要求の優先順位が、処理中の割り込みの優先順位より低い(または同じ)と仮定すると、プロセッサが割り込みネスティングをサポートしているかどうかに関係なく、プロセッサはこの新しい割り込み要求に応答すべきではないことに注意してください。新しい割り込み要求への応答は、現在の割り込みサービス ルーチンが完了した後に考慮する必要があります (新しい割り込み要求の優先順位は現在処理中の割り込み優先順位より高くないため)。

異常な

例外 (Exception) メカニズム、つまり、プロセッサがプログラム命令ストリームの逐次実行中に突然異常イベントに遭遇し、現在のプログラムの実行を一時停止し、例外の処理に切り替わる仕組みです。

  • プロセッサが遭遇する「例外的なもの」を例外(Exception)と呼びます。例外と割り込みの最大の違いは、割り込みは多くの場合外部原因であるのに対し、例外はプロセッサ内の内部イベントや、ハードウェア障害、プログラム障害、不正な命令、特別なシステムサービス命令の実行などのプログラム実行時のイベントによって引き起こされることです。 . 要するに内部原因が原因です
  • 割り込みサービス ルーチンと同様に、プロセッサも例外サービス ハンドラーに入ります。
  • 割り込みと同様に、複数の例外が同時に発生する可能性があるため、例外にも優先順位があり、複数の例外の入れ子も発生する可能性があります。

広い意味での異常

前のセクションで述べたように、割り込みと例外の最大の違いは、内部要因と外部要因です。さらに、割り込みと例外は、プロセッサにとって基本的に 1 つの概念です。
割り込みと例外が発生すると、プロセッサは現在実行中のプログラムを一時停止し、その後、割り込みと例外ハンドラを実行します。復帰すると、プロセッサは以前に一時停止したプログラムを再開します。
したがって、割り込みと例外の区分は狭い区分です。大まかに言うと、割り込みも例外も広義の例外と考えられます。プロセッサの広義の例外は、通常、同期例外 (Synchronous Exception) と非同期例外 (Asynchronous Exception) にのみ分けられます。プロセッサによっては、広義の例外をトラップと呼ぶ場合もあります。

同期例外

同期例外は、プログラムの命令ストリームの実行または実行の試行によって発生する例外です。この例外の原因は、実行された命令を特定することができます。
同期例外のもう 1 つの一般的な現象は、プログラムが同じ環境で何度実行されても、毎回正確に再現できることです。
例えば、プログラムフロー中に不正な命令があった場合、プロセッサがその不正な命令を実行すると、プロセッサは不正な命令例外(Illegal struction Exception)を生成しますが、この例外はこの不正な命令の位置を正確に特定でき、繰り返し再現することができます。

非同期例外

非同期例外とは、その原因を命令に特定できない例外です。
非同期例外のもう 1 つの一般的な症状は、プログラムが同じ環境で何度も実行され、各例外の命令 PC が異なる可能性があることです。
最も一般的な非同期例外は外部割り込みです。外部割り込みの発生は周辺デバイスによって引き起こされます。一方で、外部割り込みの発生は偶然です。他方、割り込み要求がプロセッサに到達すると、プロセッサのプログラム命令フローは、どの命令が偶発的に実行されるか。したがって、割り込みの到来により、ある「実行中の不幸な命令」に偶然遭遇することがあり、その命令が「バックアップ要員」となる。命令 PC が配置されている場合、プログラムは実行を停止し、割り込みに応答して割り込みサービス ルーチンの実行を開始します。ただし、プログラムが繰り返し実行される場合、同じ命令が繰り返し「バックアップ」される正確な状況を実現することは困難です。
非同期例外の場合、例外に応答した後のプロセッサの状態に応じて、次の 2 つのタイプに分類できます。

正確な非同期例外

これは、例外に応答した後のプロセッサの状態が、特定の命令の境界、つまり特定の命令が実行された後のプロセッサの状態を正確に反映できることを意味します。外部割り込みは、最も一般的な完全な非同期例外です。

不正確な非同期例外

これは、例外に応答した後のプロセッサの状態が特定の命令の境界を正確に反映できないことを意味します。つまり、特定の命令が途中で実行されて中断された結果、またはその他のあいまいな状態が原因である可能性があります。メモリの読み取りおよび書き込みのエラーは、一般的な不正確な非同期例外です。たとえば、キャッシュにデータを書き込み、その後、長時間後にキャッシュが置き換えられ、外部メモリに書き戻されますが、外部メモリに書き戻すとエラーが返されます。エラー。この時点で、プロセッサは後続の数百または数千の命令を実行している可能性がありますが、どの命令がこのアドレスのキャッシュに書き込まれたかを正確に特定することは不可能です。

例外処理プロセス

ここに画像の説明を挿入
この記事は主に「CPU-RISC-V プロセッサの設計方法を教えます」について言及しています。

おすすめ

転載: blog.csdn.net/tyustli/article/details/131462385