【发布时间】:2010-11-18 20:55:15
【问题描述】:
我正在尝试解决这个问题:用户空间程序不断轮询缓冲区以获取来自内核模块的请求并提供服务,然后响应内核。
我想让解决方案更快,因此我没有创建设备文件并通过它进行通信,而是从用户空间分配一个内存缓冲区并将其标记为固定,因此内存页面永远不会被换出。然后用户空间调用一个特殊的系统调用来告诉内核有关内存缓冲区的信息,以便内核模块可以获得该缓冲区的物理地址。 (因为用户空间程序可能会被上下文切换出去,因此如果内核模块当时访问缓冲区,虚拟地址就没有任何意义。)
模块要发送请求时,需要通过物理地址将请求放入缓冲区。问题是:如何通过物理地址访问内核模块内部的缓冲区。
我注意到有get_user_pages,但是不知道怎么用,或者有其他更好的方法吗?
谢谢。
【问题讨论】:
-
如何让它更快?你仍然需要做一个系统调用来告诉内核你更新了缓冲区。
-
不,内核线程在专用内核上运行并不断轮询响应。
标签: memory-management linux-kernel