一种内存调用方法及相关设备与流程

文档序号:36340215发布日期:2023-12-13 20:40阅读:34来源:国知局
一种内存调用方法及相关设备与流程

本技术涉及内存管理,尤其涉及一种内存调用方法及相关设备。


背景技术:

1、在操作系统中,进程间内存空间是隔离的,一个进程无法直接访问另外一个进程的内存空间。实际业务系统中,可能一个进程处理一部分业务,另一进程处理另外一部分业务,两个进程通过进程间通信交互完成整个业务的处理。为了在进程之间能够进行高效通信,通常通过进程间共享内存的方法实现。

2、在相关技术中,共享内存由内存池管理结构进行统一管理和分配,多进程共享时如果某个进程异常,可能导致整个内存池管理结构混乱,无法正常进行内存池管理如内存块分配释放等,甚至因为内存池管理结构被改写而影响了另外一个进程,导致故障扩大。因此,如何高效、高可靠性的进行内存池管理,是本领域技术人员亟待解决的技术问题。


技术实现思路

1、本技术实施例提供了一种内存调用方法及相关设备,用于提高内存池管理的可靠性。

2、本技术第一方面提供了一种内存调用方法,包括:

3、获取第一进程对应的第一管理结构,其中,第一管理结构中包括内存池中内存块对应的状态信息。本技术中,每个需要进行内存共享的进程都需要配置对应的内存池管理结构,其中,内存共享的进程中包括一个管理进程和若干个使用进程,可以令第一进程为管理进程,具备申请空闲内存块的权限。第一进程的第一管理结构为主管理结构。第一管理结构具有内存池管理权限,可以指示内存池中每个内存块对应的状态。

4、响应于第一进程发送的内存申请请求,根据第一管理结构,从内存池中确定分配给第一进程的第一内存块,其中,第一内存块在第一管理结构种的第一状态信息为空闲状态。由于第一进程是管理进程,因此可以进行内存块的申请操作。当第一进程需要开始处理第一业务时,由于第一管理结构中包括内存块的状态信息,因此可以根据此信息从内存池中确定处于空闲状态的第一内存块分配给第一进程,即第一内存块作为处理第一业务的共享内存块。

5、响应于第二进程发送的内存使用请求,根据内存池配置第二进程对应的第二管理结构。当第二进程需要与第一进程共同处理第一业务时,第二进程会发送内存使用请求,此时根据内存使用请求对第二进程配置第二管理结构。

6、当第一内存块已写入来源于第一进程的第一数据时,将第一内存块在第一管理结构中的状态信息更新为第二状态信息,其中,第二状态信息用于指示将第一内存块传递至第二进程,以使第二进程根据第一数据执行第一业务。由于第一业务需要多个进程共同完成,且由第一进程完成第一步骤,得到第一数据,然后第二进程再根据第一数据进行第一业务的处理操作。因此,当第一数据写入第一内存块后,对第一管理结构中的第一内存块的状态信息进行更新,指示将内存块传递至第二进程。

7、当第一内存块已写入来源于第二进程的第二数据,将第一内存块在第二管理结构中的状态信息更新为第三状态信息,其中,当第一业务已在第二进程中执行完毕,则第三状态信息用于指示第一内存块被释放。在第一内存块传递到第二进程后,无需改变第一管理结构中内存块的状态信息,也就是说,进程里的管理结构只负责在本进程内操作的内存块的状态信息的更新。当第一内存块传递到第二进程后,第二进程根据第一数据进行第一业务的处理,得到第二数据。可以理解的是,第二数据可能是第一业务执行完毕的数据,也可能是执行第一业务过程中的中间数据。若第二数据是第一业务执行完毕的数据,说明第一业务执行完毕,此时更新第二管理结构中第一内存块的状态信息,指示第一内存块被释放,说明业务结束。

