一种访存异常的处理方法、计算设备、存储介质及程序产品与流程

专利检索2026-01-19  6


本技术涉及计算机领域,尤其涉及一种访存异常的处理方法、计算设备、存储介质及程序产品。


背景技术:

1、虚拟内存一般划分成互不重叠的内核空间和用户空间,用户程序只能访问用户空间,也就是说一个用户程序所能使用的最大内存空间取决于用户空间的大小,比如,对于某些指令集架构,虚拟内存总共为4gb,其中,用户空间是 2gb,内核空间是2gb,如果用户空间对应的 2gb 已经被用户程序全部用完,那么用户程序再向内核申请内存时,内核也无法再给这个用户程序分配内存了,最终导致程序崩溃。

2、那么,如何在用户空间耗尽时,继续为用户程序分配内存,使得用户程序正常执行,有待解决。


技术实现思路

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、第五方面,本技术实施例提供了一种计算机程序产品,包括有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行实现上述第一方面的任意方法。


技术特征:

1.一种访存异常的处理方法,其特征在于,包括:

2.如权利要求1所述的方法,其特征在于,所述模拟执行触发所述第一访存异常的指令之后,还包括:

3.如权利要求1所述的方法,其特征在于,所述将所述页面异常对应的上下文信息传递给所述信号处理函数,包括:

4.如权利要求1所述的方法,其特征在于,所述用户程序注册针对第一访存异常的信号处理函数,包括:

5.如权利要求4所述的方法,其特征在于,所述注册所述信号处理函数,包括:

6.如权利要求1至5中任一项所述的方法,其特征在于,所述为所述用户程序分配处于内核空间中的扩展用户空间,包括:

7.如权利要求6所述的方法,其特征在于,所述内存耗尽的指示信息,包括:

8.如权利要求6所述的方法,其特征在于,所述通过自身存储的内核空间分配表确定内核空间中是否存在满足所述内存分配请求的虚拟地址空间,包括:

9.如权利要求8所述的方法,其特征在于,所述确定内核空间中是否存在满足所述内存分配请求的虚拟地址空间之前,还包括:

10.如权利要求9所述的方法,其特征在于,所述用户程序确定后备存储的大小满足所述内存分配请求指示的内存大小,包括:

11.如权利要求10所述的方法,其特征在于,所述获取所述用户程序触发的内存分配请求之后,接收到内核发送的内存耗尽的指示信息之前,还包括:

12.如权利要求10所述的方法,其特征在于,扩展用户空间中对应的用于本次内存分配的内存大小大于等于所述内存分配请求指示的内存大小;

13.如权利要求1至5中任一项所述的方法,其特征在于,所述为所述用户程序分配处于内核空间中的扩展用户空间,包括:

14.如权利要求13所述的方法,其特征在于,所述通过所述用户程序中的内存分配包装器为所述用户程序分配处于内核空间中的扩展用户空间之前,还包括:

15.如权利要求12所述的方法,其特征在于,所述为所述用户程序分配处于内核空间中的扩展用户空间之后,还包括:

16.如权利要求15所述的方法,其特征在于,所述方法还包括:

17.一种计算设备,其特征在于,包括:

18.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得如权利要求1至16中任一项所述的方法实现。

19.一种计算机程序产品,其特征在于,包括有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行权利要求1至16任一所述方法的步骤。


技术总结
本申请提供一种访存异常的处理方法、计算设备、存储介质及程序产品,该方法包括:用户程序注册针对页面异常的信号处理函数以及为用户程序分配处于内核空间中的扩展用户空间;信号处理函数用于替换内核对页面异常的默认处理方式;在用户程序触发页面异常后,由内核触发所述信号处理函数,并将页面异常对应的上下文信息传递给信号处理函数;信号处理函数在确定页面异常为第一访存异常后,模拟执行触发第一访存异常的指令;其中,第一访存异常为针对用户程序对扩展用户空间进行访存时触发的。该方案,能够在用户空间耗尽时,继续为用户程序分配内存,使得用户程序正常执行。

技术研发人员:张荣,张欣悦,安贝贝
受保护的技术使用者:上海芯联芯智能科技有限公司
技术研发日:
技术公布日:2024/5/29
转载请注明原文地址:https://win.8miu.com/read-1159994.html

最新回复(0)