关于Linux 2.6内核可抢占的迷惑

huangyi82 2009-04-08 11:28:00
现有一个内核的项目,包含了一个自定义的内核中使用的消息队列函数库,在接收消息的时候函数内部使用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时,是说该线程不接受中断,还是说只要该线程一直在运行就会屏蔽整个系统的中断从而导致不能运行其他内核线程呢?
...全文
244 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxingyu896 2009-05-02
  • 打赏
  • 举报
回复
学习
morris88 2009-05-01
  • 打赏
  • 举报
回复
不熟,帮顶...

4,444

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