3

割り込みベクターは、割り込みハンドラーのメモリアドレス、または割り込みハンドラーのメモリアドレスを含む割り込みベクターテーブルと呼ばれる配列へのインデックスです。割り込みが生成されると、オペレーティング システムはコンテキスト スイッチを介してその実行状態を保存し、割り込みベクターで割り込みハンドラーの実行を開始します。

質問があります。ほとんど検索していませんが、まだ答えがありません。

割り込みベクタは RAM に格納されていますか? また、RAM に格納されている場合、誰がそれを RAM に設定しますか? OS?

4

4 に答える 4

2

それはフラッシュにあります。RAMにはありません。レジスタは RAM にあります。RAMがすべてのデータを保存するためです。ただし、FLASH はすべてのプログラムを格納するためのものです。また、割り込みベクタは Compiler によって生成されます。

于 2012-12-03T00:20:45.800 に答える
2

interrupt vector is the memory address of an interrupt handler

メモリはRAMと同義であるため、RAMに格納されている割り込みベクトルです.デバイスドライバーが割り込みハンドラー関数を登録したい場合は、適切なOS呼び出しを呼び出す必要があります(Linuxの場合request_irqs)、エントリを作成します割り込みベクタ テーブル。このエントリは、割り込みハンドラ関数がメモリ/RAM に存在する場所を指します。割り込みベクタテーブルを管理するのはOSです。

したがって、その特定の割り込みが発生するたびに、割り込みハンドラー関数が呼び出されます。

于 2012-11-16T20:49:52.777 に答える
0

ハードウェアによって異なります。

CPUが割り込みでジャンプできるアドレスが1つしかない場合、それがROMかRAMかは、システムがCPUを中心に構築したメモリマップによって異なります。事前定義された割り込みベクタテーブルについても同様です。CPUが割り込みテーブルのベースアドレスの設定を許可している場合、それは明らかにOS次第です。

一般的に言って、Windowsのようにディスクから完全にロードされるOSは、明らかにそれをRAMに保持します。

部分的または全体的にROMに格納されているOSは、通常、実行時に変更できるように、ベクターテーブルをRAMに保持します。8ビットAcornMOSのような非常に制約があり、明確に定義されたシステムでは、ソフトウェアがハードウェアを完全に制御したいと考える可能性があるためです。メモリが機能する場合、その特定のシステムは、メモリマップの基本により、ROMにハードウェアベクトルを持っています。しかし、そこにルーチンを配置し、RAMを介してソフトベクトル化します。それで、それは非常に慎重な決定でした。

従来のMacOSのような比較的広々としたシステムでは、事後にROMにパッチを適用できるためです。マシンの出荷後に特定の割り込みルーチンにバグが見つかった場合は、ルーチンのRAM置換をロードし、ベクトルテーブルを変更するOSアップデートが発行される可能性があります。これは、システムへのすべての呼び出しが割り込みに類似したトラップメカニズムを使用するため、MacOSで特に役立ちます。

于 2012-11-16T20:52:51.393 に答える
-1

最新のWindowsOSのPCでは、割り込みベクトルは割り込み記述子テーブル(IDT)に格納されます。このテーブルがどこにあるかは、LIDT命令(ロード割り込み記述子テーブル)を使用して確認できます。ただし、コードを特権レベルゼロ(リングo)で実行できない限り、そこで値を変更することはできません。MicrosoftとIntelは、コードセグメントレジスタを変更するすべての命令として、Windowsではほとんど不可能にするように共謀しています( CS)リング0は、ユーザープログラムに対してブロックされます。そのため、WINTELは、アウストラロピテクスのように、進化論的には行き止まりになっている可能性があります(私は願っています)。基本的に、PCは単なるスマート端末にすぎません。何かを制御するなどの実際の作業を行うには、それらを自分のマシンの端末として使用する必要があります。

于 2012-11-19T20:59:59.937 に答える