免费注册 查看新帖 |

Chinaunix

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

linux 2.6内核可抢占的迷惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-08 11:45 |只看该作者 |倒序浏览
现有一个内核的项目,包含了一个自定义的内核中使用的消息队列函数库,在接收消息的时候函数内部使用wait_event_interruptable 来实现。在模块代码中新建了一个线程,线程中使用了两个这样的消息队列来监听两类数据,线程主体是一个while循环。现在的问题是,当两个消息队列内部的wait_event的超时定为0时,装载模块后机器会宕机,在两个接收消息体的语句中间手工加一个空的wait_queue,然后在其上等待10个jiffies以上(也是interruptable,此时该线程应该能进入休眠)时,该线程可被正常的停止和杀掉。
针对这个问题有些疑问
1、Linux 2.6内核是可抢占的,那为什么当wait_event_interruptable的超时为0时机器会宕掉,是因为内核模块的优先级和该线程的一样高,还是说内核线程必须手动调用schedule,或者包含显式让线程休眠的代码才能让其他的内核线程stop该线程呢。
2、当使用wait_event或者其他互斥原语,不带interruptable时,是说该线程不接受中断,还是说只要该线程一直在运行就会屏蔽整个系统的中断从而导致不能运行其他内核线程呢?

论坛徽章:
0
2 [报告]
发表于 2009-04-10 17:32 |只看该作者
原帖由 huangyi82 于 2009-4-8 11:45 发表
现有一个内核的项目,包含了一个自定义的内核中使用的消息队列函数库,在接收消息的时候函数内部使用wait_event_interruptable 来实现。在模块代码中新建了一个线程,线程中使用了两个这样的消息队列来监听两类 ...



1. 不清楚你的意思。
2、当使用wait_event或者其他互斥原语,不带interruptable时,是说该线程不接受中断,还是说只要该线程一直在运行就会屏蔽整个系统的中断从而导致不能运行其他内核线程呢?

》》不带interruptable时 并非HW不可用中断。A线程 wait event_** 进入阻塞模式, B线程 wake_up 或者 HW中断 wake_up, A 不就起来了嘛。

论坛徽章:
0
3 [报告]
发表于 2009-04-11 16:11 |只看该作者
1、我自己测试了一下,在一个内核线程里使用while循环,则加载模块后系统宕机,这样应该是表示该线程没有让出CPU吧,但是Linux2.6是可抢占的,应该在时钟中断来到后发起抢占(在理解linux内核中有描述)啊?
2、不使用interruptable的wait_event还能让出CPU给别的线程或者系统还会执行HW中断么?在LDD中说的可是对每个CPU该函数不会主动让出CPU的。

论坛徽章:
0
4 [报告]
发表于 2009-04-13 09:17 |只看该作者
原帖由 huangyi82 于 2009-4-11 16:11 发表
1、我自己测试了一下,在一个内核线程里使用while循环,则加载模块后系统宕机,这样应该是表示该线程没有让出CPU吧,但是Linux2.6是可抢占的,应该在时钟中断来到后发起抢占(在理解linux内核中有描述)啊?
2 ...


1. 加载模块后系统宕机? 是什么现象?   终端不能动? 若是, 是否你在module_init function 用了while? 那么终端死掉。其他线程应该可用跑的。

2.在LDD中说的可是对每个CPU该函数不会主动让出CPU的。  到了里面的code就是主动了。 呵呵

论坛徽章:
0
5 [报告]
发表于 2009-04-13 17:38 |只看该作者
多谢!!

2.在LDD中说的可是对每个CPU该函数不会主动让出CPU的。  到了里面的code就是主动了
这句话是什么意思

论坛徽章:
0
6 [报告]
发表于 2009-04-14 12:03 |只看该作者
原帖由 huangyi82 于 2009-4-13 17:38 发表
多谢!!

2.在LDD中说的可是对每个CPU该函数不会主动让出CPU的。  到了里面的code就是主动了
这句话是什么意思



wait_even 的实现代码会让出CPU 调用schudle()

论坛徽章:
0
7 [报告]
发表于 2009-04-16 11:47 |只看该作者
这个我知道,当时的问题出现在自定义的库里面,timeout为0则直接退出,不会调用wait_event函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP