技术新讯 > 计算推算,计数设备的制造及其应用技术 > 缺页异常处理方法、装置、电子设备和存储介质与流程  >  正文

缺页异常处理方法、装置、电子设备和存储介质与流程

  • 国知局
  • 2024-11-06 14:25:58

本技术涉及计算机,具体而言,涉及一种缺页异常处理方法、装置、电子设备和存储介质。

背景技术:

1、缺页异常(pagefault)指的是当软件试图访问尚未建立虚地址到物理地址映射关系的一个虚地址时,由中央处理器的内存管理单元所发出的中断。用户态处理缺页异常往往在虚拟机迁移、进程迁移或者用户态内存管理的场景中出现。

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、在一可选的实施方式中,所述缺页异常类型指示预设快表中存在所述待访问虚拟地址对应的物理内存地址,但禁止用户进行所述内存访问请求对应访问类型的访问;处理模块702,具体用于:

36、调用所述用户态异常处理函数,在预设页表的所述待访问虚拟地址对应的页表项中修改所述物理内存地址的访问权限为允许用户进行所述内存访问请求对应访问类型的访问,并根据修改后的预设页表更新所述预设快表;

37、调用所述用户态异常处理函数,根据所述指令地址返回至所述目标程序指令继续执行。

38、在一可选的实施方式中,所述获取模块,具体用于:

39、若所述待访问虚拟地址具有所述用户态处理标志,则从第一寄存器中获取所述用户态异常处理函数的地址,并在第二寄存器中设置所述缺页异常类型,在第三寄存器中设置所述指令地址;

40、调用所述用户态异常处理函数,从所述第二寄存器中获取所述缺页异常类型,并从所述第三寄存器中获取所述指令地址。

41、在一可选的实施方式中,所述处理模块,还用于:

42、从内核的注册函数数据结构中查询所述用户态异常处理函数的地址,并将所述用户态异常处理函数的地址写入所述第一寄存器中。

43、在一可选的实施方式中,所述处理模块,具体用于:

44、获取预设快表中所述待访问虚拟地址所在虚拟地址段的属性;

45、若所述预设快表中所述待访问虚拟地址所在虚拟地址段的属性包括所述用户态处理标志,则确定所述待访问虚拟地址具有所述用户态处理标志。

46、在一可选的实施方式中,所述处理模块,还用于:

47、若所述预设快表中所述待访问虚拟地址所在虚拟地址段的属性未包括所述用户态处理标志,则查询预设页表中所述待访问虚拟地址所在虚拟地址段对应的页表项;

48、若所述待访问虚拟地址所在虚拟地址段对应的页表项设置有所述用户态处理标志,则确定所述待访问虚拟地址具有所述用户态处理标志。

49、在一可选的实施方式中,所述处理模块,还用于:

50、若检测到针对待访问虚拟地址的缺页异常,则清空应用程序的指令流水线;

51、在缺页异常处理完成后,重新生成指令流水线,并根据重新生成的指令流水线重新执行应用程序。

52、第三方面,本技术实施例还提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行第一方面任一项所述的方法。

53、第四方面,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行第一方面任一项所述的方法。

54、本技术提供了一种缺页异常处理方法、装置、电子设备和存储介质,其中,该方法包括:接收应用程序执行指令地址对应的目标程序指令时产生的内存访问请求,内存访问请求中包括:目标程序指令的待访问虚拟地址,若检测到针对待访问虚拟地址的缺页异常,则判断待访问虚拟地址是否具有用户态处理标志,若待访问虚拟地址具有用户态处理标志,则获取待访问虚拟地址的缺页异常类型,调用用户态异常处理函数,根据指令地址、待访问虚拟地址以及缺页异常类型进行缺页异常处理。本技术在用户态处理场景中检测缺页异常时,能够及时进行缺页异常处理,避免影响应用性能。

本文地址:https://www.jishuxx.com/zhuanli/20241106/322042.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。