ポートマップIOとメモリマップIOの違いについて読みましたが、最新のオペレーティングシステム(WindowsまたはLinux)でメモリマップIoがどのように実装されているのか理解できません。
私が知っているのは、物理メモリの一部がハードウェアとの通信用に予約されており、バス通信やその他のメモリ関連の処理に関与するMMIOユニットがあることです。
ドライバーは基本的なハードウェアとどのように通信しますか?ドライバーが使用する機能は何ですか?ビデオカードと通信するためのアドレスは固定されていますか、それとも使用する前に何らかの「同意」がありますか?
私はまだかなり混乱しています
あなたの質問の次のステートメントは間違っています:
What I know is that a part of the physical memory is reserved to communicate with the hardware
物理メモリの一部は、ハードウェアとの通信用に予約されています。物理メモリとメモリがマッピングされている物理アドレス空間の一部IOがマッピングされています。メモリレイアウトは永続的ですが、ユーザープログラムはそれを直接認識しません。代わりに、カーネルがマップすることを決定できる独自の仮想アドレス空間に実行されます、必要に応じて、物理メモリとIO範囲。
ほとんどの質問への回答が含まれていると思われる以下の記事を読むことをお勧めします。
http://en.wikipedia.org/wiki/Memory-mapped_I/O
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped.html
本質的には、あたかもあなたがメモリから保存/読み取りを行っているかのように、それはデータにアクセスするための単なる形式です。しかし、ハードウェアはアドレスバス上でスヌープし、そのアドレスがターゲットになっているのを見ると、データバス上のデータを受信するだけです。
メモリマップファイル、またはメモリマップポートIOについて質問しますか?
メモリマップされたファイルは、ページをページングし、ページフォールトをそれらのアドレスにインターセプトすることによって行われます。これはすべて、OSがファイルシステムマネージャーとページフォールトハンドラーの間のネゴシエーションによって行います。
メモリにマップされたポートIOは、アドレスラインをポートIOラインとしてオーバーロードすることにより、CPUレベルで実行されます。これにより、メモリへの書き込みをポートIOとしてQPIバスラインに変換できます。これはすべて、マザーボードと対話するプロセッサによって行われます。 OSが行う必要のある他の唯一のことは、MMUに、PAEのライトスルーとキャッシュなしのビットを介して読み取りと書き込みを統合しないように指示することです。