Linuxは、I / Oポートを介したデバイスへの読み取り/書き込みと比較して、周辺機器のメモリへのmmapの違いを認識しているかどうか疑問に思いました。アセンブリクラスで学んだことから、メモリアドレス指定と同じ観点からI/Oポートアドレス指定をほぼ検討しました。ですから、デバイスが接続されているポートのI / Oに接続するのかどうか疑問に思っていたと思いますが、同じことがそのデバイスのメモリに影響を及ぼしているのでしょうか。
ありがとう
Linuxは、I / Oポートを介したデバイスへの読み取り/書き込みと比較して、周辺機器のメモリへのmmapの違いを認識しているかどうか疑問に思いました。アセンブリクラスで学んだことから、メモリアドレス指定と同じ観点からI/Oポートアドレス指定をほぼ検討しました。ですから、デバイスが接続されているポートのI / Oに接続するのかどうか疑問に思っていたと思いますが、同じことがそのデバイスのメモリに影響を及ぼしているのでしょうか。
ありがとう
I/Oポートはメモリではありません。一部のハードウェア(グラフィカルカードなど)は、I / Oポートバスだけでなく、メモリバスを介してインターフェイスされます。
メモリインターフェイスを備えたハードウェア(つまり、CPUに対するメモリの範囲と見なされる)の場合は、を使用できますmmap
。
X11サーバーXorg
は非常に頻繁にグラフィカルカードをmmapしています。
OPは3つのことを混乱させていると思います。
mmap()は、アプリケーションプログラムがページレジスタやMMUに対していくつかの操作を実行するための方法です。
メモリマップドI/Oは、ハードウェアアーキテクチャの概念です。I/ O用に個別のバスと操作を使用する代わりに、アドレス空間の一部の領域をI/O操作専用にします。(68Kプロセッサー・ファミリーは、メモリー・マップドI / Oを使用し、IBMのAIX、IIRCも使用します)。
DMAは、CPUだけでなく、I / Oデバイスも物理メモリ(の一部)との間で読み取りおよび書き込みを行えることを意味します。
vm_area_struct
含むvm_flags
フィールド。特別なマッピングの場合、それはVM_PFNMAP
またはVM_IO
フラグを含みます。LXRのstructvm_area_struct、VM_PFNMAP、およびVM_IOの定義を参照してください。