21

私は最近、低レベルの OS プログラミングに飛び込み始めました。私は現在 (非常にゆっくりと) 2 つの古い本、XINU と Build Your Own 32 Bit OS に取り組んでいます。また、以前の質問であるHow to get started in operating system development で素晴らしい SO の人々によって提案されたリソースもいくつか使用しています。

これらのリソースのいずれかでまだ遭遇していない可能性がありますが、おそらくこれらのリソースのほとんどがユビキタスなマルチコア システムの前に作成されたためですが、マルチコア/マルチプロセッサ システムで割り込みがどのように機能するのか疑問に思っています。

たとえば、ファイルの読み取り操作が完了したことを DMA が通知したいとします。割り込みが通知されたことを認識するプロセッサ/コアは? ファイルの読み取りを開始したのはプロセッサ/コアですか? 最初に到達するのはどちらのプロセッサ/コアですか?

4

2 に答える 2

6

IoConnectInterrupt関数を調べると、 InterruptServiceルーチン (ISR)の実行を許可する CPU を選択する ProcessorEnableMask を見つけることができます。
この情報に基づいて、低レベルのどこか ( Adam の投稿を参照) で、割り込みをルーティングする場所を指定できると想定できます。

補足として、ファイル操作は割り込みや dma とは直接関係ありません。ファイル操作はファイルシステムの概念であり、ファイルシステムが配置されているバスに応じて低レベルに変換されるファイルシステムの概念であり、IDE または SATA ディスクである場合もあれば、USB ストレージである場合もあります。この場合、セクター読み取りは USB バスを介した 3 つの論理操作に変換されます。 USBホストコントローラードライバーによって提供される割り込みになりますが、元のファイル読み取り操作とは実際には関係がなく、おそらく小さなトランザクションに分割されました。

于 2008-11-19T08:28:33.600 に答える
3

昔は、割り込みはすべてのプロセッサに行きました。現代では、特定のプロセッサに割り込みを送信するように、OS によってある種のハードウェアをプログラムすることができます。もちろん、プロセッサを静的ではなく動的に選択できる場合は、I/O を開始したプロセッサに割り込みを送信するのではなく、現時点で負荷が最も少ないプロセッサに送信する必要があります。次の I/O 操作を最も効率的に開始するか、現時点で最も負担が少なく、結果を待っていたスレッドを最も効率的に実行できるプロセッサを選択します。

于 2008-11-19T05:11:47.290 に答える