spin_lock自旋锁

spin_lock自旋锁的时间片轮转

很关键的内核问题

被保护的资源已经持有自旋锁,那么新的内核线程再度访问保护的资源的时候,会自旋等待。
1 那么此内核线程的时间片用完之后,自旋锁是会让出cpu,还是一直自旋等待锁的释放???

2 还有在中断处理程序执行的过程中,中断处理程序是否分配有时间片??? 假如有,内核是处于中断上下文中,中断处理程序让出CPU后又怎么会被再次调度呢????


*******通常自选锁很快就会主动释放,如果刚好时间片到了,也接着让它运行,因为禁止抢占了,不会产生进程切换
中断上下文的时间算占用当前进程的

问一个自旋锁的问题

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2095547&page=1#pid14627162
对于自旋锁,一直有些不明白。
   SMP时就不多说了,比较好理解。
   1.UP且内核为抢占式时,以下情况会发生什么?
   A内核线程持有自旋锁时,被B线程抢占,B线程在自旋锁上判断后自旋...
   后来呢? 是不是到了timeslice线程B就让出CPU,让A得到执行的机会?
   还是一直在CPU“疯狂的自旋”?这样的话岂不是要死锁了?
   2.UP且内核为非抢占式的,那么由于持有自旋锁的代码都是原子的,因此不会切换到别的线程执行?
     如果是这样的话,对于UP中的内核为非抢占式的代码来说,自旋锁没有任何意义?是这样吗?
    问题比较弱,还请大家帮忙解答疑惑。谢谢!
------
参考
http://bbs.chinaunix.net/viewthread.php?tid=639557&extra=&highlight=%D7%D4%D0%FD%CB%F8&page=1

关于自旋锁与内核抢占的一些想法,大虾过来指点下。

http://bbs.chinaunix.net/thread-2333160-1-1.html
最近在看宋宝华的《设备驱动开发详解》第二版,看到自旋锁的部分,有些疑惑,所以来请教下大家。
下面是我参考一些网络上的资料得出的一些想法,不知正确与否,记录下来大家讨论下:
(1) linux上的自旋锁有三种实现:
          1. 在单cpu,不可抢占内核中,自旋锁为空操作。
          2. 在单cpu,可抢占内核中,自旋锁实现为“禁止内核抢占”,并不实现“自旋”。
          3. 在多cpu,可抢占内核中,自旋锁实现为“禁止内核抢占” + “自旋”。
(2) 关于抢占式内核与非抢占式内核:
          在非抢占式内核中,如果一个进程在内核态运行,其只有在以下两种情况会被切换:
          1.  其运行完成(返回用户空间)
          2.  主动让出cpu(即主动调用schedule或内核中的任务阻塞——这同样也会导致调用schedule)


     



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值