一种linux用户态互斥锁死锁检测方法及系统与流程

文档序号:11949825阅读:433来源:国知局
一种linux用户态互斥锁死锁检测方法及系统与流程

本发明涉及操作系统故障管理领域,特别涉及一种linux用户态互斥锁死锁检测方法及系统。



背景技术:

死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程。内核死锁是长期困扰内核开发人员的问题之一;Linux系统用户态C程序同样存在死锁问题,因此,如何准确的检测出linux用户态互斥锁死锁,是本领域技术人员需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种linux用户态互斥锁死锁检测方法及系统,均能够通过调用lockdep模块能够准确的检测出linux用户态互斥锁死锁。

为解决上述技术问题,本发明提供一种linux用户态互斥锁死锁检测方法,包括:

将用户态互斥锁数据结构与lockdep数据结构进行封装;

对引入内核lockdep死锁程序的用户态互斥锁接口进行封装;

将封装后的用户态互斥锁接口,编译成用户态互斥锁检测动态静态链接库,生成互斥锁死锁检测库文件;

根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;

执行所述互斥锁死锁检测操作,若存在死锁,则记录死锁信息。

其中,将用户态互斥锁数据结构与lockdep数据结构进行封装,包括:

将用户态互斥锁数据结构pthread_mutex_t添加lockdep死锁检测的lockdep_map数据结构。

其中,对引入内核lockdep死锁程序的用户态互斥锁接口进行封装,包括:

引入内核lockdep死锁程序,定义用户态文件;其中,所述用户态文件包括lockdep.c、lockdep_states.h和lockdep_internals.h;

根据所述用户态文件对用户态互斥锁接口进行封装;其中,所述用户态互斥锁接口包括:PTHREAD_MUTEX_INITIALIZER、pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock、pthread_mutex_destroy。

其中,执行所述互斥锁死锁检测操作,包括:

判断编译时是否引入所述互斥锁死锁检测库文件;

若引入,则执行所述互斥锁死锁检测操作。

其中,记录死锁信息,包括:

打印死锁信息。

本发明提供一种linux用户态互斥锁死锁检测系统,包括:

数据结构封装模块,用于将用户态互斥锁数据结构与lockdep数据结构进行封装;

接口封装模块,用于对引入内核lockdep死锁程序的用户态互斥锁接口进行封装;

编译模块,用于将封装后的用户态互斥锁接口,编译成用户态互斥锁检测动态静态链接库,生成互斥锁死锁检测库文件;

用户态程序模块,用于根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;执行所述互斥锁死锁检测操作,若存在死锁,则记录死锁信息。

其中,所述数据结构封装模块具体为将用户态互斥锁数据结构pthread_mutex_t添加lockdep死锁检测的lockdep_map数据结构的模块。

其中,接口封装模块具体为引入内核lockdep死锁程序,定义用户态文件;根据所述用户态文件对用户态互斥锁接口进行封装的模块;

其中,所述用户态互斥锁接口包括:PTHREAD_MUTEX_INITIALIZER、pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock、pthread_mutex_destroy;所述用户态文件包括lockdep.c、lockdep_states.h和lockdep_internals.h。

其中,用户态程序模块,包括:

编译单元,用于根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;

判断单元,用于判断编译时是否引入所述互斥锁死锁检测库文件;

执行单元,用于若存在所述互斥锁死锁检测库文件,执行所述互斥锁死锁检测操作;

记录单元,用于若存在死锁,则记录死锁信息。

其中,所述记录单元具体为打印死锁信息的单元。

本发明所提供的linux用户态互斥锁死锁检测方法,包括:将用户态互斥锁数据结构与lockdep数据结构进行封装;对引入内核lockdep死锁程序的用户态互斥锁接口进行封装;将封装后的用户态互斥锁接口,编译成用户态互斥锁检测动态静态链接库,生成互斥锁死锁检测库文件;根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;执行所述互斥锁死锁检测操作,若存在死锁,则记录死锁信息;可见该方法通过封装lockdep模块,使内核通过调用内核lockdep死锁检测函数来进行用户态互斥锁死锁检测,能够准确的检测出linux用户态互斥锁死锁;本发明还提供了一种linux用户态互斥锁死锁检测系统,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例所提供的linux用户态互斥锁死锁检测方法的流程图;

图2为本发明实施例所提供的linux用户态互斥锁死锁检测系统的结构框图。

具体实施方式

本发明的核心是提供一种linux用户态互斥锁死锁检测方法及系统,均能够通过调用lockdep模块能够准确的检测出linux用户态互斥锁死锁。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,图1为本发明实施例所提供的linux用户态互斥锁死锁检测方法的流程图;该方法可以包括:

S100、将用户态互斥锁数据结构与lockdep数据结构进行封装;

其中,该步骤即为用户态互斥锁数据结构封装,具体的将用户态互斥锁数据结构pthread_mutex_t添加lockdep死锁检测的lockdep_map数据结构。

互斥锁数据结构封装,在原有的数据结构pthread_mutex_t基础上添加lockdep_map数据结构,定义为lockdep_pthread_mutex数据机构。具体过程如下:

变量定义如下:

#define NR_LOCKDEP_CACHING_CLASSES 2

#define MAX_LOCKDEP_SUBCLASSES 8UL

S110、对引入内核lockdep死锁程序的用户态互斥锁接口进行封装;

其中,该步骤即为用户态互斥锁接口封装,引入内核lockdep死锁程序,定义用户态文件;其中,所述用户态文件包括lockdep.c、lockdep_states.h和lockdep_internals.h;

根据所述用户态文件对用户态互斥锁接口进行封装;其中,所述用户态互斥锁接口包括:PTHREAD_MUTEX_INITIALIZER、pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock、pthread_mutex_destroy。

其中,互斥锁调用接口封装,是互斥锁提供给用户的PTHREAD_MUTEX_INITIALIZER、pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock、pthread_mutex_destroy等接口进行封装,引入内核lockdep代码即内核lockdep死锁程序,通过直接引入内核文件的方式调用内核lockdep代码。

引入lockdep代码,定义用户态文件lockdep.c、lockdep_states.h和lockdep_internals.h。

lockdep.c。代码如下:

接口重定义:

#define pthread_mutex_t lockdep_pthread_mutex_t

#define pthread_mutex_init lockdep_pthread_mutex_init

#define pthread_mutex_lock lockdep_pthread_mutex_lock

#define pthread_mutex_unlock lockdep_pthread_mutex_unlock

#define pthread_mutex_trylock lockdep_pthread_mutex_trylock

#define pthread_mutex_destroy lockdep_pthread_mutex_destroy

S120、将封装后的用户态互斥锁接口,编译成用户态互斥锁检测动态静态链接库,生成互斥锁死锁检测库文件;

其中,该步骤即为编译用户态互斥锁检测动态静态链接库,即编译重新封装的互斥锁的接口。从步骤S100到S120完成了用户态互斥锁死锁检测库文件的生成。即首先对用户态互斥锁的数据结构和API进行封装,引入lockdep内核死锁检测函数,编译生成互斥锁死锁检测库文件;用户态程序编译时引入互斥锁死锁检测库文件,用户程序互斥锁操作指向互斥锁死锁检测库文件封装的接口。

S130、根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;

S140、执行所述互斥锁死锁检测操作,若存在死锁,则记录死锁信息。

其中,用户C程序重新编译并执行检测过程;即步骤S130和S140完成了用户态程序互斥锁死锁检测流程;先判断编译中是否引入互斥锁死锁检测库文件,如果没有引入,直接运行程序本身功能结束;如果引入互斥锁死锁检测库文件,则检测是否存在互斥锁死锁,如果存在死锁,记录死锁信息结束;如果不存在死锁,程序执行本身功能结束。这里的记录信息具体可以是打印死锁信息。

基于上述技术方案,本发明实施例提供的linux用户态互斥锁死锁检测方法,对linux用户态互斥锁的数据结构和互斥锁接口API进行封装,通过调用内核lockdep死锁检测函数对用户态互斥锁死锁进行检测;即通过封装用户态互斥锁数据结构和互斥锁接口实现对内核lockdep代码调用;能够有效检测出用户态C程序的死锁。

本发明实施例提供了linux用户态互斥锁死锁检测方法,能够通过调用lockdep模块能够准确的检测出linux用户态互斥锁死锁。

下面对本发明实施例提供的linux用户态互斥锁死锁检测系统进行介绍,下文描述的linux用户态互斥锁死锁检测系统与上文描述的linux用户态互斥锁死锁检测方法可相互对应参照。

请参考图2,图2为本发明实施例所提供的linux用户态互斥锁死锁检测系统的结构框图;该系统可以包括:

数据结构封装模块100,用于将用户态互斥锁数据结构与lockdep数据结构进行封装;

接口封装模块200,用于对引入内核lockdep死锁程序的用户态互斥锁接口进行封装;

编译模块300,用于将封装后的用户态互斥锁接口,编译成用户态互斥锁检测动态静态链接库,生成互斥锁死锁检测库文件;

用户态程序模块400,用于根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;执行所述互斥锁死锁检测操作,若存在死锁,则记录死锁信息。

可选的,所述数据结构封装模块100具体为将用户态互斥锁数据结构pthread_mutex_t添加lockdep死锁检测的lockdep_map数据结构的模块。

可选的,接口封装模块200具体为引入内核lockdep死锁程序,定义用户态文件;根据所述用户态文件对用户态互斥锁接口进行封装的模块;

其中,所述用户态互斥锁接口包括:PTHREAD_MUTEX_INITIALIZER、pthread_nutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock、pthread_mutex_destroy;所述用户态文件包括lockdep.c、lockdep_states.h和lockdep_internals.h。

可选的,用户态程序模块400,包括:

编译单元,用于根据所述互斥锁死锁检测库文件编译互斥锁死锁检测操作;

判断单元,用于判断编译时是否引入所述互斥锁死锁检测库文件;

执行单元,用于若存在所述互斥锁死锁检测库文件,执行所述互斥锁死锁检测操作;

记录单元,用于若存在死锁,则记录死锁信息。

其中,所述记录单元具体为打印死锁信息的单元。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的linux用户态互斥锁死锁检测方法及系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1