免费注册 查看新帖 |

Chinaunix

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

请教一个有关自旋锁的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-07-25 12:29 |只看该作者
那为什么《Linux设备驱动程序》上说“如果非抢占式的单处理器系统进入某个锁上的自旋状态,则会永远自旋下去 ...
superhappy1 发表于 2010-07-24 11:50



  
我觉得即使是抢占式的单处理器系统也会永远自旋下去的,因为自旋锁在获取锁时首先会禁止抢占。


   这明显是错误的,抢占式的单处理器系统也是要靠时间片来分配,一旦时间片到了,就得挂起

论坛徽章:
0
12 [报告]
发表于 2010-07-26 09:13 |只看该作者
这明显是错误的,抢占式的单处理器系统也是要靠时间片来分配,一旦时间片到了,就得挂起


对。抢占式的单处理器系统也应该是靠时间片来分配的

论坛徽章:
0
13 [报告]
发表于 2010-07-26 09:14 |只看该作者
那为什么《Linux设备驱动程序》上说“如果非抢占式的单处理器系统进入某个锁上的自旋状态,则会永远自旋下去 ...
superhappy1 发表于 2010-07-24 11:50



    第几章第几节讲的?我看下。

论坛徽章:
0
14 [报告]
发表于 2010-07-26 09:34 |只看该作者
纠结来纠结去,单处理器有什么区别吗?如果拿到了锁,当然就是不应该被抢占啊,如果没拿到,也不会运行到lock里面的关闭抢占,而是会一直for(外加cond_resched)。
我觉得关键是理解为什么要互斥,实现临界区的办法有很多,但是这些办法有强弱之分,譬如:禁止抢占只是做的在当前运行的cpu上内核态进程不会被其他的进程打断,但是还会被中断打断,所以,关闭中断(当然也就禁用了抢占)是比禁止抢占更强的实现同步的方法。

论坛徽章:
0
15 [报告]
发表于 2010-07-26 16:18 |只看该作者
回复 1# superhappy1
    不会发生调度,因为禁掉了内核抢占

论坛徽章:
0
16 [报告]
发表于 2010-07-28 22:17 |只看该作者
在中断中的自旋锁和它所在的线程上下文有关系吗? 一点都没有, 所以调度的逻辑在这里不适用. 自旋锁不是用来进行线程调度的, 仅仅用来做互斥的操作. 不是一提到锁,就必然有线程调度.
单cpu下, 自旋锁的实现应该仅仅是开关比自己优先级低的所有中断. 如果用多处理器的版本, 那就只能死循环了.

论坛徽章:
0
17 [报告]
发表于 2010-07-29 13:36 |只看该作者
我还想问个问题,对于内核抢占的时机,主要有以下几个方面:
● 当从中断处理程序返回内核空间的时候,且当时内核具有可抢占性;

● 当内核代码再一次具有可抢占性的时候。(如:spin_unlock时)

● 如果内核中的任务显式的调用schedule()

● 如果内核中的任务阻塞。

对于第二条,是执行完spin_unlock的相关指令后就立即可以发生内核抢占吗?
我觉得应该仍然需要等待阻塞或者显示调用schedule()才可以吧。
PS:根据抢占和调度的时机来看,我觉得抢占和调度应该是一回事的

论坛徽章:
0
18 [报告]
发表于 2010-08-02 12:41 |只看该作者
本帖最后由 senghoo 于 2010-08-02 12:45 编辑

自旋锁核心规则

1、任何拥有自旋锁的代码必须是原子的。
2、不能休眠。
3、自旋时禁用中断。
4、不能被抢占
5、自旋锁必须在可能的最短时间内拥有。

对于单CPU非抢占式内核,锁机制仅仅是空语句,除非线程主动放弃CPU,不会发生调度,所以操作是安全的。
对于单CPU抢占式内核,锁机制仅会关闭抢占,从而情况和单CPU非抢占差不多,但是在退出临界区以后要开启抢占
对于多CPU的情况,锁机制才能完全发挥功能。一个CPU(1)进入临界区禁用抢占(该CPU)开始处理数据。其他CPU(2)证号也要访问相同的数据。就会开始自旋,等待CPU(1)的退出

论坛徽章:
0
19 [报告]
发表于 2010-08-05 09:04 |只看该作者
楼上正解,体系很完整,对于新人理解spinlock足够了;其他复杂的正在做的或在讨论的情况可以忽略

论坛徽章:
0
20 [报告]
发表于 2010-08-05 22:19 |只看该作者
自旋锁核心规则

1、任何拥有自旋锁的代码必须是原子的。
2、不能休眠。
3、自旋时禁用中断。
4、不能 ...
senghoo 发表于 2010-08-02 12:41


支持,总结的很完整,只是3是否应该修改下,自旋锁不一定要禁用中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP