
タイマー、通信機器、I/Oアクセスなどのイベントが起きて、それを割り込みコントローラーが検知して、
CPUへ割り込みをかけるまでのレジスター操作、バスコンポーネントなどシーケンスを段階的に知りたいのですが参考サイトなどがございましたら、ご教授頂けないでしょうか?
出来ましたらブロック図や回路図などもあると、理解がしやすと思われます。
PICが搭載されたマイコンやIntelプラットフォームなど、何でも結構です。
Intelデベロッパーズマニュアルを読んでいたのですが、レジスター操作のことは記載がありましたが、
コントローラーが検知して、どのようなコンポーネントを通して、CPUへ割り込みをするかまでは理解できませんでした。
以上
宜しくお願い致します。
No.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では、そんな事してない。全然違うんだ」って指摘されて、恥をかきます。
No.4
- 回答日時:
>ここで質問ですが、仮に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へは割り込み信号線が配線されていると思います。
一連の流れを知りたいとき、ご推薦の書籍、ウェブサイトがございましたらご教授頂けないでしょうか?
以上
質問が多くて申し訳ございません。
No.3
- 回答日時:
>OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか?
SVCコール(スーパバイザコール)の実装は、CPU、OSに依存します。
SVCコールが具体的にどのように行われるかは、CPUごと、OSごとに異なります。
大変申し訳ございませんが、再度、質問させてください。
Intel CPUシステムで、Windowsを使用している場合のSVCコールですが、OSのAPCIコンポーネントにレジストしている
IRQ情報をベースにAPICソフトウェア割り込みコントローラーがCPUに割り込み処理しているようです。
ここで質問ですが、仮にCPUでI/Oアクセスの処理をしていて、優先順位の高いSVCコールがおきたとき、
I/Oアクセスなど制御をしていたハードウェア割り込みコントローラーへは、どのような作用をするのですか?
検討違いな事でしょうか?
もしお分かりになればお知恵を貸してください。
以上
No.2
- 回答日時:
>コントローラーが検知して、どのようなコンポーネントを通して、CPUへ割り込みをするかまでは理解できませんでした。
割り込みコントローラーがやる作業は、デバイスからの割り込み要求を交通整理して、CPUに割り込みをかけるだけ。
「交通整理」とは「割り込み中に、もっと優先順位が高い割り込みがあったから、そっちを優先させる」とか「優先順位が低いから、今やってる割り込み処理が終わるまで待たせる」とか「今は誰も割り込んでないから、割り込みを許す」とか「優先順位が一緒だから、先着順に割り込みを起す」とかって作業。
「CPUに割り込みをかける」とは、具体的には「バスラインに割り込み番号を乗せる」→「CPUの割り込み信号をアクティブにする」→「CPUが割り込みを受け取ったか調べ、受け取ったら割り込み信号をネガティブにする」と言う作業。
この時の「バスラインに乗せる割り込み番号」は、デバイスごとに決まっていて、BIOS起動時や、デバイスドライバソフトのロード初期化時に、デバイス本体と割り込みコントローラに番号がセットされます(デバイスによっては番号が固定の物もあります)
CPUは、割り込み信号がアクティブになると、CPUの全レジスタを退避し、バスラインに乗った割り込み番号を読み込んでから、割り込みモードに入り、その番号に対応した割り込みベクタから「ジャンプ先」を求め、そこにジャンプします。
ジャンプした先は「割り込みコントローラ用のデバイスドライバソフトの中」で、そこに「割り込みを受けたら何をするか」のプログラムがあります。
CPUの割り込み処理ルーチンの最後には「割り込みモードを終了して、元に戻りなさい」っていうCPU命令が書いてあります。
CPUは、その命令に従って、退避してあったレジスタをすべて元に戻し、割り込みが起きる直前に実行していた命令の次の位置から処理を再開します。
この回答への補足
簡潔明瞭なご説明ありがとうございます。
出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後のマスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが参考サイトなどがございましたら、ご教授頂けないでしょうか?
以上
宜しくお願い致します。
chie65535さん、
お世話になります。
>出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後の
マスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが........
マイコン入門書を探します。ご迷惑をおかけして申し訳ありません。無視してください。
申し訳ございませんが、もう一つ質問させてください。
OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか?
以上
宜しくお願い致します。
No.1
- 回答日時:
この辺りの記事では、いかがですか?
http://www.glamenv-septzen.net/view/633#id075f05
参考URL:http://www.glamenv-septzen.net/view/633#id075f05
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C-Builder OnChangeをマスク
-
電車で待機列の割り込みについ...
-
(H8マイコン)タイマ割込で変更...
-
H8マイコンで割り込みが任意の...
-
マイコン C言語 割り込み処理...
-
一定時間操作がなかったら、と...
-
【組込み】割り込み中のstatic...
-
H8/3052F/IRQを使った割り込み
-
ショッピング
-
割り込みハンドラの処理の簡素化
-
このレジの並び方は間違ってま...
-
CPU負荷率の安全な上限と計...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
winsockでソケット通信の開発を...
-
メッセージボックスのボタン名変更
-
VB.NETで起動したExcelの閉じ方...
-
DoEvents関数って何?
-
C言語で、メモリを解放しないで...
-
ACCESS側からEXCELの書式を設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
電車で待機列の割り込みについ...
-
CPU負荷率の安全な上限と計...
-
PIC16F84Aから16F628Aの...
-
【組込み】割り込み中のstatic...
-
コールバック関数について
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
スーパーのレジで並んでいたら...
-
VB.NET スレッドからのイベント...
-
割り込みについて
-
一定時間操作がなかったら、と...
-
PICマイコンでエンコーダパルス...
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
PICマイコン 割り込み実行時間...
-
ロータリーエンコーダがうまく...
-
SH7727(SH3-DSP)
-
VBAのDoEventsが上手く動きません
-
割り込みの入り方。考え方。
おすすめ情報