Linux kmalloc返回的地址的物理地址

Linux kmalloc返回的地址的物理地址,linux,linux-kernel,memory-address,virtual-memory,kmalloc,Linux,Linux Kernel,Memory Address,Virtual Memory,Kmalloc,我对kmalloc返回给我的地址有点困惑。根据,我得到的地址在FFFF88000000000-ffffc7ffffffffff范围内,因此“所有物理内存的直接映射”。这个映射是如何工作的?我很确定kmalloc不会简单地返回物理地址。你说得对,kmalloc返回的是虚拟地址,而不是物理地址。链接到的内存映射描述的是虚拟内存映射,而不是物理内存映射 当您访问地址上的数据时,MMU通常会将虚拟地址转换为物理地址。虚拟地址转换成什么取决于内核指定的内存映射 链接到的内存映射显示了Linux如何进行映射

我对kmalloc返回给我的地址有点困惑。根据,我得到的地址在
FFFF88000000000
-
ffffc7ffffffffff
范围内,因此“所有物理内存的直接映射”。这个映射是如何工作的?我很确定kmalloc不会简单地返回物理地址。

你说得对,
kmalloc
返回的是虚拟地址,而不是物理地址。链接到的内存映射描述的是虚拟内存映射,而不是物理内存映射

当您访问地址上的数据时,MMU通常会将虚拟地址转换为物理地址。虚拟地址转换成什么取决于内核指定的内存映射


链接到的内存映射显示了Linux如何进行映射。也就是说,如果你有一个介于
0xFFFF88000000000
0xffffc7ffffffffff
之间的虚拟地址,它会被映射到物理内存中的某个地方(我们不知道确切的位置,也不在乎,除非我们正在进行DMA)。

谢谢你的回复,回答得很好!这与vmalloc返回的地址有什么关系?我注意到这些地址看起来不同。根据我在上面发布的虚拟内存映射,tey将位于vmalloc池中。这些虚拟地址是否也映射到物理地址,比如来自kmalloc的地址,或者方案可能不同……或者物理地址并不总是存在,页面可能会被交换出去?我的直觉可能是错误的,但换掉内核数据页有意义吗?这些虚拟地址很可能映射到物理内存。好吧,如果我在某些LKM中使用kmalloc或vmalloc分配一些内存,任何其他LKM也可以使用相同的地址访问此内存?@Tangers如何找到物理内存。我在ubuntu 64位4.4.x内核中使用了
virt\u to\u phys()
,但没有得到正确的值。基本上,我得到的是虚拟地址的偏移部分。