私はLinuxシステム(32ビット、4 GB RAM)で作業していますが、Linuxのメモリアドレッシングについていくつかの矛盾する情報が見つかりました。
私はこう言うのは正しいですか?
仮想メモリだけがカーネルスペースとユーザースペースを区別します。 32ビットシステムでは、仮想メモリサイズは4 GBです。ユーザースペースは3GB、カーネルスペースは1GBです。
ただし、物理メモリのアドレスや場所がわからないアドレスもあります。 - 参照ZONE_NORMALとカーネル/ユーザーページとの関連付けは何ですか?。
このホームページから物理メモリもカーネル空間とユーザ空間に違いがあると説明してください。
私はPCIeを使用していますが、BARが物理アドレスを持つことがどのように可能であるか疑問に思います。
これは、PCIeデバイス用に予約されたスペースがあることを意味します。この空間はどこにありますか?
物理メモリには特別な構造がありますか?参考資料を見つけましたここ図16の構造を示すことができる。
このBARアドレスを仮想アドレスに変換していますが、どのように可能ですか?
また、一部の参照では、すべてのプロセスがすべての仮想アドレスを使用できると言います。そうですか?それでは、この事実を上記の事実とどのように組み合わせますか?
答え1
両方ユーザーそしてコアLinuxの仮想メモリは物理メモリにマップされます。
ユーザーまたはカーネル仮想スペースからマップされていない物理メモリーを割り当てることができます。たとえば、仮想→物理ページテーブルをマップします。
BIOSは、オペレーティングシステムで利用できない物理メモリを介して起動時に利用可能なメモリマッピングを提供できます。
PCIベースアドレスレジスタ参照メモリは、PCI(e)デバイスのアドレス指定可能なメモリ範囲へのルーティングを提供します。ある意味、これは物理メモリからこれらのアドレス指定可能なメモリ範囲を盗む。 4GB RAMを搭載した32ビットシステムでは、穴を開ける物理RAMでは、アドレス指定可能なスペース全体がアドレス指定可能な物理RAMです。システムの悪用PAE「失われた」RAMを利用するために状況を並べ替えることができます。
一部のデバイスでは、オンボードGPUなどのシステムメモリにメモリがマッピングされている場合があります。彼らはPCIeを活用します山道連続したMMIOアドレスセットを物理RAMにマップします。 BIOSは、これらの範囲をオペレーティングシステムで利用できないメモリとして表示します。