- ベストアンサー
割り込みについての理解方法と手順
- タイマーや通信機器、I/Oアクセスなどのイベントが起きると、割り込みコントローラーがそれを検知し、CPUに割り込みをかけるまでの手順を知りたいです。資料や参考サイトがあれば教えてください。
- 割り込みについての詳細な手順を知りたいです。具体的には、タイマーや通信機器、I/Oアクセスなどのイベントが発生した際に、どのようなシーケンスが行われるのかを知りたいです。資料や参考サイトがあればお教えください。
- 割り込みに関して詳しく学びたいです。タイマーや通信機器、I/Oアクセスなどのイベントが発生した場合、割り込みコントローラーがそれを検知し、CPUに割り込みをかけるまでの一連の手順を知りたいです。参考になるサイトや資料があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>1. >割り込み許可・禁止命令は、CPUが割り込みコントローラーに通知して、割り込みコントローラー >がCPUの割り込み信号を有効・無効にしているのでしょうか? 割り込みコントローラーは無関係。 割り込みコントローラーの役目は「割り込みの交通整理」だけです。 割り込みコントローラーは、CPUが割り込み禁止状態か、割り込み許可状態か、どっちになってるかなんて知りません。 CPUが割り込み禁止命令を実行すると、CPUのステータスレジスタの割込許可フラグがクリアされ、フラグがクリアされている間はCPUは割り込みを先送りします。 CPUが割り込み許可命令を実行すると、CPUのステータスレジスタの割込許可フラグがセットされ、割り込みを処理するようになります。 なお、一部のCPUには、ステータスレジスタに割り込みの禁止許可の状態を表すフラグを持っていない物もあります。 >2. >あと、既にご返答して頂いた件ですが、 >バスラインとCPUの割り込み信号は、別々配線でしょうか? 「バスライン」の定義を再確認して下さい。バスラインは、データバス、アドレスバス、制御信号バスなど、色々な信号線の束の事を言います。 割り込み信号は、通常、制御信号バスの中にあって、制御信号バスはバスラインの一部を構成する要素です。 >プログラムとは、デバイスドライバーのことでしょうか? デバイスドライバーに限った話ではありません。一部のOSでは、デバイスドライバーがOSとハードウェアの橋渡しをしていますが、デバイスドライバーが存在しないOSもあるし、デバイスドライバーを無視してI/Oを直接制御しようとするアプリケーションも存在します。 割り込み制御は、Windowsなどの「狭い世界」に限定した話ではないので、狭い世界の事は忘れて下さい。 >リセット命令を出すのは、割り込みコントローラーでしょうか? 割り込みコントローラーは「割り込みの交通整理をするだけ」なので、デバイスの状態を変化させるような事はしません。 デバイスの初期化を行うのは(行えるのは)CPUだけです。 >3. >割り込みコントローラーで割り振っている優先順位(0-15)ですが、BIOSなどで、PCIデバイスなどは >同じIRQ番号を共有していますが、他のバスデバイス、タイマーなどはメニューにございませんでした。 >本来、割り込みの優先順位は、どのように設定されているのでしょうか? それぞれのハードウェアに依存しますので「こうする」と言う決まりはありません。 通常「CPUがすぐに応答しないと困る物」の優先順位が高くなっています。 >あと、ACPI OSの場合、OSのIRQ情報を割り込みコントローラーが参照しているようですが >参照のタイミング、方法が、もしお分かりになればご教授頂けないでしょうか? その辺りの仕様は「使っている割り込みコントローラーに依存する」ので、コントローラーチップのデータシートを読んで下さい。 >4. >デバイスの割り込み線が割り込みコントローラーに配線されて、割り込みコントローラーから >CPUへは割り込み信号線が配線されていると思います。 感じ的には「そんな感じ」ですね。 >一連の流れを知りたいとき、ご推薦の書籍、ウェブサイトがございましたらご教授頂けないでしょうか? CPUのアーキテクチャブックを読むのが一番でしょう。古いのなら和訳されてるのもあります。 --- こういうのを勉強する際は「これは一般的な技術」「これはWindowsパソコンに限った技術」ってのを、きちんと把握しておく必要があります。 じゃないと、アーキテクチャやOSが違う物になった時に「トンチンカンな話」になっちゃって「ああ、このOSでは、そんな事してない。全然違うんだ」って指摘されて、恥をかきます。
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>ここで質問ですが、仮にCPUでI/Oアクセスの処理をしていて、優先順位の高いSVCコールがおきたとき、 >I/Oアクセスなど制御をしていたハードウェア割り込みコントローラーへは、どのような作用をするのですか? 通常「一連のI/Oアクセス」を行っている場合、アクセスタイミングが非常にシビア(アクセスを中断できない)なので、一連のアクセスを行う前に「割り込み禁止命令」を実行し、他の割り込みを一切受け付けない状態にします。 そして「一連のアクセス」が終了し、処理を中断しても良い(処理を邪魔されても良い)タイミングになった所で「割り込み許可命令」を実行します。 割り込み禁止中に発生した割り込み(優先度が低いのはもちろん、優先度が高い物も)は、割り込み許可命令が実行されるまですべてペンディングされ、許可した次の瞬間に(優先度が高い物から順に)割り込みが発生します。 つまり、プログラムで「ここから先、邪魔するな」って命令を実行してから、ハードウェアアクセスをして、邪魔が入っても問題ない状態になったら「邪魔してもいいよ」に戻す訳です。 但し「割り込み禁止モード」に入っても「NMI(ノンマスカブルインタラプト。マスク出来ない割り込み)」「例外」「リセット」は発生しますから、割り込みがまったく入らないと言う訳ではありません。 そういった訳で「一連のI/Oアクセス中は、優先度が高いスーパーバイザコールが起きてもペンディングされ、一連のI/Oアクセスが終わるまで、邪魔が入らない」ようになっています(プログラマーが「割り込み禁止命令を入れ忘れた」ってミスを犯さない限り、ですが) 蛇足ですが「PCがフリーズする」って言う状態は「どこかで割り込み禁止命令を実行して、バグやハードウェア不良で無限ループに入ってしまった場合」に起きます。 例えば「割り込み禁止にしてから、I/Oを監視して、どこかのビットが変化するまで待つ」って言う処理で、バグやハード不良で「変化するはずのビットが何時までも変化しない」と言う状況になると、そこで無限ループに入り、割り込みも一切受け付けないので「フリーズ状態」になります。 なお、NMI、例外、リセット直後は、ハードウェアが「どんな状態になっているか判らない(アクセスの途中でCPUがアクセスを止めちゃったかも知れない)」ので、ハードウェアに対して「リセット命令を出す」「リセット信号をアクティブにする」などして、I/Oを強制リセットします。
お礼
ご返答いただきましてありがとうございます。 一連の流れを詳しく知りたいので、再度質問させてください。 1. 割り込み許可・禁止命令は、CPUが割り込みコントローラーに通知して、割り込みコントローラー がCPUの割り込み信号を有効・無効にしているのでしょうか? 2. あと、既にご返答して頂いた件ですが、 >「CPUに割り込みをかける」とは、具体的には「バスラインに割り込み番号を乗せる」→ 「CPUの割り込み信号をアクティブにする」→「CPUが割り込みを受け取ったか調べ、 受け取ったら割り込み信号をネガティブにする」と言う作業。 バスラインとCPUの割り込み信号は、別々配線でしょうか? >プログラムで「ここから先、邪魔するな」って命令を実行してから、ハードウェアアクセスをして、 邪魔が入っても問題ない状態になったら「邪魔してもいいよ」に戻す訳です。 プログラムとは、デバイスドライバーのことでしょうか? >NMI、例外、リセット直後は、ハードウェアが「どんな状態になっているか判らない (アクセスの途中でCPUがアクセスを止めちゃったかも知れない)」ので、 ハードウェアに対して「リセット命令を出す」「リセット信号をアクティブにする」などして、 I/Oを強制リセットします。 リセット命令を出すのは、割り込みコントローラーでしょうか? 3. 割り込みコントローラーで割り振っている優先順位(0-15)ですが、BIOSなどで、PCIデバイスなどは 同じIRQ番号を共有していますが、他のバスデバイス、タイマーなどはメニューにございませんでした。 本来、割り込みの優先順位は、どのように設定されているのでしょうか? あと、ACPI OSの場合、OSのIRQ情報を割り込みコントローラーが参照しているようですが 参照のタイミング、方法が、もしお分かりになればご教授頂けないでしょうか? 4. デバイスの割り込み線が割り込みコントローラーに配線されて、割り込みコントローラーから CPUへは割り込み信号線が配線されていると思います。 一連の流れを知りたいとき、ご推薦の書籍、ウェブサイトがございましたらご教授頂けないでしょうか? 以上 質問が多くて申し訳ございません。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか? SVCコール(スーパバイザコール)の実装は、CPU、OSに依存します。 SVCコールが具体的にどのように行われるかは、CPUごと、OSごとに異なります。
お礼
大変申し訳ございませんが、再度、質問させてください。 Intel CPUシステムで、Windowsを使用している場合のSVCコールですが、OSのAPCIコンポーネントにレジストしている IRQ情報をベースにAPICソフトウェア割り込みコントローラーがCPUに割り込み処理しているようです。 ここで質問ですが、仮にCPUでI/Oアクセスの処理をしていて、優先順位の高いSVCコールがおきたとき、 I/Oアクセスなど制御をしていたハードウェア割り込みコントローラーへは、どのような作用をするのですか? 検討違いな事でしょうか? もしお分かりになればお知恵を貸してください。 以上
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>コントローラーが検知して、どのようなコンポーネントを通して、CPUへ割り込みをするかまでは理解できませんでした。 割り込みコントローラーがやる作業は、デバイスからの割り込み要求を交通整理して、CPUに割り込みをかけるだけ。 「交通整理」とは「割り込み中に、もっと優先順位が高い割り込みがあったから、そっちを優先させる」とか「優先順位が低いから、今やってる割り込み処理が終わるまで待たせる」とか「今は誰も割り込んでないから、割り込みを許す」とか「優先順位が一緒だから、先着順に割り込みを起す」とかって作業。 「CPUに割り込みをかける」とは、具体的には「バスラインに割り込み番号を乗せる」→「CPUの割り込み信号をアクティブにする」→「CPUが割り込みを受け取ったか調べ、受け取ったら割り込み信号をネガティブにする」と言う作業。 この時の「バスラインに乗せる割り込み番号」は、デバイスごとに決まっていて、BIOS起動時や、デバイスドライバソフトのロード初期化時に、デバイス本体と割り込みコントローラに番号がセットされます(デバイスによっては番号が固定の物もあります) CPUは、割り込み信号がアクティブになると、CPUの全レジスタを退避し、バスラインに乗った割り込み番号を読み込んでから、割り込みモードに入り、その番号に対応した割り込みベクタから「ジャンプ先」を求め、そこにジャンプします。 ジャンプした先は「割り込みコントローラ用のデバイスドライバソフトの中」で、そこに「割り込みを受けたら何をするか」のプログラムがあります。 CPUの割り込み処理ルーチンの最後には「割り込みモードを終了して、元に戻りなさい」っていうCPU命令が書いてあります。 CPUは、その命令に従って、退避してあったレジスタをすべて元に戻し、割り込みが起きる直前に実行していた命令の次の位置から処理を再開します。
お礼
chie65535さん、 お世話になります。 >出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後の マスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが........ マイコン入門書を探します。ご迷惑をおかけして申し訳ありません。無視してください。 申し訳ございませんが、もう一つ質問させてください。 OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか? 以上 宜しくお願い致します。
補足
簡潔明瞭なご説明ありがとうございます。 出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後のマスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが参考サイトなどがございましたら、ご教授頂けないでしょうか? 以上 宜しくお願い致します。
- DIooggooID
- ベストアンサー率27% (1730/6405)
この辺りの記事では、いかがですか? http://www.glamenv-septzen.net/view/633#id075f05
お礼
お礼が遅れて申し訳ありません。ご丁寧な回答をありがとうございました。