8、本实施例中,对内存池采用了分离式的内存池管理结构,通过将内存池管理结构设置在进程中,使得每个进程都具备对应的内存池管理结构,内存块申请和内存块传递的过程中,处理内存块的进程只操作本进程的内存块管理结构,如第一进程在传递内存块时,操作第一管理结构中的内存块状态信息发生变更,在第一内存块传递至第二进程后,更新第一管理结构中对应内存块传递的信息后,则不再更新第一管理结构中的该内存块的状态信息,因此无论后续进程中是否存在误修改或进程故障等错误,该错误都不会扩散,因此解决了多进程共享时由于存在进程间状态异常而整个内存池无法正常进行内存池管理的问题,提高了共享内存中业务处理的稳定性。

9、在一种实施方式中,获取第一进程对应的第一管理结构,具体包括:

10、响应于第一进程发送的内存池创建请求,创建内存池;

11、根据内存池配置第一进程对应的第一管理结构。

12、本实施例中,在接收到第一进程发送的内存池创建请求后,响应于该内存池创建请求,创建内存池。可以理解的是,创建内存池时需要同时创建对应的内存池管理结构,由于内存池创建请求是第一进程发送的,因此第一进程对应的第一管理结构为该内存池的主管理结构。

13、在一种实施方式中,根据内存池配置第一进程对应的第一管理结构,具体包括:

14、根据内存池创建请求中携带的内存池参数,将内存池中的共享内存分割为n个大小相同的内存块,其中n为大于0的整数;

15、根据内存池参数配置第一进程对应的第一管理结构;

16、将n个内存块挂接到第一管理结构的空闲链表。

17、本实施例中,内存池创建请求中携带有内存池创建参数,如内存池标识、内存块大小、内存块个数、对齐等。内存池创建流程包括:根据内存池创建参数计算主管理结构大小,进而创建主管理结构;再根据内存池创建参数计算共享内存总大小,进而根据共享内存总大小申请共享内存;根据内存池创建参数中的内存块大小、内存块个数、对齐等参数把共享内存切分为若干个内存块;将切分后的内存块挂接到管理进程的主管理结构的空闲链表。

18、在一种实施方式中,在获取第一进程对应的第一管理结构之后,还包括:

19、将第二管理结构中的内存块对应的状态信息共享到第一管理结构中。

20、本实施例中,将从管理结构中的内存块对应的状态信息共享到主管理结构中,以便主管理结构可以对从管理结构进行监控。

21、在一种实施方式中,将第二管理结构中的各个内存块对应的状态信息共享到第一管理结构中,具体包括:

22、将第二管理结构的内存块状态列表地址空间映射到第一进程的地址空间;

23、将第二管理结构的内存块状态列表指针挂接到第一管理结构里。

24、本实施例中,使用进程挂载已创建的内存池后配置从管理结构的具体处理流程包括:根据从管理结构的内存池标识查找该内存池的主管理结构;根据主管理结构中的内存池参数配置从管理结构,使得从管理结构总共的内存池参数与主管理结构中的一致;初始化从管理结构的内存块状态列表;映射从管理结构内存空间到管理进程,管理进程对该内存空间只拥有只读权限;从管理结构的内存块状态列表挂接到主管理结构的使用进程内存块状态链表上。

25、在一种实施方式中,在获取第一进程对应的第一管理结构之后,还包括:

26、响应于第三进程发送的内存使用请求,根据内存池配置第三进程对应的第三管理结构;

27、当第一业务在第二进程中未执行完毕,则第三状态信息用于指示将第一内存块传递至第三进程,以使第三进程根据第二数据执行第一业务;

28、在当第一内存块已写入来源于第二进程的第二数据,将第二管理结构中的第一内存块的状态信息更新为第三状态信息之后,还包括:

29、当第一内存块已写入来源于第三进程的第三数据,将第三管理结构中的第一内存块的状态信息更新为第四状态信息,其中,当第一业务已在第三进程中执行完毕,则第四状态信息用于指示第一内存块被释放。

