我正在尝试使用linux-kernel中提供的mamp()功能。 当我们在用户空间中调用mmap()时,我们尝试将用户空间进程的虚拟内存区域映射到内核空间中的内存。
内核中mamp()的定义是在我的内核模块中完成的,该模块尝试在页面中分配一些内存。在mmap系统调用期间映射它。此模块可以填充此内核空间内存的内存内容。
我想问的问题是,在内存映射之后,用户空间进程可以直接访问映射内存而不会出现任何额外的内核过载,因此不会有像read()这样的系统调用,但是如果内存(在内核空间内分配并在内核空间中映射)包含指向内核空间内分配的其他内存(未映射)的指针,然后用户空间进程可以通过帮助访问这个未映射的内存映射内存的内容,它是指向未映射内存的指针。
答案 0 :(得分:1)
不,用户空间不能追逐映射内存中指向未映射内核内存的指针。
答案 1 :(得分:0)
没有用户空间进程无法访问未映射的内存。内核不允许您访问该内存。 您只能访问通过mmap映射的内存部分。 我认为use可以显式地使用remap_pfn_range函数重新映射该区域。
改变的效果 与之对应的页面上的映射的基础文件的大小 未指定文件的添加或删除区域。
答案 2 :(得分:0)
不,你不能。
但是,如果您的目的是动态更改您的mmaped区域,可以选择以下选项:
一个。在用户空间中,您可以使用扩展(或缩小)现有内存映射的mremap。
B中。在内核空间中,在驱动程序中,您需要实现nopage()方法或remap_pfn_range,但remap_pfn_range有其限制,Linux只提供保留页面,您甚至无法重新映射正常地址,例如get_free_page()分配的地址