免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克
打印 上一主题 下一主题

关于LINUX在中断(硬软)中不能睡眠的真正原因 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2007-12-03 16:29 |只看该作者
原帖由 scutan 于 2007-6-27 09:38 发表



其实这只是一个设计上的问题, 而并不是强制的. 只是针对Linux内核而言, 这是规矩.
LKD2上面说, 切换出去之后, 何时才能调度回来? 就是中断回来之后可能不会回到之前所依俯的那个进程了.
中断不能睡眠 ...

睡眠是进程调度的概念,中断若睡眠上下文保持[进程的概念]与中断的概念冲突.要讨论为何要睡眠?软中断中也不需要睡眠,可用不同分支处理不同情况,没有睡眠的必要.完全可用网络中CPU上下文保留一些缓冲等与睡眠有些类似.

[ 本帖最后由 AIXHP 于 2007-12-3 16:30 编辑 ]

论坛徽章:
0
62 [报告]
发表于 2007-12-27 09:59 |只看该作者
如果spin_lock可以抢占, 一旦任务B抢占了任务A, 而任务A执行了spin_lock(xxx), 恰好任务B也执行spin_lock(xxx), 必然导致内核死锁.


不知为什么会*死锁*

论坛徽章:
0
63 [报告]
发表于 2007-12-28 13:47 |只看该作者

回复 #62 flw2 的帖子

你想为什么B抢占A?因为B比A优先级高,所以在此调度时,A不会比B之前运行,就不会释放lock,那么B就一直等下去了呗。

论坛徽章:
0
64 [报告]
发表于 2007-12-28 16:22 |只看该作者
原帖由 osama123 于 2007-12-28 13:47 发表
你想为什么B抢占A?因为B比A优先级高,所以在此调度时,A不会比B之前运行,就不会释放lock,那么B就一直等下去了呗。


谢谢了
我以为还会有某个时候A得到运行,这样就不会死锁了(即使这样也是要禁止抢占的)。

论坛徽章:
0
65 [报告]
发表于 2008-03-24 16:25 |只看该作者
牛人,敬仰中...

mark,等以后知识加强后再来拜读。

论坛徽章:
0
66 [报告]
发表于 2009-11-25 14:29 |只看该作者
很正点的一个问题。保留。

论坛徽章:
0
67 [报告]
发表于 2009-11-29 08:39 |只看该作者
过来学习下!

论坛徽章:
0
68 [报告]
发表于 2010-08-31 19:29 |只看该作者
过来学习下!

论坛徽章:
0
69 [报告]
发表于 2012-02-01 17:02 |只看该作者
个人觉得是中断嵌套的问题,ulk3里面也是这么解释的。因为中断使用的内核栈无论是8k还是4k,都是每个CPU一个,而不是每个进程一个。所以假如在执行ISR的时候进程切换了,接着切换后又在新的进程执行过程中被中断,那么如果还是当时的cpu那么那个中断使用的内核栈就又保存上下文,这时假如又发生进程切换,切换回最开始的进程,那么就无法找出当时正确的中断上下文了。最关键的问题我觉得就是不是每个进程都有中断相应的内核栈。这个应该就是linux设计的问题。

论坛徽章:
0
70 [报告]
发表于 2012-10-08 22:32 |只看该作者
我是来看高手讨论的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP