我对kmalloc回复给我的地址感到有点困惑。根据{{3}},我得到的地址位于ffff880000000000
- ffffc7ffffffffff
范围内,因此“直接映射所有内存”。这个映射如何工作?我很确定kmalloc不会简单地返回一个物理地址。
答案 0 :(得分:3)
你是对的,kmalloc
正在返回虚拟地址,而不是物理地址。您链接的内存映射描述了虚拟内存映射,而不是物理内存映射。
当您访问该地址的数据时,MMU通常会将虚拟地址转换为物理地址。虚拟地址转换的内容取决于内核指定的内存映射。
您链接的内存映射显示了Linux如何进行映射。它说,如果你有0xffff880000000000
和0xffffc7ffffffffff
之间的虚拟地址,它会被映射到物理内存中的某个地方(除非我们正在做DMA,否则我们不知道我们到底在哪里也不关心)