2

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

4

1 回答 1

3

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

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

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

于 2013-06-23T01:08:52.647 回答