要求:内核和用户空间通过mmap共享巨大的内存。 用户空间是生产者,内核是消费者。
我编写了一个内核模块,用于创建设备并实现mmap系统调用并分配内核缓冲区。 用户空间打开设备并调用mmap并写入内容。 内核每隔5秒通过计时器线程读取它,它工作正常。
问题是我如何同步这个mmap的区域。
我想到的解决方案:
1)写入mmap区域后,用户空间发送netlink通知,标记全局标志,表示数据准备就绪,内核已准备好立即读取。
2)写入mmap区域后,用户空间发出ioctl,标记全局标志,表示数据准备就绪,内核已准备好立即读取。
有没有更好的方法?
答案 0 :(得分:0)
您可以实现内核空间锁定。在内核读取共享内存之前,它应该获得锁定,否则无法读取;在用户写共享内存之前,它也应该获得锁定,否则无法写入。您可以在获取锁的内核驱动程序中实现ioctl,用户应该在写入内存之前调用ioctl。