14

これは、「Intel Architecture Software DeveloperManual」の例外と割り込みの表(IDTとして理解しています)です。

例外と割り込み

コンテキスト切り替えを可能にするタイマー割り込みはどこにありますか?(マルチタスク用)

これがばかげた質問であるならば、私の理解を直してください。前もって感謝します

4

2 に答える 2

11

そうですね、従来の8254 PITタイマーについて話している場合、それはベクトル32であるIRQ0にあります。しかし、これは最近のマシンのLinuxオペレーティングシステムではタイマーとして一般的に使用されていません。[32のベクトル割り当ては実際にはかなり恣意的であることに注意してください。これは、8259(PIC)またはAPICをプログラミングするときに設定されますが、予約されたベクトルの後の最初のベクトルは32であるため、悪い選択ではありません。DOSのように、ハードウェア割り込みを例外ベクトルと混合するよりも確かに優れています。したがって、INTR 5(INT0がマップされているため、ベクトル13)から一般保護違反(上記の表のベクトル13)を区別する方法はありませんでした。ベクトル8に、および5 + 8 = 13)。メモリからは、INTR5は特によく使用されていませんでした-LPT2のようなもの:( 2番目のパラレルポート)。しかし、それでもそれらをオーバーラップさせないことは良い考えです...「予約済み」のヘンク

システムのタイミングを実際に制御するIRQは、ローカルAPICタイマーである可能性が高く、そのベクトルは、元のPCと同じようにハードウェアで固定されていません。

また、「メッセージ信号による割り込み」の出現により、256を超える割り込みベクトルを持つことが完全に可能になりました。

「ベクトル0-19はマスク不可割り込みです」という表現に同意しません。NMI(ベクトル2)を除いて、それらはすべて例外(別名TRAPSまたはFAULTS)です。つまり、システム内の何らかのエラー条件によって引き起こされるイベントです。ベクトルゼロはゼロ除算の結果であり、ベクトル1は「」です。シングルステップ」命令割り込み[および「有効なデバッグレジスタに一致する任意のアドレスへの書き込み」などの他のいくつかの「デバッグ」トラップ]、ベクトル3は「int3」命令(オペコード0xcc)の結果であり、ベクトル4は「INTO」を実行した結果(オーバーフローの場合のように「o」であり、0ゼロのように)。ページテーブルに存在するとマークされていないメモリにアクセスする場合、ベクトル14が使用されます。それらは確かに「マスク不可」ですが、いくつかの例外を除いて、その時点で実行されたインストラクターの直接的な結果であるため、プログラム自体と同期しています。

例外は「ダブルフォールト」例外と「マシンチェックフォールト」です。

ダブルフォールトとは、プロセッサが別の例外の処理中にフォールトを検出した場合です。通常、オペレーティングシステムがスタックを無効な場所に設定するなどの問題を実行したため、ページフォールトが発生し、スタックを使用してスタックを格納しようとします。ページフォールトのリターンアドレスであり、スタックにアクセスできないため失敗します。したがって、二重障害ハンドラーは「タスクスイッチ割り込み」として設定される傾向があり、二重障害が継続できることを確認するために新しいスタックをロードします。二重障害ハンドラーが正しく実行できない場合、プロセッサーは「三重障害」を起こします。これは通常、PCプラットフォームでの「再起動」を意味します。通常、二重障害は回復できません。ハンドラーは、何が起こったのか、どのようにしてこの状態になったのかについての情報を提供しますが、それが完了すると、

マシンチェック障害は、プロセッサが回復不能なエラー(回復不能なメモリエラーやキャッシュパリティエラーなど)を検出する場合です。これらも通常は回復不可能ですが、実行中の命令と直接結合することはできませんが、イベント(メモリの内容が悪くなったアドレスのメモリ読み取りなど)。

于 2013-01-23T14:16:54.250 に答える
4

ハードウェアタイマー割り込みの割り込みベクトルは、外部割り込みであるため、IRQ 0 =INT32です。

0〜19はマスク不可割り込み、20〜31はIntelが予約する必要があり、32〜127は外部割り込み(IRQ)です。ハードウェア時間はIRQ0として接続する必要があるため、ここではベクトル番号は32である必要があります。

于 2013-01-23T13:40:47.187 に答える