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