/ kmallocが返すアドレスの物理アドレス - linux、linux-kernel、メモリアドレス、仮想メモリ、kmalloc

kmallocが返すアドレスの物理アドレス - linux、linux-kernel、メモリアドレス、仮想メモリ、kmalloc

kmallocから返されるアドレスについて少し混乱しました。 仮想メモリマップ私が得ているアドレスは ffff880000000000 - ffffc7ffffffffff つまり、「すべての物理メモリの直接マッピング」です。このマッピングはどのように機能しますか? kmallocが単に物理アドレスを返さないことは確かです。

回答:

回答№1の場合は3

あなたが正しい、 kmalloc 物理アドレスではなく仮想アドレスを返しています。あなたがリンクしているメモリマップは、 バーチャル メモリマップではなく 物理的 メモリマップ

仮想アドレスは通常、に変換されます。アドレスにあるデータにアクセスするときのMMUによる物理アドレス。仮想アドレスの変換先は、カーネルによって指定されたメモリマップによって異なります。

リンクしたメモリマップは、Linuxがどのようにマッピングを行うのかを示しています。間に仮想アドレスがある場合は、 0xffff880000000000 そして 0xffffc7ffffffffff物理メモリのどこかにマッピングされています(DMAを実行しているのでない限り、正確にどこにいるのかわからないし、気にしません)。