私は多くの多くのオーズ(といくつかのブートローダ)に見えましたが、プロテクトモードからリアルモードに切り替える前に割り込み(cli
)を無効にしています。それがなぜ必要なのか?リアルモードから保護モードに切り替える前に、割り込みを無効にする必要があるのはなぜですか?
5
A
答えて
9
BIOSはPIT割り込み(IRQ0)を使用して時間を追跡します。プロテクトモードに入ると、リアルモードの割り込み処理は無効になります。保護モードのCPUには保護モードIDT(割り込み記述子テーブル)が必要です。プロテクトモードに入ると、IDTR(IDTレジスタ)のIDT制限が0に設定され(割り込み番号によってCPUが例外を生成します)、PIT(または何か他のもの)が割り込みを生成すると、CPUは例外を生成します。 #DF(ダブルフォルト)をトリガーし、結果として#TF(トリプルフォルト)をトリガーする別の例外が生成されます。
また、プロテクトモードで発生しているIRQ0は、プロテクトモードの例外用に予約されているため、#DE(除算除算)ISR(割り込みサービスルーチン)をトリガします。
このような事態は、PIT割り込みより先に発生する可能性があります。本質的に任意の割込みで、それぞれ#DFと3重障害になります)。
- PEビットがCR0に設定されています。
- PIT割り込みが発生し、PIC(プログラマブル割り込みコントローラ)がピン#0上の信号を取得します。
- PIC再マッピングが設定されていないため、CPU上でIRQ0がトリガされます。
- IRQ0(= #DE)は割り込みハンドラを実行しようとしますが、IDTの制限は0なので、(IIRC)#GP(General Protection fault)が生成されます。
- IDTの制限は0なので、#DFが生成されます。
- IDTの制限は0なので、#TFが生成されます。
- CPUが停止または再起動します。
関連する問題
- 1. 割り込み中に割り込みを無効にする必要はありますか?
- 2. 誓約からモカに切り替える必要がありますか?
- 3. ここで割り込みを無効にするのはなぜですか?
- 4. 別のタブに切り替えると、挿入モードから通常モードに切り替わりますか?
- 5. なぜADOからADO.NETに切り替えるのですか?
- 6. syscallをカーネルモードに切り替える必要があるのはなぜですか?
- 7. はクラススコープを切り替える必要があります
- 8. システム起動時またはシステム初期化時にすべての割り込みを無効にする必要があるのはなぜですか?
- 9. ASP.NET MVCルーティングデバッガ - デバッガからアプリケーションに切り替えるために再コンパイルする必要はありますか?
- 10. Linuxのドライバでリアルモードに切り替える方法
- 11. なぜProGuard for vending.billingを無効にする必要がありますか?
- 12. 割り込みを無効にするとCPUスケジューリングが自動的に無効になりますか?
- 13. BigQueryテーブルを「読み取り専用モード」に切り替える
- 14. TextInputsを切り替えるのに2つのタップが必要です(1タップで切り替える必要があります)
- 15. PayPalライブに切り替えると「トランザクションが無効です」
- 16. jDeveloperでデバッグ・モードからノーマル・モードに切り替える方法は?
- 17. 保護モードでの割り込みの設定(x86)
- 18. 保護モードに切り替えて遠くにジャンプするとエラーが発生する
- 19. 割り込みから復帰するときにIRETを使用する必要がありますか?
- 20. CORSを無効にする必要がありますか?
- 21. Linuxでspin_lockとspin_unlockの間で割り込みが無効になっているのはなぜですか?
- 22. どの項目を一括割り当てから保護する必要がありますか?
- 23. Android:1.5カップケーキのアニメーションの切り替えを無効にする
- 24. jqueryでdivの背景を切り替える前にイメージを読み込み
- 25. フラグメントを切り替える:何らかのアクションを追加する必要がありますか?
- 26. .Call引数を保護する必要がありますか?
- 27. Kotlin:Kotlinデータクラスを保護する必要がありますか?
- 28. gulpからSCSSファイルを処理するwebpackに切り替えるには、ヘルプの設定が必要です
- 29. Androidスイッチ、切り替え前に有効にする
- 30. JavaScriptにHTTPとHTTPSの切り替えが組み込まれているのはなぜですか?
素晴らしい回答ありがとう! –
IRQ0は#DEをトリガしません。デフォルトでPICのIRQ0はBIOSによってINT8にマッピングされるため、#DFがトリガされます。 – Ruslan
@Ruslanこれは完全に任意の音です。どんなBIOSであれ、それを再マッピングすることができます。 #DFまたは#TF以外のベクトルは#DFをトリガし、#DFは#TFをトリガし、#TFはまあ... 7に直接ジャンプします。Btw。その特定のベクトルに何のBIOSを再マッピングするのですか?それについての言及はありますか、それは実験によって見つけられた単なる価値ですか? – Griwes