30、本实施例中,由第一进程、第二进程和第三进程共同完成第一业务,因此需要对第三进程配置管理结构,第二数据是第一业务执行过程中的中间数据,说明第一业务在第二进程中并未执行完毕,此时将第一内存块在第二管理结构中的状态信息更新为第三状态信息,第三信息用于指示将第一内存块传递至第三进程。当第一业务已在第三进程中执行完毕,则第四状态信息用于指示第一内存块被释放。

31、在一种实施方式中,还包括:

32、周期性地扫描第一管理结构中内存块的状态信息;

33、当检测到已被释放的处于非空闲状态的内存块时,将已被释放的处于非空闲状态的内存块在第一管理结构中的状态信息更新为空闲状态。

34、本实施例中,内存块释放时只置本进程的内存块状态字段为释放状态,那么对于管理进程来说,只有各进程中被释放的内存块回到空闲状态,才能进行下一次的申请。此时,使用进程把内存块释放后,可以回收已经释放的空闲内存块。

35、在一种实施方式中,还包括:根据第一内存块的状态信息创建进程关系图,进程关系图中包括节点与连边,节点用于描述进程对应的内存块状态信息,连边用于描述两个进程之间的通信关系。

36、本实施例中,多个进程、多个内存块的处理路径,构成了进程关系图。通过对进程关系图的分析,计算节点(对应某个进程)的异常权值,可以判断系统那些节点出现了异常,回收相关的内存块,并通过单进程复位重启的方式恢复异常节点,提升了系统可靠性、可定位性。

37、在一种实施方式中,在获取第一进程对应的第一管理结构之后,还包括:

38、响应于第一进程发送的权限赋予请求,以使第四进程执行发送内存申请请求的动作;

39、根据内存池配置第四进程对应的第四管理结构;

40、响应于第四进程发送的内存申请请求,根据第四管理结构,从内存池中确定分配给第四进程的第二内存块,其中,第二内存块在第四管理结构中的第五状态信息为空闲状态;

41、当第二内存块已写入来源于第四进程的第四数据时,将第二内存块在第四管理结构中的第五状态信息更新为第六状态信息,其中,第六状态信息用于指示将第二内存块传递至第一进程,以使第一进程根据第四数据执行第二业务。

42、本实施例中,管理进程不是创建内存池的进程,而是由创建内存池的进程授予管理权限的其他进程。

43、本技术第二方面提供了一种内存调用装置,包括:

44、管理模块,用于获取第一进程对应的第一管理结构,其中,第一管理结构中包括内存池中的内存块对应的状态信息;

45、分配模块,用于响应于第一进程发送的内存申请请求,根据第一管理结构,从内存池中确定分配给第一进程的第一内存块,其中,第一内存块在第一管理结构中的第一状态信息为空闲状态;

46、管理模块,还用于响应于第二进程发送的内存使用请求,根据内存池配置第二进程对应的第二管理结构;

47、传递模块,用于当第一内存块已写入来源于第一进程的第一数据,将第一内存块在第一管理结构中的状态信息更新为第二状态信息,其中,第二状态信息用于指示将第一内存块传递至第二进程,以使第二进程根据第一数据执行第一业务;

48、传递模块,还用于当第一内存块已写入来源于第二进程的第二数据,将第一内存块在第二管理结构中的状态信息更新为第三状态信息,其中,当第一业务已在第二进程中执行完毕,则第三状态信息用于指示第一内存块被释放。

49、本实施例中,对内存池采用了分离式的内存池管理结构,通过将内存池管理结构设置在进程中,使得每个进程都具备对应的内存池管理结构,内存块申请和内存块传递的过程中,处理内存块的进程只操作本进程的内存块管理结构,如第一进程在传递内存块时,操作第一管理结构中的内存块状态信息发生变更,在第一内存块传递至第二进程后,更新第一管理结构中对应内存块传递的信息后,则不再更新第一管理结构中的该内存块的状态信息,因此无论后续进程中是否存在误修改或进程故障等错误,该错误都不会扩散,因此解决了多进程共享时由于存在进程间状态异常而整个内存池无法正常进行内存池管理的问题,提高了共享内存中业务处理的稳定性。

