共享内存的管理方法、装置、电子设备及存储介质与流程

文档序号:36076921发布日期:2023-11-18 00:23阅读:30来源:国知局
共享内存的管理方法与流程

本技术属于通信,特别是涉及一种共享内存的管理方法、装置、电子设备及存储介质。


背景技术:

1、随着linux系统的不断完善,基于linux系统开发的嵌入式产品越来越多,linux系统进程间的通信也越来越多,包括管道、消息队列、共享内存、信号量等等,其中共享内存是最快的一种进程间的通信方式.

2、在相关技术中,通常为通过结构体成员的引用方式进行共享内存的使用。例如首先在工程中定义一个结构体,结构体中包含很多我们需要的业务数据,然后依据结构体的大小通过系统调用shmget()函数创建对应的共享内存,然后调用shmat()函数将共享内存映射到本进程空间,这样,当前进程就可以正常使用我们创建好的共享内存了。

3、然而,上述通过结构体成员的直接引用相当于将共享内存的所有信息直接暴露了,一旦在引用或数据复制拷贝过程中出现内存越界的可能,则会造成其余内存数据的踩踏,影响进程运行的稳定性。


技术实现思路

1、本技术提供一种共享内存的管理方法、装置、电子设备及存储介质,以便提高进程运行的稳定性。

2、为了解决上述技术问题,本技术是这样实现的:

3、第一方面,本技术实施例提出一种共享内存的管理方法,其中,所述共享内存包括数据区、偏移区和属性区;所述数据区用于存储业务数据,包括按照业务数据类型划分的业务数据块;所述属性区中包括与所述业务数据块一一对应的属性数据块,所述属性数据块用于记录业务数据块业务数据的结构体属性信息和所述业务数据块相对于共享内存首地址的偏移量;所述偏移区用于记录各个属性数据块相对于共享内存首地址的偏移量;所述方法应用于基板管理控制器,包括:

4、接收第一操作指令,所述第一操作指令用于指示针对目标数据的目标操作;

5、响应于所述第一操作指令,根据所述目标数据的类型从所述偏移区中读取所述目标数据对应的第一属性数据块的第一偏移量,并读取共享内存首地址,所述第一偏移量为所述第一属性数据块相对于所述共享内存首地址的偏移量;

6、根据所述第一偏移量和所述共享内存首地址计算所述第一属性数据块的第一地址;

7、基于所述第一地址读取所述第一属性数据块,并根据所述第一属性数据块计算所述目标数据的第二地址;

8、根据所述第二地址对所述目标数据执行所述目标操作。

9、可选的,所述基于所述第一地址读取所述第一属性数据块,并根据所述第一属性数据块计算所述目标数据的第二地址,包括:

10、在所述目标数据为基于数值型索引的数据的情况下,基于所述第一地址,从所述第一属性数据块中读取所述第一属性数据块对应的第一业务数据块的第一属性信息和所述第一业务数据块相对于共享内存首地址的第二偏移量;

11、根据所述第一属性信息计算所述目标数据对应的目标参数在所述第一属性数据块中的第一相对位置;

12、根据所述共享内存首地址、所述第二偏移量和所述第一相对位置,计算所述目标数据的第一地址。

13、可选的,所述第一属性信息包括所述第一业务数据块对应的第一结构体中每个节点存储的参数大小和个数、所述目标数据对应的目标参数在所述第一结构体中的层级和所述目标数据的索引类型。

14、可选的,所述第一相对位置包括所述目标参数所在节点与所述第一属性数据块的首地址之间的第三偏移量;所述根据所述第一属性信息计算所述目标数据对应的目标参数在所述第一属性数据块中的第一相对位置,包括:

15、根据所述目标参数在所述第一结构体的层级,确定在所述目标参数所在节点与所述第一属性数据块首地址之间的第一节点;

16、根据所述第一节点所存储的参数的大小和个数,计算所述目标参数所在节点与所述第一属性数据块首地址之间的第三偏移量。

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、操作模块,根据所述第二地址对所述目标数据执行所述目标操作。

56、第三方面,本技术实施例提供一种电子设备,包括:处理器、存储器以及存储在所述存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面或第二方面所述的共享内存的管理方法。

57、第四方面,本技术实施例提供一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面或第二方面所述的共享内存的管理方法。

58、本技术提供了一种共享内存的数据管理方法,在接受并响应第一操作指令后,根据目标数据的类型从所述偏移区中读取所述目标数据对应的第一属性数据块的第一偏移量,并读取共享内存首地址,根据所述第一偏移量和所述共享内存首地址计算所述第一属性数据块的第一地址,基于所述第一地址读取所述第一属性数据块,并根据所述第一属性数据块计算所述目标数据的第二地址,根据所述第二地址对所述目标数据执行所述目标操作。其中,在定位数据区中的数据的过程中,需要进行两次偏移的运算,而非直接引用,相对于通过结构体成员直接引用的共享内存使用方式,本技术实施例所述的共享内存中的偏移区和属性区构成了对于内存数据的两层封装保护,降低了在引用或数据复制拷贝过程中出现内存越界的可能,提高了进程运行的稳定性。

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