[发明专利]一种自旋锁的加锁方法及计算机系统无效
申请号: | 200810217105.7 | 申请日: | 2008-10-27 |
公开(公告)号: | CN101403979A | 公开(公告)日: | 2009-04-08 |
发明(设计)人: | 李珅 | 申请(专利权)人: | 成都市华为赛门铁克科技有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 611731四川省*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自旋 加锁 方法 计算机系统 | ||
技术领域
本发明涉及计算机领域,尤其涉及计算机领域中的一种自旋锁的加锁方法和装置及计算机系统。
背景技术
多核处理器在高端嵌入式系统中应用广泛,多核处理器是在一片处理器芯片中集成多个处理器核心,每个处理器核心都能单独地运行程序,使程序认为自己运行在一个独立的处理器上。与多台计算机不同的是多核处理器的所有处理器核心可以使用同一条总线访问存储器,因此它们可以共用同一片内存;它们也可能享用同一套片上设备。嵌入式系统中不仅操作系统及驱动程序,包括应用程序也会经常使用到共享内存、硬件寄存器等资源。而多核处理器使用共享资源往往需要独占地使用,例如一块共享内存,如果两个处理器核心同时写入就可能造成冲突,使结果变得不可控。
为了解决这种冲突,出现了用来保护资源访问的机制,即自旋锁。自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁)。自旋锁最多只能被一个内核任务持有,如果一个内核任务试图请求一个已经被持有的自旋锁,那么这个任务就会一直进行忙循环-旋转,等待锁重新可用。要是锁未被持有,请求它的内核任务便能立刻得该自旋锁并进行使用。一般自旋锁的锁值为零值时为未被持有状态,为非零值时则该自旋锁已经被持有。自旋锁可以在任何时刻防止多于一个的内核任务同时进入临界区,因此这种锁可有效地避免多处理器上并发运行的内核任务竞争共享资源。
但是使用自旋锁的过程中,如果程序产生错误,有可能使得某个处理器核心对自旋锁加锁后没有进行解锁,那么这时候任何处理器核心试图再去取锁时都会进入等待的状态,因无人解锁而长期等待陷入瘫痪。由于多核系统中自旋锁应用非常广泛,所以自旋锁死锁问题会经常出现,长期困扰开发者。
目前的嵌入式应用系统中,自旋锁的死锁问题一般通过任务死锁检测机制来定位,例如看门狗复位系统。通过挂死任务的状态信息可以得知哪一处代码取锁失败导致的系统挂死。但是无法得知那一部分软件代码加锁未释放导致当前代码取锁失败,因此检测不到错误的位置,需要工作人员编写代码调试,利用各种实验室手段进行定位,不仅浪费人力物力还往往会拖延调试周期。
发明内容
本发明实施例所要解决的技术问题在于,提供一种自旋锁的加锁方法及计算机系统,能够在自旋锁发生死锁时快速查找到出错位置。
本发明实施例提供了自旋锁的加锁方法,该方法包括:
检测到自旋锁为未被持有状态,内核任务获取所述自旋锁,并将所述内核任务的程序代码标识写入锁值存储区,所述锁值存储区用于存储自旋锁的锁值。
本发明实施例还提供了一种自旋锁的加锁装置,包括
锁值存储区,用于存储所述自旋锁锁值;
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
本发明实施例还提供一种计算机系统,包括多核处理器、存储器以及计算机总线,所述存储器包含用于表示所述自旋锁锁值的锁值存储区,该计算机系统还包括:
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
本发明实施例在锁值存储区中写入内核任务的程序代码标识,由于程序代码标识能够指示获取自旋锁的内核任务,在自旋锁死锁时根据锁值存储区中的信息能够对出错的位置进行快速的定位,在占用系统较小开销的情况下能够较大的缩短了调试周期。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明自旋锁的加锁方法的第一实施例流程图;
图2是本发明自旋锁的加锁方法的第二实施例流程图;
图3是本发明计算机系统的一实施例的结构示意图;
图4是本发明计算机系统的另一实施例的结构示意图。
具体实施方式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于成都市华为赛门铁克科技有限公司,未经成都市华为赛门铁克科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810217105.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:有助于改进发动机起动的燃料系统
- 下一篇:利用多点感测设备进行的手势操作