50、在一种实施方式中,获取第一进程对应的第一管理结构,具体包括:

51、响应于第一进程发送的内存池创建请求,创建内存池;

52、根据内存池配置第一进程对应的第一管理结构。

53、本实施例中,在接收到第一进程发送的内存池创建请求后,响应于该内存池创建请求,创建内存池。可以理解的是,创建内存池时需要同时创建对应的内存池管理结构,由于内存池创建请求是第一进程发送的,因此第一进程对应的第一管理结构为该内存池的主管理结构。

54、在一种实施方式中,根据内存池配置第一进程对应的第一管理结构,具体包括:

55、根据内存池创建请求中携带的内存池参数,将内存池中的共享内存分割为n个大小相同的内存块,其中n为大于0的整数;

56、根据内存池参数配置第一进程对应的第一管理结构;

57、将n个内存块挂接到第一管理结构的空闲链表。

58、本实施例中,内存池创建请求中携带有内存池创建参数,如内存池标识、内存块大小、内存块个数、对齐等。内存池创建流程包括:根据内存池创建参数计算主管理结构大小,进而创建主管理结构;再根据内存池创建参数计算共享内存总大小,进而根据共享内存总大小申请共享内存;根据内存池创建参数中的内存块大小、内存块个数、对齐等参数把共享内存切分为若干个内存块;将切分后的内存块挂接到管理进程的主管理结构的空闲链表。

59、在一种实施方式中,管理结构,还用于将第二管理结构中的内存块对应的状态信息共享到第一管理结构中。

60、本实施例中,将从管理结构中的内存块对应的状态信息共享到主管理结构中,以便主管理结构可以对从管理结构进行监控。

61、在一种实施方式中,将第二管理结构中的各个内存块对应的状态信息共享到第一管理结构中,具体包括:

62、将第二管理结构的内存块状态列表地址空间映射到第一进程的地址空间;

63、将第二管理结构的内存块状态列表指针挂接到第一管理结构里。

64、本实施例中,使用进程挂载已创建的内存池后配置从管理结构的具体处理流程包括:根据从管理结构的内存池标识查找该内存池的主管理结构;根据主管理结构中的内存池参数配置从管理结构,使得从管理结构总共的内存池参数与主管理结构中的一致;初始化从管理结构的内存块状态列表;映射从管理结构内存空间到管理进程,管理进程对该内存空间只拥有只读权限;从管理结构的内存块状态列表挂接到主管理结构的使用进程内存块状态链表上。

65、在一种实施方式中,管理模块,还用于响应于第三进程发送的内存使用请求,根据内存池配置第三进程对应的第三管理结构;

66、当第一业务在第二进程中未执行完毕时,第三状态信息用于指示将第一内存块传递至第三进程,以使第三进程根据第二数据执行第一业务;

67、传递模块,还用于当第一内存块已写入来源于第三进程的第三数据,将第三管理结构中的第一内存块的状态信息更新为第四状态信息,其中,当第一业务已在第三进程中执行完毕,则第四状态信息用于指示第一内存块被释放。

68、本实施例中,由第一进程、第二进程和第三进程共同完成第一业务,因此需要对第三进程配置管理结构,第二数据是第一业务执行过程中的中间数据,说明第一业务在第二进程中并未执行完毕,此时将第一内存块在第二管理结构中的状态信息更新为第三状态信息,第三信息用于指示将第一内存块传递至第三进程。当第一业务已在第三进程中执行完毕,则第四状态信息用于指示第一内存块被释放。

69、在一种实施方式中,还包括:

70、回收模块,用于周期性地扫描第一管理结构中处于非空闲状态的内存块的状态信息;当检测到已被释放的处于非空闲状态的内存块时,将已被释放的处于非空闲状态的内存块在第一管理结构中的状态信息更新为空闲状态。

71、本实施例中,内存块释放时只置本进程的内存块状态字段为释放状态,那么对于管理进程来说,只有各进程中被释放的内存块回到空闲状态,才能进行下一次的申请。此时,使用进程把内存块释放后,可以回收已经释放的空闲内存块。

72、在一种实施方式中,还包括:

73、检测模块,用于根据第一内存块的状态信息创建进程关系图,进程关系图中包括节点与连边,节点用于描述进程对应的内存块状态信息,连边用于描述两个进程之间的通信关系。

74、本实施例中,多个进程、多个内存块的处理路径,构成了进程关系图。通过对进程关系图的分析,计算节点(对应某个进程)的异常权值,可以判断系统那些节点出现了异常,回收相关的内存块,并通过单进程复位重启的方式恢复异常节点,提升了系统可靠性、可定位性。

75、在一种实施方式中,管理模块,还用于响应于第一进程发送的权限赋予请求,以使第四进程执行发送内存申请请求的动作;根据内存池配置第四进程对应的第四管理结构;

76、分配模块,还用于响应于第四进程发送的内存申请请求,根据第四管理结构,从内存池中确定分配给第四进程的第二内存块,其中,第二内存块在第四管理结构中的第五状态信息为空闲状态;

77、传递模块,还用于当第二内存块已写入来源于第四进程的第四数据,将第二内存块在第四管理结构中的第五状态信息更新为第六状态信息,其中,第六状态信息用于指示将第二内存块传递至第一进程,以使第一进程根据第四数据执行第二业务。

78、本实施例中,管理进程不是创建内存池的进程,而是由创建内存池的进程授予管理权限的其他进程。

79、第三方面,本技术实施例提供一种内存调用设备,该内存调用设备存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述处理设备执行上述各方面中任意一方面任意可能的实施方式的方法。

80、第四方面,本技术实施例提供一种计算机可读存储介质,该计算机存储介质存储有计算机指令,该计算机指令用于执行上述各方面中任意一方面任意可能的实施方式的方法。

81、第五方面,本技术实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面中任意一方面的方法。

82、从以上技术方案可以看出,本技术实施例具有以下优点:

83、本技术实施例公开了一种内存调用方法及相关设备,其中方法包括:获取第一进程对应的第一管理结构,其中,第一管理结构中包括内存池中的内存块对应的状态信息;响应于第一进程发送的内存申请请求,根据第一管理结构,从内存池中确定分配给第一进程的第一内存块,其中,第一内存块在第一管理结构中的第一状态信息为空闲状态;响应于第二进程发送的内存使用请求,根据内存池配置第二进程对应的第二管理结构;当第一内存块已写入来源于第一进程的第一数据,将第一内存块在第一管理结构中的状态信息更新为第二状态信息,其中,第二状态信息用于指示将第一内存块传递至第二进程,以使第二进程根据第一数据执行第一业务;当第一内存块已写入来源于第二进程的第二数据,将第一内存块在第二管理结构中的状态信息更新为第三状态信息,其中,当第一业务已在第二进程中执行完毕,则第三状态信息用于指示第一内存块被释放。

84、本技术所提供的方法对内存池采用了分离式的内存池管理结构,通过将内存池管理结构设置在进程中,使得每个进程都具备对应的内存池管理结构,内存块申请和内存块传递的过程中,处理内存块的进程只操作本进程的内存块管理结构,如第一进程在传递内存块时,操作第一管理结构中的内存块状态信息发生变更,在第一内存块传递至第二进程后,更新第一管理结构中对应内存块传递的信息后,则不再更新第一管理结构中的该内存块的状态信息,因此无论后续进程中是否存在误修改或进程故障等错误,该错误都不会扩散,因此解决了多进程共享时由于存在进程间状态异常而整个内存池无法正常进行内存池管理的问题,提高了共享内存中业务处理的稳定性。

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