免费注册 查看新帖 |

Chinaunix

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

关于驱动程序中的poll [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-18 22:13 |只看该作者 |倒序浏览
本帖最后由 Horizon2012 于 2011-09-18 22:15 编辑


看[设备驱动开发详解] 的poll函数实现时,有点疑惑:

书本写到poll函数的实现格式大概是这样的:

int mask=0
....
poll_wait()    // 加等待队列头到poll_table
...
if condition   
    mask=...   // 标志
if conditon
    mask=...

return mask

我看了网上的解释,说poll_wait() 不会导致阻塞,真正的阻塞在上层,根据poll函数的返回值来决定是否阻塞,然后如果等待队列头给wake的话,就会再次调用poll函数(不知道是不是真的这样呢?),如果是这样的话,那不是poll_wait就会多次调用了吗?多次加等待队列头到poll_table?

论坛徽章:
0
2 [报告]
发表于 2012-08-31 10:19 |只看该作者
同样很困惑这个问题啊?????

论坛徽章:
0
3 [报告]
发表于 2012-09-07 09:22 |只看该作者
我个人的理解是:应用层调用select函数,会调用驱动层的poll,当poll函数的掩码值mask返回0时候,此时上层的select就会阻塞,但是poll函数并没有阻塞,因为他的任务只是添加等待队列头到poll_wait(),并返回掩码值mask,送到应用层;此时如果设备可读或可写(通过应用层对设备节点读写或者其他方式),poll函数又被重新调用,添加等待队列头(等待队列头也可能不止一个,读和写两个,甚至更多),返回掩码值mask就是非0,报到应用层,select就被重新调用了。因此说“poll_wait() 不会导致阻塞,真正的阻塞在上层”
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP