0

kmalloc在 Linux 的设备驱动程序中分配一块内存。我得到的地址是0xffff880000180000。我正在使用具有 46 位物理地址空间的 IvyBridge 处理器。这意味着 CPU 没有超过 46 个寻址引脚,因此它无法访问上面的任何地址0x00003fffffffffff。我得到的地址显然比这更大,因为它设置了第 47 位。

假设kmalloc返回一个物理指针(即虚拟地址、线性地址和物理地址相同的指针),如果 CPU 无法访问它,我如何获得这样的地址?


这个问题与“为什么我在 Linux 中将 kmalloc 与 GFP_DMA 一起使用时会得到一个高地址? ”。但是,它并不相同。这个问题一般是关于物理地址kmalloc返回的,而链接的问题是关于返回地址的使用GFP_DMA及其与返回地址的关系。

4

1 回答 1

3

它显然不是物理地址,而是线性或虚拟地址,并且是“规范形式”,其中第 47 位的值被“符号扩展”到第 63 位。

于 2012-09-10T05:57:21.043 回答