免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5742 | 回复: 7
打印 上一主题 下一主题

内核态与用户态共享内存的同步问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-10 12:32 |只看该作者 |倒序浏览
本帖最后由 flyingsportshoe 于 2010-03-10 12:35 编辑

我的需求:
  在内核态分配一块内存,然后共享给用户态,这个前辈们已经给出了解决办法,使用地址偏移的办法将物理地址传递出去,这个可以实现。但是我的问题又来了。我需要用户态程序对共享内存进行写操作,而内核态需要对该共享内存进行读操作。他们的操作如何同步,如何避免冲突?
   大家有经验的可以一起讨论~
    曾经有个兄弟说可以通过原子操作共享内存中的固定位来实现,但是用户态貌似没有提供原子操作的api,难道真的要自己用汇编来自己写么?

论坛徽章:
0
2 [报告]
发表于 2010-03-11 15:09 |只看该作者
没办法自己每天顶一下~

论坛徽章:
0
3 [报告]
发表于 2010-03-12 08:45 |只看该作者
提供一些我找到的信息吧
set_bit 内核态的是原子操作,我希望在用户态也有这样的原子操作函数置标志位,但目前我还没找到。希望碰到此问题的兄弟一起讨论

论坛徽章:
0
4 [报告]
发表于 2010-03-12 20:23 |只看该作者
用户态用ioctl 将写完的数据以同步方式传进内核,写个驱动用来处理这个请求,读走数据然后返回,用户态程序再次接管,继续写数据进去,ioctl。。。。。

论坛徽章:
0
5 [报告]
发表于 2010-03-14 15:42 |只看该作者
我的需求:
  在内核态分配一块内存,然后共享给用户态,这个前辈们已经给出了解决办法,使用地址偏移的办 ...
flyingsportshoe 发表于 2010-03-10 12:32


你实际需要的是一个内核态和用户态的同步机制。两种方法可以解决:
1. 当用户态写完毕后,通过一个ioctl通知内核态的模块
2. 使用netlink通知内核模块

论坛徽章:
0
6 [报告]
发表于 2010-03-17 12:31 |只看该作者
zx_wing,ioctrl和netlink的同步方式效率问题是不是值得斟酌呢?

论坛徽章:
0
7 [报告]
发表于 2010-03-17 17:21 |只看该作者
zx_wing,ioctrl和netlink的同步方式效率问题是不是值得斟酌呢?
flyingsportshoe 发表于 2010-03-17 12:31



    那要看你的业务有多复杂。频繁的陷入内核不会使你的共享内存性能降低,但会带来高的CPU占用率(前提是要频繁到一定程度,像1秒钟100次这种完全就可以忽略不计了)。
   如果你的业务真的复杂到对此非常敏感。你可以使用ringbuffer,前提是你要好好的组织用户态和内核态读写顺序造成尽量少的撞车

论坛徽章:
0
8 [报告]
发表于 2010-03-22 11:30 |只看该作者
谢谢zx_wing的建议。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP