私はx86で多くの経験を持っていますが、MIPSには何もありません。申し訳ありませんが、とにかく以下の説明が当てはまると思います。
二重障害は、非常に特定の状況でのみ発生します。例外ハンドラを開始しようとしたときに別の例外が発生すると、最初の例外が破棄され、代わりに二重障害例外ハンドラが呼び出されます。
単純な障害の例を次に示します。コードが無効なメモリにアクセスしようとする場合:
*(int *)0 = 0xdead;
次に、CPUはNULLポインター参照を検出し、メモリ障害ハンドラーの起動を試みます。これは、ユーザー(リング3)またはスーパーバイザー(リング0)コードにあり、二重フォールトは発生しません。CPUは、単純にメモリフォールトハンドラーを開始しようとします。
OSにバグがあり、メモリー障害ハンドラー自体が無効なメモリーにあったと想像してください。したがって、メモリー障害ハンドラーを開始しようとしたときに、別の障害が発生し、最初の障害を処理できませんでした。その後、二重障害ハンドラーが呼び出されます。(二重障害ハンドラーを開始しようとして障害が発生した場合、x86 CPUは単純に三重障害でシャットダウンします。PCハードウェアはこれを検出し、CPUをリセットします。)
障害ハンドラーが正常に開始されると、二重障害は発生しなくなるため、開始を繰り返し強調しました。最初の障害の処理が開始され、CPUが新しい障害を処理できるようになりました。CPUは、フォールトハンドラー内にあることを「記憶」せず、新しいフォールトが発生した場合に二重フォールトを引き起こします。
あなたの例では、フォルトハンドラが未定義のオペコードを使用しようとすると、その命令で未定義のオペコードフォルトハンドラが呼び出されます。これは二重障害ではなく、障害内の障害にすぎません。
もちろん、メモリフォールトハンドラーが起動し、処理中にメモリフォールトが発生した場合、メモリフォールトハンドラーが再起動されます。これにより、同じメモリ障害が再び発生する可能性があり、メモリ障害ハンドラが再起動されます-毎回、より多くのスタックを使用するたびに、最終的にスタック自体がオーバーフローします(x86では異なる障害ハンドラです)。