为什么说在持有自旋锁时不能进入睡眠或阻塞

news/2024/5/18 7:04:30 标签: 测试, 读书, 活动, 工作

看LDD149页时,看到休眠的两条规则,其中之一是说,永远不要再原子上下文睡眠!


为什么说,驱动程序在持有自旋锁时绝对不能进入睡眠,而在拥有信号量时就可以?

 

 

看到网上有人这么提问,这也是我读书时候自己迷惑不解的地方。但是,通过仔细研读,我理解到了这个问题的答案。我在网上也看了大家对于这个问题的回答,大都没说到点上。根据我自己的理解,应该是:

 

 

自旋锁自旋锁禁止处理器抢占;而信号量不禁止处理器抢占。

 

基于这个原因,如果自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其他系统进程将都不能获得CPU而运行,因此不能唤醒睡眠的自旋锁,因此系统将不响应任何操作(除了中断或多核的情况,下面会讨论)。而信号量在临界区睡眠后,其他进程可以用抢占的方式继续运行,从而可以实现内存拷贝等功能而使得睡眠的信号量程序由于获得了等待的资源而被唤醒,从而恢复了正常的代码运行。

 

当然,自旋锁的睡眠的情况包含考虑多核CPU和中断的因素。自旋锁睡眠时,只是当前CPU的睡眠以及当前CPU的禁止处理器抢占,所以,如果存在多个CPU,那么其他活动的CPU可以继续运行使操作系统功能正常,并有可能完成相应工作而唤醒睡眠了的自旋锁,从而没有造成系统死机;自旋锁睡眠时,如果允许中断处理,那么中断的代码是可以正常运行的,但是中断通常不会唤醒睡眠的自旋锁,因此系统仍然运行不正常。

 

以上是我对这个问题的理解。如果有说错的地方,非常希望高手给予指正!谢谢。

其实这个问题可以自己写个小程序测试一下,我现在也正在读书,还没有测试,其实测试很简单,写一个自旋锁,然后睡眠,看看在单CPU下系统是不是死机了,就可以清楚。估计死机时还应该可以响应键盘操作,因为键盘是中断处理,测试时把中断屏蔽了,也是一个不错的办法。


http://www.niftyadmin.cn/n/849324.html

相关文章

Linux 2.6 驱动设计快速入门

作者 Ray   来源www.rtems.net,作者rayrtems   Linux 2.6 和 2.4 的比较我不想废话,总体来说 2.6 功能更强,但是资源消耗更多。   由于 2.6 内核在驱动框架,底层调用上和 2.4 内核有很多差别,所以本文主要是为程…

css和css的圣杯布局,CSS常用布局实现05-圣杯布局和双飞翼布局

1. 简介其实对于三列布局的实现,之前网上使用最多的还是这两种。它们有一个共同的优点,就是可以使主内容优先加载。当然,如果不考虑兼容,flex和grid还是优先推荐的。2.实现我们直接上代码,代码中有详细注释&#xff1a…

LinuxCast Linux 权限的ACL机制 ( 超越传统的UGO机制 ) 视频教程笔记

为什么80%的码农都做不了架构师?>>> sudo apt-get install acl 开启文件系统的acl功能: (根分区默认就开启了) mount -o acl /dev/sda5 /mnt 查看文件/文件夹的acl设置: getfacl foldername # file: alida…

积分

关于积分的定义意义,可以见下面的参考资料,本文不赘言。本文主要总结一些积分中常用到的方法。 1、二重积分的计算方法 根据参考资料[5]P310的说明,对于二重积分,可以先对y变量积分,然后再对x变量积分,如下…

手机热点设置虚拟服务器,以三款路由器为例,浅谈手机热点中继路由器的设置方法...

以三款路由器为例,浅谈手机热点中继路由器的设置方法2017-01-23 22:37:0443点赞328收藏36评论前言各位值友,新年好!这篇文章写一点路由使用心得。在此之前,我和许多人一样仅对路由一般设置了解,对WDS、WISP、ClientAP模…

DB2 系统命令与配置参数大全

主要包括4个部分,分别为: DB2 系统命令 DB2 数据库管理器配置参数 DB2 数据库系统配置参数 DB2 管理服务器(DAS)配置参数DB2 系统命令 dasauto - 自动启动 DB2 管理服务器 dascrt - 创建 DB2 管理服务器 da…

The Frame Buffer Device

The Frame Buffer Device ----------------------- Maintained by Geert Uytterhoeven <geertlinux-m68k.org> Last revised: May 10, 2001 0. Introduction --------------- The frame buffer device provides an abstraction抽象 for the graphics har…

窥探 kernel --- task_struct

本系列文章由张同浩编写&#xff0c;转载请注明出处&#xff1a;http://blog.csdn.net/muge0913/article/details/7477083 邮箱&#xff1a;muge0913sina.com 程序和进程&#xff1a; 程序是存放在磁盘上的一系列代码和数据的可执行镜像&#xff0c;是一个静态的实体&#xff…