当前位置: 技术问答>linux和unix
linux内核情景分析问题1--宏__pa
来源: 互联网 发布时间:2017-04-08
本文导语: 书中有这样一段话: 对于系统空间而言,给定一个虚地址x,其物理地址是从x中减去PAGE_OFFSET 定义宏如下: #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) 我的认识是只有系统空间的内存才能够用这个宏。 但是书的后面...
书中有这样一段话:
对于系统空间而言,给定一个虚地址x,其物理地址是从x中减去PAGE_OFFSET
定义宏如下:
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
我的认识是只有系统空间的内存才能够用这个宏。
但是书的后面有定义了一个用于得到物理page指针的宏
#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
这个地方如果kaddr是用户空间的虚拟地址,为什么能用__pa(x)宏?
谢谢!
对于系统空间而言,给定一个虚地址x,其物理地址是从x中减去PAGE_OFFSET
定义宏如下:
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
我的认识是只有系统空间的内存才能够用这个宏。
但是书的后面有定义了一个用于得到物理page指针的宏
#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
这个地方如果kaddr是用户空间的虚拟地址,为什么能用__pa(x)宏?
谢谢!
|
kaddr表明了是kernel address,用户空间地址是通过vm_area_struct来管理的,不会用到__pa和__va
|
__pa 只会用于内核空间。。。