免费注册 查看新帖 |

Chinaunix

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

UP非抢占内核下的spin_lock [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-01 02:54 |只看该作者 |倒序浏览
文章里面都讲:在但处理器非抢占内核环境里面,自旋锁演变成空操作。我有点疑问就是,如果一个进程刚通过spin_lock()成功获取到了自旋锁之后就来了中断,而中断里面也用到了这个锁的话,不就死锁了吗?

论坛徽章:
0
2 [报告]
发表于 2010-10-01 11:29 |只看该作者
不明白。你说的那个死锁是单核?多核情况?

论坛徽章:
0
3 [报告]
发表于 2010-10-01 14:14 |只看该作者
回复 2# accessory


    我说过了,在单处理器非抢占内核环境下。

论坛徽章:
0
4 [报告]
发表于 2010-10-01 14:29 |只看该作者
回复 3# garyv


    其实应该说:在单处理器非抢占内核环境里面,自旋锁演变成空操作。我有点疑问就是,如果一个进程刚通过spin_lock()成功获取到了自旋锁之后就来了中断,而中断里面也用到了这个锁的话,由于都是空操作,不就没有实现共享资源的同步访问了吗?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
5 [报告]
发表于 2010-10-01 14:53 |只看该作者
回复 4# garyv


    无论是单核和是多核。这个都不属于自旋锁处理问题的范围。
一个能被中断的执行序列需要加_bh 或者_irq。而不是只靠自旋锁

论坛徽章:
0
6 [报告]
发表于 2010-10-04 20:54 |只看该作者
回复 5# smalloc


    再请教一个问题,soft_irq跟hardware_irq有什么差异?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2010-10-04 21:27 |只看该作者
回复 6# garyv
我觉得我在这贴的12楼算是说清楚了
http://linux.chinaunix.net/bbs/v ... p;extra=&page=1

如果在中断上的并发特性上还有疑问
http://linux.chinaunix.net/bbs/viewthread.php?tid=1169687
可以参考这贴和相关帖子

我只到能这里,再细致估计有要从指令和CPU角度讲解。我没到那个层次。。。

论坛徽章:
0
8 [报告]
发表于 2010-10-04 22:05 |只看该作者
回复 7# smalloc


    初步看了一下那些文章,发现你对APIC有很深的理解。其实我只有一个疑问:进入硬件中断时是不是关了全局中断,进入softirq时只关了一个中断(soft irq)?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
9 [报告]
发表于 2010-10-04 22:27 |只看该作者
本帖最后由 smalloc 于 2010-10-04 22:30 编辑

回复 8# garyv


》》    进入硬件中断时是不是关了全局中断
》》  进入softirq时只关了一个中断(soft irq)?

关硬件中断只有2处。处理器的flag。中断控制器屏蔽。CPU进入中断处理时关掉了flag。没有屏蔽中断控制器的相关位
在多处理器中关FLAG叫关local中断。我还不清楚全局中断的定义是什么。
softirq中相当于关里所有本处理器软中断

上面给的第2贴本来想写点APIC的。但是放弃了。所以全部是8259A的。ZX把APIC该讲的都讲了。
搞懂了8259A 再理解APIC大体框架并不难。
相信我。这2贴里有你想要的终极答案。任何低于这2贴的理解都会让你感觉不爽

论坛徽章:
0
10 [报告]
发表于 2010-10-04 22:48 |只看该作者
回复 9# smalloc


    我感觉你的这个回复是只针对x86这个arch的,我提问并没有针对哪一款具体的arch。比如你说的"处理器的flag。中断控制器屏蔽",我印象中这两种寄存器在x86里面是都有实现,但在其他arch里面就不一定了。当然我说的"全局中断"可能有些体系也没有这概念,举个例子,比如intel 8051里面的每个中断源都有一个独立的使能位,用来控制该中断源是否被响应,但还有一个全局中断位EA,用来开/关所有中断是一个总开关,只有前面的使能位和EA同时=1时才能进入响应的isr,中断FLAG相关寄存器只是用来指示相应中断状态。8051里面没有INTERRUPT MASK的说法。

我只谈单核处理器环境,按照楼上的说法,进入硬件中断时会禁止所有中断,进软件中断时只关软中断,但仍能响应硬件中断?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP