一种共享内存的访问控制方法、装置及系统与流程

文档序号:11949849阅读:279来源:国知局
一种共享内存的访问控制方法、装置及系统与流程

本申请涉及计算机技术领域,特别涉及内核态安全访问用户态共享内存的控制方法、装置及系统。



背景技术:

在Linux系统中,用户态进程与操作系统内核通过共享内存进行通信,用户态进程和操作系统内核能够访问同一块内存,以实现数据通信。

在实际应用场景中,用户态进程由于某些原因导致进程崩溃,需要自动重启。而在用户态进程发生崩溃到完成重启这一段时间内,用户态进程异常退出,其占用的共享内存就会被回收,再被重新分配给其他的进程使用,而访问该用户态进程的操作系统内核却不知道用户态进程已经崩溃,还是一如既往地继续访问共享内存,此时,从共享内存读取的数据,对于操作系统内核而言就是错误数据,严重时,该错误数据会导致操作系统内核产生无法恢复的异常问题,导致系统死机。



技术实现要素:

本申请所要解决的技术问题是提供共享内存的访问控制方法,能够在一定程度上防止内核模块访问错误数据,从而避免出现由于错误数据导致了操作系统内核产生无法恢复的异常问题,在一定程度上能够提高操作系统运行的稳定性和健壮性。

另外,本申请还提供了一种共享内存的访问控制装置及系统,用于保证上述方法在实际中的实现以及应用。

在本申请第一方面提供了一种共享内存的访问控制方法,所述方法包括:

监控用户态进程的状态;

若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存;

当所述线程结束访问时,触发所述用户态进程完成退出。

可选的,所述方法还包括:

设置所述用户态进程对应的访问计数器;所述访问计数器用于记录所述用户态进程的共享内存正在被访问的次数;

则所述若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存,包括:

若所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存。

可选的,所述控制线程停止访问所述用户态进程的共享内存,包括:

禁止发起新线程访问所述用户态进程的共享内存;或,

控制正在访问所述用户态进程的共享内存的线程,尽快结束访问。

可选的,所述方法还包括:

监控正在访问所述共享内存的线程是否在预设时间内结束访问,如果否,则再次通知正在访问所述共享内存的线程尽快结束访问。

可选的,所述方法还包括:

禁止中央处理器对所述线程发起进程调度,并在所述线程访问完毕时,解除禁止。

可选的,所述方法还包括:

预先注册与所述用户态进程相关的回调函数;

则通过所述回调函数被调用方式,监控得到用户态进程的状态。

可选的,所述方法还包括:

设置所述用户态进程调用预设的字符设备驱动中的release函数实现用户态进程的退出;所述release函数用于感知所述用户态进程进入退出状态,并在确定访问所述用户态进程的共享内存的线程结束访问时,再触发所述用户态进程完成退出。

可选的,所述方法还包括:

设置所述用户态进程调用预设的字符设备驱动中的open函数实现用户态进程的启动;所述open函数用于实时感知用户态进程进入启动状态。

在本申请第二方面提供了一种共享内存的访问控制装置,所述装置包括:

监控模块、线程访问控制模块、用户态进程退出控制模块;

其中,所述监控模块,用于监控用户态进程的状态;若所述用户态进程进入退出状态,触发所述线程访问控制模块;

所述线程访问控制模块,用于若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存;当所述线程结束访问时,触发用户态进程退出控制模块;

所述用户态进程退出控制模块,用于当所述线程结束访问时,触发所述用户态进程完成退出。

可选的,所述装置还包括:

访问计数模块,用于设置所述用户态进程对应的访问计数器;所述访问计数器用于记录所述用户态进程的共享内存正在被访问的次数;

则所述线程访问控制模块,具体用于:

若所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存。

可选的,所述线程访问控制模块,包括:

禁止子模块,用于禁止发起新线程访问所述用户态进程的共享内存;或,

控制子模块,用于控制正在访问所述用户态进程的共享内存的线程,尽快结束访问。

可选的,所述装置还包括:

延迟再通知模块,用于监控正在访问所述共享内存的线程是否在预设时间内结束访问,如果否,则再次通知正在访问所述共享内存的线程尽快结束访问。

可选的,所述装置还包括:

禁止模块,用于禁止中央处理器对所述线程发起进程调度,并在所述线程访问完毕时,解除禁止。

可选的,所述装置还包括:

注册模块,用于预先注册与所述用户态进程相关的回调函数;

则所述监控模块具体通过所述回调函数被调用方式,监控得到用户态进程的状态。

可选的,所述装置还包括:

第一设置模块,用于设置所述用户态进程调用预设的字符设备驱动中的release函数实现用户态进程的退出;所述release函数用于感知所述用户态进程进入退出状态,并在确定访问所述用户态进程的共享内存的线程结束访问时,再触发所述用户态进程完成退出。

可选的,所述装置还包括:

第二设置模块,用于设置所述用户态进程调用预设的字符设备驱动中的open函数实现用户态进程的启动;所述open函数用于实时感知用户态进程进入启动状态。

在本申请第三方面提供了一种共享内存的访问控制系统,所述系统包括:

状态感知模块、消息发布模块、以及配置有上述第二方面描述的共享内存的访问控制装置的内核模块;

其中,所述状态感知模块,用于实时感知用户态进程的状态,并将所述状态发送至所述消息发布模块;

所述消息发布模块,用于向所述内核模块发布所述用户态进程的状态。

可选的,所述状态感知模块包括:

第一感知子模块,用于通过预设的open函数实时感知所述用户态进程进入启动状态,并触发所述消息发布模块向所述内核模块发布所述用户态进程进入启动状态的消息;

第二感知子模块,用于通过预设的release函数实时感知所述用户态进程进入退出状态,触发所述消息发布模块向所述内核模块发布所述用户态进程进入退出状态的消息;其中,所述release函数被设置为在确定访问所述共享内存的线程都结束时,再执行退出。

可选的,所述消息发布模块,包括:

注册记录子模块,用于记录所述内核模块预先注册的、与所述用户态进程对应的回调函数;

消息发布子模块,用于通过调用与所述用户态进程对应的回调函数地方式,向所述内核模块发布所述用户态进程的状态。

与现有技术相比,本申请提供的技术方案具有以下优点:

本申请提供的技术方案提出了用户态进程状态的监控机制和内核模块根据用户态进程状态控制访问的工作机制;基于该监控机制,内核模块能够在第一时间了解到用户态进程的状态,并按照这种工作机制,在发现用户态进程进入退出状态时,及时控制正在访问用户态进程的共享内存的线程,尽快停止访问;并且该内核模块停止发起新的访问进程。在访问用户态进程的共享内存的线程都结束访问时,用户态进程才会完全退出,在用户态进程完全退出时,其占用的共享内存才会被操作系统回收再利用。可以看出:本申请提出了这种监控机制和内核模块的工作机制,内核模块在用户态进程崩溃重启阶段,不会访问用户态进程的共享内存,不会获取到错误数据,从而能够避免因错误数据引发操作系统稳定性问题。

附图说明

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

图1是本申请提供的一种共享内存的访问控制方法的流程图;

图2是本申请提供的一种共享内存的访问控制装置的结构图;

图3是本申请提供的一种共享内存的访问控制系统的结构图;

图4是本申请提供的图3所示控制系统的工作原理图。

具体实施方式

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

本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本申请提供的技术方案提供了一种共享内存的访问控制方法,与现有技术所不同的是,在本申请中内核模块不是盲目地发起线程直接访问用户态进程的共享内存,而是基于本申请提供的内核模块工作机制,根据用户态进程的状态,控制线程对共享内存的访问情况。尤其是在,用户态进程进入退出状态时,内核模块能够及时控制线程结束对共享内存的访问,并在所有线程完成对共享内存的访问时,再触发用户态进程完成退出。由于用户态进程崩溃或者出现异常时,用户态进程就会进入退出状态,在用户态进程完成退出时,系统才会回收用户态进程占用的共享内存。因此,利用本申请提供的技术方案,内核模块能够根据用户态进程的实际状态,及时控制线程的访问情况,从而避免盲目访问共享内存得到错误数据引发操作系统稳定性的问题。

另一方面为了保证本申请的建立方法在实际中的应用和实现,基于与上述方法相同的技术思路,本申请还提供了一种共享内存的访问控制装置、一种共享内存的访问控制系统。该装置、该系统能够达到与方法相同的技术效果。

为了方便本领域技术人员很好地理解本申请的技术方案,先对本申请涉及到的技术名词进行简单介绍。

一般来说,进程即可在用户模式下运行,又可在内核模式下运行。内核模式的权限高于用户模式的权限。进程每次调用一个系统调用时,进程的运行方式就发生变化:从用户模式切换到内核模式,然后继续执行。

可见:一个进程在CPU上运行可以有两种运行模式(进程状态):用户模式和内核模式。如果当前运行的是用户程序(用户代码),那么对应进程就处于用户模式(用户态)。则本申请中提到的用户态进程就是指运行在用户模式下的进程。

Linux内核引入了内核模块机制,通过动态加载内核模块,使得在运行过程中扩展内核的功能,不需要的时候,卸载该内核模块。可以理解的是,内核模块是一种没有经过链接,不能独立运行的目标文件,是在内核空间中运行的程序。

为了方便本领域技术人员很好地理解本申请的技术方案,接下来,对本申请提供的一种共享内存的访问控制方法进行介绍。

参见图1,图1是本申请提供的一种共享内存的访问控制方法的流程图,该方法是应用于操作系统的内核模块中,如图1所示,该方法包括:步骤101至步骤103:

步骤101:监控用户态进程的状态。

步骤102:若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存。

步骤103:当所述线程结束访问时,触发所述用户态进程完成退出。

在实现时,为了能够实时监控到用户态进程的状态,则图1所示方法还可以包括:

设置所述用户态进程调用预设的字符设备驱动中的release函数实现用户态进程的退出;所述release函数用于感知所述用户态进程进入退出状态,并在确定访问所述用户态进程的共享内存的线程结束访问时,再触发所述用户态进程完成退出。

进一步地,为了实时获知用户态进程进入启动状态,则图1所示方法还可以包括:

设置所述用户态进程调用预设的字符设备驱动中的open函数实现用户态进程的启动;所述open函数用于实时感知用户态进程进入启动状态。

这样,用户态进程在调用release函数,就能够在第一时间感知到用户态进行进入退出状态;或者,用户态进程调用open函数时,就能够在第一时间感知到用户态进程进入启动状态。

进一步地,发明人考虑到一个内核模块可能发起多个线程访问同一用户态进程的共享内存,而这多个线程间经常是不同步的,因此,基于这种应用场景的考虑,为了尽可能地防止出现内核模块访问错误数据引起操作系统稳定性问题,发明人提供了可选的方案,该方案是在图1所示方法的基础上,增加如下步骤:

设置所述用户态进程对应的访问计数器;所述访问计数器用于记录所述用户态进程的共享内存正在被访问的次数;

则所述若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存,包括:

若所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存。

在实现时,所述内核模块发起线程访问所述共享内存时,控制所述访问计数器执行一次计数,在线程访问结束时,控制该访问计数器撤销一次计数;(例如:在线程发起访问时,控制该访问计数器执行加一,在线程访问结束时,控制所述访问计数器执行减一;),则该访问计数器就能够记录共享内存正在被访问的次数。

其中,所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存,可以包括:

若所述状态标识所述用户态进程进入退出状态,且所述访问计数器的计数值为零,则禁止发起新线程访问所述用户态进程的共享内存;若所述状态标识所述用户态进程进入退出状态,且所述访问计数器的计数值不为零,则禁止发起新线程访问所述用户态进程的共享内存,并控制正在访问所述用户态进程的共享内存的线程,尽快结束访问。

由于每个线程的访问情况不同,因此,为了控制线程尽快结束访问,在所述方法的基础上,所述方法还可以包括:

监控正在访问所述共享内存的线程是否在预设时间内结束访问,如果否,则再次通知正在访问所述共享内存的线程尽快结束访问。

可以看出:通过时间监控,多次通知的方式控制线程尽快结束对共享内存的访问。

另外,本申请发明人还考虑到操作系统在实际运行过程中,CPU(Central Processing Unit,中央处理器)是可以根据需求调度进程的,被调度的进程会暂停进程处理,待调度结束后,进程在恢复处理。但考虑到,如果内核模块发起的线程如果被调用,访问共享内存的过程就会被打断,导致引用计数长期得不到释放,因此,为了保证内核模块的工作机制正常进行,发明人提供了可选的方案,该方案是在图1所示方法的基础上,还可以包括如下步骤:

禁止中央处理器对所述线程发起进程调度,并在所述线程访问完毕时,解除禁止。

可以理解为,在所述内核模块发起线程访问所述用户态进程的共享内存之前,禁止中央处理器对所述内核模块发起进程调度,并在所述线程执行完毕访问时,解除禁止。即,在线程访问共享内存期间,整个访问过程不会被随意打断。

可以看出:利用“禁止-解除CPU调度”机制,既能够避免CPU在内核模块访问共享内存过程中对进程的随意调度,又能够在第一时间解除禁止,尽可能减少对CPU调度需求的影响。

另外,为了兼容系统的底层实现,本申请还提供了以下方案,用于实现实时监控用户态进程的状态,则在图1所示方法的基础上,还可以包括如下步骤:

预先注册与所述用户态进程相关的回调函数;

则通过所述回调函数被调用方式,监控得到用户态进程的状态。

即,对于内核模块而言,需要预先在内核中注册待访问的用户态进程相关的回调函数,然后,在实现时,就可以通过回调函数在第一时间向内核模块发布关于用户态进程所处状态的消息,则内核模块可以在第一时间监控到用户态进程的状态。

可以看出,本申请提供的一种共享内存的访问控制方法,该方法运行在内核中,该方法提出了监控机制和线程访问控制机制,基于该监控机制,内核模块能够在第一时间了解到用户态进程的状态,并按照这种工作机制,在发现用户态进程进入退出状态时,及时控制正在访问用户态进程的共享内存的线程,尽快停止访问;并且该内核模块停止发起新的访问进程。在访问用户态进程的共享内存的线程都结束访问时,用户态进程才会完全退出,在用户态进程完全退出时,其占用的共享内存才会被操作系统回收再利用。而在用户态进程进入启动状态时,则表明用户态进程处于正常运行状态,此时内核模块可以发起线程访问用户态进程的共享内存。因此,本申请提出了这种监控机制和内核模块的工作机制,内核模块在用户态进程崩溃重启阶段,不会访问用户态进程的共享内存,不会获取到错误数据,从而能够避免因错误数据引发操作系统稳定性问题。

与上述方法相对应的,本申请还提供了一种共享内存的访问控制装置,接下来结合图2对该装置进行解释说明。

参见图2,图2示出了本申请提供的一种共享内存的访问控制装置的结构图,该装置应用于内核模块中,如图2所示,该装置可以包括:监控模块201、线程访问控制模块202、用户态进程退出控制模块203;下面结合该装置的工作原理,对其内部各模块的功能及其联接关系进行解释说明。

其中,所述监控模块201,用于监控用户态进程的状态;若所述用户态进程进入退出状态,触发所述线程访问控制模块202。

所述线程访问控制模块202,用于若所述用户态进程进入退出状态,控制线程停止访问所述用户态进程的共享内存;当所述线程结束访问时,触发用户态进程退出控制模块203。

所述用户态进程退出控制模块203,用于当所述线程结束访问时,触发所述用户态进程完成退出。

可选的,所述装置还包括:

访问计数模块,用于设置所述用户态进程对应的访问计数器;所述访问计数器用于记录所述用户态进程的共享内存正在被访问的次数;

则所述线程访问控制模块,具体用于:

若所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存。

可选的,所述线程访问控制模块,包括:

禁止子模块,用于禁止发起新线程访问所述用户态进程的共享内存;或,

控制子模块,用于控制正在访问所述用户态进程的共享内存的线程,尽快结束访问。

可选的,所述装置还包括:

延迟再通知模块,用于监控正在访问所述共享内存的线程是否在预设时间内结束访问,如果否,则再次通知正在访问所述共享内存的线程尽快结束访问。

可选的,所述装置还包括:

禁止模块,用于禁止中央处理器对所述线程发起进程调度,并在所述线程访问完毕时,解除禁止。

可选的,所述装置还包括:

注册模块,用于预先注册与所述用户态进程相关的回调函数;

则所述监控模块具体通过所述回调函数被调用方式,监控得到用户态进程的状态。

可选的,所述装置还包括:

第一设置模块,用于设置所述用户态进程调用预设的字符设备驱动中的release函数实现用户态进程的退出;所述release函数用于感知所述用户态进程进入退出状态,并在确定访问所述用户态进程的共享内存的线程结束访问时,再触发所述用户态进程完成退出。

可选的,所述装置还包括:

第二设置模块,用于设置所述用户态进程调用预设的字符设备驱动中的open函数实现用户态进程的启动;所述open函数用于实时感知用户态进程进入启动状态。

可以看出,在操作系统内核中部署本申请提供的共享内存的访问控制装置,能够有效控制内核模块在用户态进程崩溃重启阶段,不会访问用户态进程的共享内存,不会获取到错误数据,从而能够避免因错误数据引发操作系统稳定性问题。

以上是对本申请提供的一种共享内存的访问控制方法、装置进行了解释说明。接下来对本申请提供的一种共享内存的访问控制系统进行解释说明。参见图3,图3是本申请提供的一种共享内存的访问控制系统的结构图,如图3所示,该系统300包括:

状态感知模块301、消息发布模块302、以及内核模块303;

其中,所述状态感知模块301,用于实时感知用户态进程的状态,并将所述状态发送至所述消息发布模块;

所述消息发布模块302,用于向所述内核模块通知所述用户态进程的状态;

所述内核模块303配置有本申请提供的一种共享内存的访问控制装置,该装置的具体结构和功能在上文中给出具体解释说明,可以参见上文以及图2描述的内容,此处不再赘述。

在本申请中,所述内核模块303,用于在所述用户态进程进入退出状态时,控制线程停止访问所述用户态进程的共享内存,并当所述进程结束访问时,再触发所述用户态进程完成退出。但需要说明的是,在实现时,该系统可以包括一个内核模块,也可以包括多个内核模块,多个内核模块可以对同一用户态进程的共享内存进行访问,也可以对不同用户态进程的共享内存进行访问。图3所示包含一个内核模块的结构,仅仅是为了便于解释说明,并不局限该系统的实际结构。

当该系统包括多个内核模块时,则消息发布模块与这多个内核模块进行通信,向每个内核模块通知该内核模块所要访问的用户态进程的状态情况。

关于状态感知模块301,本申请提供了一种可选的实现方案,该状态感知模块301可以包括:

第一感知子模块,用于通过预设的open函数实时感知所述用户态进程进入启动状态,并触发所述消息发布模块向所述内核模块发布所述用户态进程进入启动状态的消息;

第二感知子模块,用于通过预设的release函数实时感知所述用户态进程进入退出状态,触发所述消息发布模块向所述内核模块发布所述用户态进程进入退出状态的消息,并且,设置所述release函数在确定访问所述共享内存的线程都结束时,再执行退出。

这里需要说明的是,本申请中提出的realease函数是专用于实时感知用户态进程进入退出状态的,并且,在该release函数返回之前,用户态进程是不会退出,用户态进程占用的共享内存也不会被清理。即,用户态进程的退出过程必须调用release函数,只有release函数返回后,用户态进程才能够执行退出,操作系统才清理用户态进程占用的共享内存。但在用户态进程真正执行退出之前,所有线程已经结束了对用户态进程的共享内存的访问,因此,内核模块就不会访问到错误数据。

这里需要说明的是,在本申请中状态感知模块中预先配置有字符设备文件和字符设备驱动,其中字符设备驱动包括:release函数和open函数;预先配置好的字符设备文件和字符设备驱动可理解为虚拟的字符设备文件和字符设备驱动,其是本申请为了实现实时监控专门设置的,其不同于具有实际业务功能的字符设备文件、字符设备驱动。

一个用户态进程启动或退出时,是通过系统调用具有实际业务功能的字符设备文件、字符设备驱动实现的,但在本申请中,设置了虚拟的字符设备文件、虚拟的字符设备驱动,该设置的作用是,强制要求用户态进程在启动或退出时,既按照传统的方式系统调用具有实际业务功能的字符设备文件、字符设备驱动的同时,还需要通过系统调用本申请的虚拟的字符设备文件、虚拟的字符设备驱动。

由于,用户态进程在启动时,首先通过open系统调用打开状态感知模块中预设的字符设备文件,open系统调用最终一定会调用该设备的open函数,因此,状态感知模块能够通过open函数在第一时间感知到用户态进程进入启动状态。

而在用户态进程即将退出时,操作系统会自动关闭该用户态进程已打开的文件,该文件至少包括:状态感知模块对应的字符设备文件,在关闭该字符设备文件时,会自动调用该设备的release函数,因此,状态感知模块通过release函数就能够在第一时间感知到用户态进程进入退出状态。因此,状态感知模块通过open函数和release函数就能够在第一时间感知到用户态进程的状态。

关于消息发布模块302,本申请提供了可选的实现方案,该消息发布模块302,可以包括:

注册记录子模块,用于记录所述内核模块预先注册的、与所述用户态进程对应的回调函数;

消息发布子模块,用于通过调用与所述用户态进程对应的回调函数地方式,向所述内核模块发布所述用户态进程的状态。

可以看出:消息发布模块,通过注册记录子模块为内核模块提供了注册通道,内核模块先通过该注册通道,注册待访问的用户态进程对应的回调函数。针对同一待访问的用户态进程,不同的内核模块注册的回调函数不同;消息发布模块根据内核模块的注册情况,通过注册记录子模块来记录“内核模块标识、待访问的用户态进程标识、回调函数”三者之间的唯一对应关系。

进一步地,消息发布模块在获得某个用户态进程的状态时,通过消息发布子模块,遍历注册记录子模块所记录的对应关系,通过调用回调函数的方式,向内核模块发布关于用户态进程状态的消息。

另外,考虑到一个内核模块可以发起多个进程对同一用户态进程的共享内存进行访问,而这多个进程间可能是不同步的,因此,基于这种应用场景的考虑,为了尽可能地防止出现内核模块访问错误数据引起操作系统稳定性问题,则内核模块可以包括:

监控模块、线程访问控制模块、用户态进程退出控制模块、以及访问计数模块;

其中,所述监控模块,用于监控用户态进程的状态;若所述用户态进程进入退出状态,触发所述线程访问控制模块。

所述访问计数模块,用于设置所述用户态进程对应的访问计数器;所述访问计数器用于记录所述用户态进程的共享内存正在被访问的次数;

所述线程访问控制模块,用于若所述用户态进程进入退出状态,且根据所述访问计数器的计数值,控制线程停止访问所述用户态进程的共享内存;当所述线程结束访问时,触发用户态进程退出控制模块。

所述用户态进程退出控制模块,用于当所述线程结束访问时,触发所述用户态进程完成退出。

可以理解的是,内核模块针对需要访问的用户态进程的共享内存创建一个访问计数器,该访问计数器能够记录共享内存正在被访问的次数。当内核模块发起的线程对共享内存进行访问时,该访问计数器就计数一次(例如执行加一操作),而当访问完毕时,访问计数器就撤销计数一次(例如执行减一操作)。因此,访问计数器能够记录用户态进程的共享内存正在被访问的次数情况。

基于此,内核模块不仅可能有效控制即将发起的对共享内存的访问,又能够有效控制已经发起的但还未结束的、对共享内存的访问,在用户态进程进入退出状态时,能够及时有效地控制线程尽快完成访问,从而避免访问到错误数据对操作系统的稳定性影响。

上文从系统的结构、各个模块的功能以及数据连接关系的角度进行解释说明。为了方便本领域技术人员进一步了解本申请提供的系统的实现方式,下面结合图4对该系统的核心工作原理进行解释说明。

参见图4,图4示出了图3所示系统的各个模块的交互过程,为了方便说明,在图4中还示出了用户态进程与系统中各个模块的交互过程,主要是便于本领域技术人员理解,本申请的系统本身并不包含具体的用户态进程。

如图4所示,内核模块303执行操作1:先向消息发布模块302发起注册请求,注册关于用户态进程的回调函数;该操作1可以在操作系统的初始化过程中完成。用户态进程进入启动阶段,对应图2中的操作2至操作4,即,用户态进程通过open系统调用开始启动,状态感知模块301感知到用户态进程进入启动状态,并及时通知消息发布模块302,同时,消息发布模块302也在第一时间通知内核模块303,内核模块303在用户态进程进入启动状态时,可以执行操作5,即,发起线程对用户态进程的共享内存进行访问。用户态进程正常运行过程中,就一直处于启动状态,在此过程中,内核模块303可以持续重复执行操作5。

当用户态进程进入退出阶段时,执行操作6,状态感知模块301感知到用户态进程进入退出状态,并及时通知消息发布模块302,消息发布模块302也在第一时间通知内核模块303,内核模块303在用户态进程进入退出状态时,立刻执行操作9,即,控制线程停止对共享内存的访问,和/或,控制正在访问共享内存的线程尽快结束访问。在所有线程结束访问时,用户态进程才能够完成退出,即执行操作10。

本申请提供的共享内存的访问控制系统,提出了用户态进程状态的监控机制和内核模块根据用户态进程状态控制访问的工作机制;基于该监控机制,内核模块能够在第一时间了解到用户态进程的状态,并按照这种工作机制,在发现用户态进程进入退出状态时,及时控制正在访问用户态进程的共享内存的线程,尽快停止访问;并且该内核模块停止发起新的访问进程。在访问用户态进程的共享内存的线程都结束访问时,用户态进程才会完全退出,在用户态进程完全退出时,其占用的共享内存才会被操作系统回收再利用。可以看出:本申请提出了这种监控机制和内核模块的工作机制,内核模块在用户态进程崩溃重启阶段,不会访问用户态进程的共享内存,不会获取到错误数据,从而能够避免因错误数据引发操作系统稳定性问题。

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

最后,还需要说明的是,在本文中,诸如第一、第二、第三、第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的一种共享内存的访问控制方法、装置及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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