同步mmap区域的内核和用户空间

时间:2016-10-14 05:15:00

标签: linux-kernel kernel mmap

要求:内核和用户空间通过mmap共享巨大的内存。 用户空间是生产者,内核是消费者。

我编写了一个内核模块,用于创建设备并实现mmap系统调用并分配内核缓冲区。 用户空间打开设备并调用mmap并写入内容。 内核每隔5秒通过计时器线程读取它,它工作正常。

问题是我如何同步这个mmap的区域。

我想到的解决方案:

1)写入mmap区域后,用户空间发送netlink通知,标记全局标志,表示数据准备就绪,内核已准备好立即读取。

2)写入mmap区域后,用户空间发出ioctl,标记全局标志,表示数据准备就绪,内核已准备好立即读取。

有没有更好的方法?

1 个答案:

答案 0 :(得分:0)

您可以实现内核空间锁定。在内核读取共享内存之前,它应该获得锁定,否则无法读取;在用户写共享内存之前,它也应该获得锁定,否则无法写入。您可以在获取锁的内核驱动程序中实现ioctl,用户应该在写入内存之前调用ioctl。