
私はLinuxカーネルが使用するメモリアドレスの種類を理解しようとしています。
- ユーザー仮想アドレス
- 実際の住所
- バスアドレス
- カーネル論理アドレス
- カーネル仮想アドレス
私は次のことを理解しています:
ユーザー仮想アドレス:ユーザーが見ているアドレスはRAMにない場合もあり、スワップアドレスでもかまいません。
実際の住所:すべてのメモリアドレスは、任意の形式で物理アドレスを表す必要があります。物理アドレスは直接形式です。
同様に:カーネル論理アドレスとカーネル仮想アドレス。
バスアドレスと要件を理解できません。
説明が素直な場合は、参考資料が役に立つ可能性があります。
答え1
ほとんどのシステムでは、物理アドレス空間はさまざまな「デバイス」にマッピングされます。そのうちの1つはシステムRAMで、もう1つはPCIバスと同じです。バスアドレスは、マッピングされたバスのアドレスピンに実際に配置された値であり、通常は物理アドレスから取得されるビット範囲です。他のバスピン(チップの選択や読み書きなど)は、物理アドレスからフェッチまたはフェッチできません。これはデバイスをバスに接続する「メモリマップされた」方法ですが、唯一の方法ではありません。たとえば、Intelプロセッサにはデバイスと通信していることを示す特別なI / O命令があり、物理アドレスには役割がありません。これに。この場合、バスアドレスは命令に符号化されるか、レジスタに常駐する。乾杯!
マレー...