カーネルは常にリング 0 特権レベルで実行されると仮定します。スタック フォールト例外 (スタック オーバーフローまたは制限違反による) の場合、x86 IDT (割り込み記述子テーブル) のセットアップには、トラップ ゲート、割り込みゲート、およびタスク ゲートのうち、どのゲートを使用する必要がありますか?
X86 プロセッサでは、スタック フォールト例外ハンドラを呼び出す前に、スタックに eflags、CS、eip をプッシュするスタックが必要です。つまり、例外ハンドラを呼び出すために Stack スイッチが必要です。
スタック スイッチを実行する唯一の方法はタスク ゲートを使用することですか?
カーネル スタック フォールトのスタック フォールト ハンドラを作成する唯一の方法は、タスク ゲートを使用することですか?
インテルのマニュアルには次のように書かれています 。「新しい tss により、ハンドラーは例外または割り込みを処理するときに新しい特権レベル 0 スタックを使用できます。現在の特権レベル 0 スタックが破損しているときに例外または割り込みが発生した場合、タスク ゲートを介してハンドラーにアクセスすると、ハンドラーに新しい特権レベル 0 スタックを提供することで、システムのクラッシュを防ぎます。」
ご回答ありがとうございます。