Memory 在Linux中,如何从用户空间进程获取给定任务的页面?

Memory 在Linux中,如何从用户空间进程获取给定任务的页面?,memory,linux-kernel,kernel,virtual-memory,Memory,Linux Kernel,Kernel,Virtual Memory,virt_to_page函数究竟返回什么,它是返回内核空间中给定地址的页面,还是返回用户空间中给定地址的页面?据我所知,它似乎接受一个内核地址并返回该地址的页面。如果是这样的话,在给定任务或mm_结构以及虚拟地址的情况下,我可以使用什么从用户空间进程获取页面?virt_to_page()确实只适用于直接映射的内核地址。要查找用于用户空间映射的页面,需要使用get\u user\u pages()(并且在释放页面上的引用时执行put\u page)因此,如果执行get\u user\u pages

virt_to_page函数究竟返回什么,它是返回内核空间中给定地址的页面,还是返回用户空间中给定地址的页面?据我所知,它似乎接受一个内核地址并返回该地址的页面。如果是这样的话,在给定任务或mm_结构以及虚拟地址的情况下,我可以使用什么从用户空间进程获取页面?

virt_to_page()
确实只适用于直接映射的内核地址。要查找用于用户空间映射的页面,需要使用
get\u user\u pages()
(并且在释放页面上的引用时执行
put\u page

因此,如果执行get\u user\u pages()(获取1页),一旦完成,我必须执行put\u page(page)以正确释放它?只是想确保是的,get_user_pages()在它返回的每个页面上都有一个引用,您需要在每个页面上执行匹配的put_pages()以再次删除该引用。不要忘记mm_结构中mmap信号量的向下和向上区域:我猜这个问题标题有点误导。virt_to_page是linux内核代码中的一个宏,它生成与内核地址关联的页面描述符的地址。