访存指令访问检测方法及装置转让专利

申请号 : CN201610921291.7

文献号 : CN107977577B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张爽爽王鹏孟小甫高翔

申请人 : 龙芯中科技术有限公司

摘要 :

本发明提供一种访存指令访问检测方法及装置。所述方法包括:CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,若访存指令的访问为合法访问,则CPU执行访存指令,能够实现在执行操作系统内核代码中的访存指令时,根据访存指令的操作类型、待访问地址及待访问地址的状态确定该访存指令是否为合法访问,只有在其为合法访问的时候,执行该访存指令,从而,避免了由于访存指令非法访问内核空间内存而导致的操作系统内核崩溃,提高了计算机系统运行的稳定性。

权利要求 :

1.一种访存指令访问检测方法,其特征在于,包括:

中央处理器CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问;

若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令;

其中,所述影子内存页与包括所述待访问地址的被跟踪内存页对应,所述被跟踪内存页为所述CPU分配给所述操作系统内核代码的内存空间,所述影子内存页为所述CPU分配给所述操作系统内核代码的、用于记录所述被跟踪内存页的每个地址的状态的内存空间若所述被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前还包括:所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入传输后备缓冲器TLB中;

所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;

所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并设置单步调试状态;其中,所述CPU为适用于单步调试状态的CPU;

相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态。

2.根据权利要求1所述的方法,其特征在于,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问,包括:若所述访存指令的操作类型为读操作,所述待访问地址的状态为已经初始化,则确定所述访存指令的访问为合法访问;

若所述访存指令的操作类型为读操作,所述待访问地址的状态为未初始化,则确定所述访存指令的访问为非合法访问;

若所述访存指令的操作类型为写操作,所述待访问地址的状态为已经初始化或者未初始化,则确定所述访存指令的访问为合法访问。

3.根据权利要求1或2所述的方法,其特征在于,在所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前,所述方法还包括:所述CPU为所述操作系统内核代码分配被跟踪内存页,并将所述被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态;

所述CPU为所述被跟踪内存页分配所述影子内存页,并将所述影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。

4.根据权利要求1所述的方法,其特征在于,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:设置第一结构体,并将所述待访问地址存储在所述第一结构体中;

将所述第一结构体的有效位设置为有效状态;

相应地,所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态之前还包括:判断所述第一结构体的有效位的状态;

若所述第一结构体的有效位的状态为有效状态,则确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态的步骤;

将所述第一结构体的有效位设置为无效状态;

并确定执行清除所述单步调试状态的步骤。

5.根据权利要求1所述的方法,其特征在于,若所述访存指令的上一条指令为跳转指令,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;

所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中;

所述CPU将所述访存指令的下一条第一指令与所述跳转指令要跳转至的第二指令替换为断点指令;

相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令。

6.根据权利要求5所述的方法,其特征在于,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:设置第二结构体,并将所述待访问地址、所述第一指令、所述第一指令的地址、所述第二指令及所述第二指令的地址存储在所述第二结构体中;

将所述第二结构体的有效位设置为有效状态;

相应地,所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令之前还包括:判断所述第二结构体的有效位的状态;

若所述第二结构体的有效位的状态为有效状态,则确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令的步骤;

将所述第二结构体的有效位设置为无效状态。

7.根据权利要求1所述的方法,其特征在于,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;

所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并将所述访存指令的下一条第三指令替换为断点指令;

相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令替换为所述第三指令。

8.根据权利要求1或2所述的方法,其特征在于,若所述被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前还包括:所述CPU将所述页表项中的虚实地址转换关系、所述有效位的状态及所述隐藏位的状态写入TLB中。

9.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:若所述访存指令的访问为非法访问,则所述CPU输出所述非法访问的提示信息。

10.一种访存指令访问检测装置,其特征在于,包括:

确定模块,用于根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问;

执行模块,用于当所述访存指令的访问为合法访问时,执行所述访存指令;

其中,所述影子内存页与包括所述待访问地址的被跟踪内存页对应,所述被跟踪内存页为所述装置分配给所述操作系统内核代码的内存空间,所述影子内存页为所述装置分配给所述操作系统内核代码的、用于记录所述被跟踪内存页的每个地址的状态的内存空间;

若所述被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,则所述装置还包括:第一写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入传输后备缓冲器TLB中;

所述装置还包括:

第一设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;

第二写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并设置单步调试状态;其中,所述访存指令访问检测装置为适用于单步调试状态的装置;

清除模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态。

11.根据权利要求10所述的装置,其特征在于,所述确定模块具体用于:若所述访存指令的操作类型为读操作,所述待访问地址的状态为已经初始化,则确定所述访存指令的访问为合法访问;

若所述访存指令的操作类型为读操作,所述待访问地址的状态为未初始化,则确定所述访存指令的访问为非合法访问;

若所述访存指令的操作类型为写操作,所述待访问地址的状态为已经初始化或者未初始化,则确定所述访存指令的访问为合法访问。

12.根据权利要求10或11所述的装置,其特征在于,所述装置还包括:分配模块,用于为所述操作系统内核代码分配被跟踪内存页,并将所述被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态,用于为所述被跟踪内存页分配所述影子内存页,并将所述影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。

13.根据权利要求10所述的装置,其特征在于,所述装置还包括:第一设置模块,用于设置第一结构体,并将所述待访问地址存储在所述第一结构体中,将所述第一结构体的有效位设置为有效状态;

第一判断模块,用于判断所述第一结构体的有效位的状态,当所述第一结构体的有效位的状态为有效状态时,确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态的步骤,将所述第一结构体的有效位设置为无效状态,并确定执行清除所述单步调试状态的步骤。

14.根据权利要求10所述的装置,其特征在于,若所述访存指令的上一条指令为跳转指令,则所述装置还包括:第二设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;

第三写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中;

第一替换模块,用于将所述访存指令的下一条第一指令与所述跳转指令要跳转至的第二指令替换为断点指令;

第二替换模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令。

15.根据权利要求14所述的装置,其特征在于,所述装置还包括:第二设置模块,用于设置第二结构体,并将所述待访问地址、所述第一指令、所述第一指令的地址、所述第二指令及所述第二指令的地址存储在所述第二结构体中,将所述第二结构体的有效位设置为有效状态;

第二判断模块,用于判断所述第二结构体的有效位的状态,当所述第二结构体的有效位的状态为有效状态时,确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令的步骤,将所述第二结构体的有效位设置为无效状态。

16.根据权利要求10所述的装置,其特征在于,所述装置还包括:第三设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;

第三替换模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并将所述访存指令的下一条第三指令替换为断点指令;

第四替换模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令替换为所述第三指令。

17.根据权利要求10或11所述的装置,其特征在于,若所述被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,则所述装置还包括:第四写入模块,用于将所述页表项中的虚实地址转换关系、所述有效位的状态及所述隐藏位的状态写入TLB中。

18.根据权利要求10或11所述的装置,其特征在于,所述装置还包括:输出模块,用于当所述访存指令的访问为非法访问时,输出所述非法访问的提示信息。

说明书 :

访存指令访问检测方法及装置

技术领域

[0001] 本发明涉及计算机技术,尤其涉及一种访存指令访问检测方法及装置。

背景技术

[0002] 操作系统中的代码可以运行在不同的特权级别上,一般分为内核级别和用户级别。当代码运行在用户级别又叫运行在用户态,代码运行在内核级别又叫运行在内核态。操作系统内核代码运行时,是运行在内核态。计算机系统中的线性地址空间分为用户空间和内核空间,用户空间的内存称为用户空间内存,内核空间的内存称为内核空间内存。内核空间内存只能由运行在内核态的代码访问,用户空间内存可以由运行的内核态的代码和运行在用户态的代码访问。当操作系统内核代码运行时,其中的访存指令需要访问内核空间内存,由于操作系统内核在编写过程中的疏忽,可能会出现非法内存访问,可能导致操作系统内核崩溃,因此,如何检测操作系统内核代码中的访存指令对内核空间内存访问的合法性非常重要。
[0003] 但是,目前,并不能检测操作系统内核代码中的访存指令对内核空间内存的访问的合法性,从而,在出现非法内存访问时会出现操作系统内核崩溃,影响计算机系统的正常运行。

发明内容

[0004] 本发明提供一种访存指令访问检测方法及装置,以实现只有在访存指令的访问为合法访问时,执行该访存指令,提高计算机系统运行的稳定性。
[0005] 本发明提供的访存指令访问检测方法,包括:
[0006] 中央处理器CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问;
[0007] 若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令;
[0008] 其中,所述影子内存页与包括所述待访问地址的被跟踪内存页对应,所述被跟踪内存页为所述CPU分配给所述操作系统内核代码的内存空间,所述影子内存页为所述CPU分配给所述操作系统内核代码的、用于记录所述被跟踪内存页的每个地址的状态的内存空间。
[0009] 进一步地,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问,包括:
[0010] 若所述访存指令的操作类型为读操作,所述待访问地址的状态为已经初始化,则确定所述访存指令的访问为合法访问;
[0011] 若所述访存指令的操作类型为读操作,所述待访问地址的状态为未初始化,则确定所述访存指令的访问为非合法访问;
[0012] 若所述访存指令的操作类型为写操作,所述待访问地址的状态为已经初始化或者未初始化,则确定所述访存指令的访问为合法访问。
[0013] 进一步地,在所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前,所述方法还包括:
[0014] 所述CPU为所述操作系统内核代码分配被跟踪内存页,并将所述被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态;
[0015] 所述CPU为所述被跟踪内存页分配所述影子内存页,并将所述影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。
[0016] 进一步地,若所述被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前还包括:
[0017] 所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入传输后备缓冲器TLB中。
[0018] 进一步地,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:
[0019] 若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0020] 所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并设置单步调试状态;其中,所述CPU为适用于单步调试状态的CPU;
[0021] 相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:
[0022] 所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态。
[0023] 进一步地,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:
[0024] 设置第一结构体,并将所述待访问地址存储在所述第一结构体中;
[0025] 将所述第一结构体的有效位设置为有效状态;
[0026] 相应地,所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态之前还包括:
[0027] 判断所述第一结构体的有效位的状态;
[0028] 若所述第一结构体的有效位的状态为有效状态,则确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态的步骤;
[0029] 将所述第一结构体的有效位设置为无效状态;
[0030] 并确定执行清除所述单步调试状态的步骤。
[0031] 进一步地,若所述访存指令的上一条指令为跳转指令,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:
[0032] 若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0033] 所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中;
[0034] 所述CPU将所述访存指令的下一条第一指令与所述跳转指令要跳转至的第二指令替换为断点指令;
[0035] 相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:
[0036] 所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令。
[0037] 进一步地,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:
[0038] 设置第二结构体,并将所述待访问地址、所述第一指令、所述第一指令的地址、所述第二指令及所述第二指令的地址存储在所述第二结构体中;
[0039] 将所述第二结构体的有效位设置为有效状态;
[0040] 相应地,所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令之前还包括:
[0041] 判断所述第二结构体的有效位的状态;
[0042] 若所述第二结构体的有效位的状态为有效状态,则确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令的步骤;
[0043] 将所述第二结构体的有效位设置为无效状态。
[0044] 进一步地,所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之后包括:
[0045] 若所述访存指令的访问为合法访问,则所述CPU将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0046] 所述CPU将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并将所述访存指令的下一条第三指令替换为断点指令;
[0047] 相应地,所述若所述访存指令的访问为合法访问,则所述CPU执行所述访存指令之后包括:
[0048] 所述CPU将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令替换为所述第三指令。
[0049] 进一步地,若所述被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,则所述CPU根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问之前还包括:
[0050] 所述CPU将所述页表项中的虚实地址转换关系、所述有效位的状态及所述隐藏位的状态写入TLB中。
[0051] 进一步地,所述方法还包括:
[0052] 若所述访存指令的访问为非法访问,则所述CPU输出所述非法访问的提示信息。
[0053] 本发明还提供一种访存指令访问检测装置,包括:
[0054] 确定模块,用于根据操作系统内核代码中的访存指令的操作类型、所述访存指令的待访问地址和影子内存页中记录的所述待访问地址的状态,确定所述访存指令的访问是否为合法访问;
[0055] 执行模块,用于当所述访存指令的访问为合法访问时,执行所述访存指令;
[0056] 其中,所述影子内存页与包括所述待访问地址的被跟踪内存页对应,所述被跟踪内存页为所述装置分配给所述操作系统内核代码的内存空间,所述影子内存页为所述装置分配给所述操作系统内核代码的、用于记录所述被跟踪内存页的每个地址的状态的内存空间。
[0057] 进一步地,所述确定模块具体用于:
[0058] 若所述访存指令的操作类型为读操作,所述待访问地址的状态为已经初始化,则确定所述访存指令的访问为合法访问;
[0059] 若所述访存指令的操作类型为读操作,所述待访问地址的状态为未初始化,则确定所述访存指令的访问为非合法访问;
[0060] 若所述访存指令的操作类型为写操作,所述待访问地址的状态为已经初始化或者未初始化,则确定所述访存指令的访问为合法访问。
[0061] 进一步地,所述装置还包括:
[0062] 分配模块,用于为所述操作系统内核代码分配被跟踪内存页,并将所述被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态,用于为所述被跟踪内存页分配所述影子内存页,并将所述影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。
[0063] 进一步地,若所述被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,则所述装置还包括:
[0064] 第一写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入TLB中。
[0065] 进一步地,所述装置还包括:
[0066] 第一设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0067] 第二写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并设置单步调试状态;其中,所述访存指令访问检测装置为适用于单步调试状态的装置;
[0068] 清除模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并清除所述单步调试状态。
[0069] 进一步地,所述装置还包括:
[0070] 第一设置模块,用于设置第一结构体,并将所述待访问地址存储在所述第一结构体中,将所述第一结构体的有效位设置为有效状态;
[0071] 第一判断模块,用于判断所述第一结构体的有效位的状态,当所述第一结构体的有效位的状态为有效状态时,确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态的步骤,将所述第一结构体的有效位设置为无效状态,并确定执行清除所述单步调试状态的步骤。
[0072] 进一步地,若所述访存指令的上一条指令为跳转指令,则所述装置还包括:
[0073] 第二设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0074] 第三写入模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中;
[0075] 第一替换模块,用于将所述访存指令的下一条第一指令与所述跳转指令要跳转至的第二指令替换为断点指令;
[0076] 第二替换模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令。
[0077] 进一步地,所述装置还包括:
[0078] 第二设置模块,用于设置第二结构体,并将所述待访问地址、所述第一指令、所述第一指令的地址、所述第二指令及所述第二指令的地址存储在所述第二结构体中,将所述第二结构体的有效位设置为有效状态;
[0079] 第二判断模块,用于判断所述第二结构体的有效位的状态,当所述第二结构体的有效位的状态为有效状态时,确定执行将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令分别替换为所述第一指令和所述第二指令的步骤,将所述第二结构体的有效位设置为无效状态。
[0080] 进一步地,所述装置还包括:
[0081] 第三设置模块,用于当所述访存指令的访问为合法访问时,将所述被跟踪内存页的页表项中的有效位设置为有效状态;
[0082] 第三替换模块,用于将所述页表项中的虚实地址转换关系及所述有效位的状态写入所述TLB中,并将所述访存指令的下一条第三指令替换为断点指令;
[0083] 第四替换模块,用于将所述页表项的有效位设置为无效状态,将所述TLB的有效位设置为无效状态,并将所述断点指令替换为所述第三指令。
[0084] 进一步地,若所述被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,则所述装置还包括:
[0085] 第四写入模块,用于将所述页表项中的虚实地址转换关系、所述有效位的状态及所述隐藏位的状态写入TLB中。
[0086] 进一步地,所述装置还包括:
[0087] 输出模块,用于当所述访存指令的访问为非法访问时,输出所述非法访问的提示信息。
[0088] 本发明提供的访存指令访问检测方法及装置,通过CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,若访存指令的访问为合法访问,则CPU执行访存指令,能够实现在执行操作系统内核代码中的访存指令时,根据访存指令的操作类型、待访问地址及待访问地址的状态确定该访存指令是否为合法访问,在其为合法访问的时候,执行该访存指令,从而,避免了由于访存指令非法访问内核空间内存而导致的操作系统内核崩溃,提高计算机系统运行的稳定性。

附图说明

[0089] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0090] 图1为本发明提供的访存指令访问检测方法实施例一的流程示意图;
[0091] 图2为本发明提供的访存指令访问检测方法实施例二的流程示意图;
[0092] 图3为本发明提供的访存指令访问检测方法实施例三的流程示意图;
[0093] 图4为本发明提供的访存指令访问检测方法实施例四的流程示意图;
[0094] 图5为本发明提供的访存指令访问检测装置实施例一的结构示意图;
[0095] 图6为本发明提供的访存指令访问检测装置实施例二的结构示意图;
[0096] 图7为本发明提供的访存指令访问检测装置实施例三的结构示意图;
[0097] 图8为本发明提供的访存指令访问检测装置实施例四的结构示意图。

具体实施方式

[0098] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0099] 本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”及“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0100] 图1为本发明提供的访存指令访问检测方法实施例一的流程示意图。如图1所示,本实施例提供的访存指令访问检测方法包括:
[0101] S101:CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0102] 其中,影子内存页与包括待访问地址的被跟踪内存页对应,被跟踪内存页为CPU分配给操作系统内核代码的内存空间,影子内存页为CPU分配给操作系统内核代码的、用于记录被跟踪内存页的每个地址的状态的内存空间。
[0103] 具体地,本实施例提供的访存指令访问检测方法应用于操作系统内核代码中的访存指令访问内核空间内存的场景中。在中央处理器(Central Processing Unit;简称:CPU)执行操作系统内核代码的时候,会频繁执行内存空间分配的操作以用于保证操作系统内核代码的正常运行,CPU分配的内存空间可用于操作系统内核代码进行数据缓存、对内核空间内存进行读、写访问等。
[0104] 为了检测内核代码中的访存指令访问内核空间内存的合法性,在一种实现方式中,CPU向所有申请内存空间的操作系统内核代码分配被跟踪的内存空间,称为被跟踪内存页,同时分配记录被跟踪内存页中每个地址的状态的影子内存页。被跟踪内存页中包括很多个字节的地址,例如,可以包括4KB个字节的地址。被跟踪内存页中每个地址的状态可以是:已初始化及未初始化等状态。CPU可以在向操作系统内核分配被跟踪内存页的时候即将被跟踪内存页中每个地址的状态写入影子内存页中,可选的,通过设置指针使被跟踪内存页指向它的影子内存页,以使被跟踪内存页和影子内存页一一对应。需要说明的是,可以根据记录的地址的状态的数量来设置影子内存页中记录地址状态的数据的比特位数。在另外一种实现方式中,CPU可以对符合预设条件的操作系统内核代码分配被跟踪内存页和影子内存页,这里的预设条件可以是位于一段预设地址空间内的代码或者含有每个特定函数的代码,以提高访存指令访问检测的针对性。
[0105] 需要说明的是,本实施例中的访存指令是指内核代码执行过程中需要从内存单元中读出若干个字节的读取指令或者需要向若干个内存单元中写入数据的写入指令。
[0106] CPU运行操作系统内核代码的时候,当运行到访存指令时,其根据访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。CPU可以从访存指令直接获取其操作类型和待访问地址,再根据待访问地址查找到包括待访问地址的被跟踪内存页,根据被跟踪内存页查找到与其对应的影子内存页,如上所述,可以根据指针查找,在查找到影子内存页后,查询影子内存页中记录的待访问地址的状态。在一种实现方式中,影子内存页中的地址与被跟踪内存页中的地址一一对应,即被跟踪内存页中有多少个地址,则影子内存页中的地址数量与被跟踪内存页中地址的数量相同,在这种情况下,查找到影子内存页后,查找影子内存页中与待访问地址对应的地址中记录的状态;在另外一种实现方式中,影子内存页中的地址与被跟踪内存页中的地址也可以不是一一对应的,即影子内存页中的一个地址中可以记录被跟踪内存页中两个及以上的地址的状态,举例来说,如果只记录两个状态:已经初始化和未初始化,则只需要1位二进制数就可表示,影子内存页中一个地址有8位,即可记录被跟踪内存页中8个地址的状态,在此种实现方式下,一个影子内存页可以对应多个被跟踪内存页。
[0107] 当访存指令的操作类型为读操作时,待访问地址的状态为已经初始化,则确定访存指令的访问为合法访问;若访存指令的操作类型为读操作,待访问地址的状态为未初始化,则确定访存指令的访问为非合法访问,即非法访问;若访存指令的操作类型为写操作,待访问地址的状态为已经初始化或者未初始化,则确定访存指令的访问为合法访问。
[0108] S102:若访存指令的访问为合法访问,则CPU执行访存指令。
[0109] 具体地,当确定操作系统内核中的访存指令对内核空间内存的访问为合法访问时,则CPU执行该访存指令,对内核空间内存进行读操作或者写操作。
[0110] 可选的,若访存指令的访问为非法访问,则CPU输出非法访问的提示信息,以便于提醒用户操作系统内核代码中有非法访存操作,同时,便于操作系统开发人员定位和解决该非法访存问题。
[0111] 可选的,CPU可以在S101之前即为操作系统内核代码分配被跟踪内存页,并将被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态。CPU为被跟踪内存页分配影子内存页,并将影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。
[0112] 本实施例提供的访存指令访问检测方法,通过CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,若访存指令的访问为合法访问,则CPU执行访存指令,能够实现在执行操作系统内核代码中的访存指令时,根据访存指令的操作类型、待访问地址及待访问地址的状态确定该访存指令是否为合法访问,只有在其为合法访问的时候,执行该访存指令,从而,避免了由于访存指令非法访问内核空间内存而导致的操作系统内核崩溃,提高了计算机系统运行的稳定性。
[0113] 图2为本发明提供的访存指令访问检测方法实施例二的流程示意图。如图2所示,在图1所示实施例的基础上,本实施例对S101之前、之后及S102之后的步骤进行详细说明:
[0114] 若被跟踪内存页的页表项中隐藏位为有效状态、有效位为无效状态,则执行:
[0115] S201:CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0116] CPU在向操作系统内核代码分配被跟踪内存页和影子内存页的同时,会创建被跟踪内存页的页表项。该页表项用于表征被跟踪内存页的属性。页表项中包括被跟踪内存页的虚实地址转换关系,有效位的状态以及隐藏位的状态。其中,有效位和隐藏位可以分别占用一个比特位。CPU在创建页表项的时候,将与被跟踪内存页对应的页表项的隐藏位设置为有效状态,有效位设置为无效状态。如果以1表示有效状态,以0表示无效状态,则将被跟踪内存页的页表项的隐藏位设置为1,有效位设置为0。可选的,CPU创建影子内存页的页表项,并将影子内存页的页表项的隐藏位设置为无效状态,有效位设置为有效状态。
[0117] 被跟踪内存页的页表项中存储有被跟踪内存页中所有地址的虚实地址转换关系、隐藏位和有效位的状态。
[0118] 在CPU执行操作系统内核代码的过程中,遇到内核代码中的访存指令时,CPU先根据访存指令的待访问地址及传输后备缓冲器(Translation Lookaside Buffer;简称:TLB)中的虚实地址转换关系将被跟踪内存页中的待访问地址转换为物理地址,然后对该物理地址进行访问。TLB中只能存储根据程序局部性确定的一部分内存页的页表项的内容,因此CPU在第一次执行该操作系统内核代码中的访存指令时,TLB中没有被跟踪内存页的页表项中的内容,因而TLB中也没有待访问地址与物理地址的转换关系,因此,会发生TLB重填例外,在TLB重填例外中,CPU将被跟踪内存页的页表项中的虚实地址转换关系及有效位的状态写入TLB中。由于被跟踪内存页的页表项中的有效位为无效状态,因此,将页表项中的内容写入TLB中后,TLB的有效位也为无效状态。
[0119] S202:CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0120] 具体地,在S201执行完后,即TLB重填例外执行完后,CPU返回重新执行引起TLB重填例外的指令,即重新执行访存指令。此时,虽然TLB中有被跟踪内存页的页表项中的虚实地址转换关系,但TLB的有效位为无效状态,因此,此时会发生TLB无效例外,在TLB无效例外中,执行S202。S202的执行过程与S101的过程和技术原理类似,此处不再赘述。
[0121] 可选的,当访存指令的操作类型为写操作,待访问地址的状态为未初始化时,可以将待访问地址的状态修改为已经初始化,以避免后续出现误判。
[0122] S203:若访存指令的访问为合法访问,则CPU将被跟踪内存页的页表项中的有效位设置为有效状态。
[0123] 具体地,S203也属于TLB无效例外中所进行的步骤。当确定访存指令的访问为合法访问时,将被跟踪内存页的页表项中的有效位设置为有效状态。
[0124] S204:CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并设置单步调试状态。
[0125] 具体地,在执行完S203之后,执行S204。S204也属于TLB无效例外中所进行的步骤。此时,被跟踪内存页的页表项中的有效位为有效状态,则将该页表项中的虚实地址转换关系及有效位的状态写入TLB中后,TLB的有效位也为有效状态。并设置单步调试状态。
[0126] 可选的,在TLB无效例外中,还可以进行以下操作:设置第一结构体,并将待访问地址存储在该第一结构体中,将该第一结构体的有效位位设置为有效状态。
[0127] S205:若访存指令的访问为合法访问,则CPU执行访存指令。
[0128] 具体地,在执行完TLB无效例外,即执行完S202、S203及S204之后,会返回重新执行访存指令。此时,TLB的有效位为有效状态,则CPU可以正常执行该访存指令。
[0129] S206:CPU将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并清除单步调试状态。
[0130] 具体地,由于S204设置了单步调试状态,则CPU在执行完S205后,会进入单步调试状态。在单步调试状态中,CPU执行S206。将被跟踪内存页的页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并清除单步调试状态。
[0131] 在将TLB的有效位设置为无效状态时,可以有多种实现方法。在一种实现方式中,可以根据被跟踪内存页的页表项找到其对应的TLB,并将该TLB的有效位设置为无效状态。在另外一种实现方式中,若在S204之后,设置了第一结构体,则根据该第一结构体中该待访问地址找到其对应的TLB,将该TLB的有效位设置为无效状态,之后,再将该结构体的状态为设置为无效状态。
[0132] 可选的,若在S204之后,设置了第一结构体,则在S206之前,还要执行以下操作:判断第一结构体的有效位的状态;若第一结构体的有效位的状态为有效状态,则确定执行将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态的步骤,之后,将第一结构体的有效位设置为无效状态,并确定执行清除单步调试状态的步骤。第一结构体的有效位为有效状态,表明该结构体中存储的数据是有意义的。将第一结构体的有效位设置为无效状态是为了表明该结构体中的内容已经被处理过了。
[0133] 在清除了单步调试状态之后,CPU可以正常执行其他的操作系统内核代码。
[0134] 需要说明的是,本实施例提供的访存指令访问检测方法适用于支持单步调试状态的平台,例如无内部互锁流水级的微处理器(Microprocessor without Interlocked Piped Stages;简称:MIPS)平台。
[0135] 本实施例提供的访存指令访问检测方法,通过在页表项中添加隐藏位,并在隐藏位为有效状态,有效位为无效状态时,CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中,CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,若访存指令的访问为合法访问,则CPU将被跟踪内存页的页表项中的有效位设置为有效状态,将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并设置单步调试状态,若访存指令的访问为合法访问,则CPU执行访存指令,CPU将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并清除单步调试状态,在执行完一次访存指令之后,将包含访存指令的待访问地址的被跟踪内存页的页表项的有效位设置为无效状态,TLB的有效位设置为无效状态,实现了在每次执行访存指令后,被跟踪内存页对应的TLB的有效位为无效状态,在下一次执行访存指令的时候,重新发生TLB重填例外及TLB无效例外,从而,实现每次执行操作系统内核的访存指令时都能进行访存指令访问检测,进一步提高了计算机系统运行的稳定性。
[0136] 图3为本发明提供的访存指令访问检测方法实施例三的流程示意图。如图3所示,本实施例提供的访存指令访问的检测方法,在图1所示实施例的基础上,对S101之前、之后及S102之后的步骤进行详细说明:
[0137] 本实施例适用于访存指令的上一条指令是跳转指令的应用场景中。在这种情况下,访存指令为该跳转指令的延迟槽指令,不论执行完跳转指令程序是顺序执行还是跳转到另外一条指令执行,延迟槽指令都需要执行。
[0138] 若被跟踪内存页的页表项中隐藏位为有效状态、有效位为无效状态,则执行:
[0139] S301:CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0140] 在执行完跳转指令后,执行访存指令。本实施例中S301的实现过程与S201的实现过程类似,技术原理相同,此处不再赘述。
[0141] S302:CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0142] 在S301执行完后,即TLB重填例外执行完后,CPU返回重新执行跳转指令,这是由跳转指令的性质决定的。会再次执行访存指令,引起TLB无效例外。执行S302,S302的执行过程与S101的过程和技术原理类似,此处不再赘述。
[0143] 在本实施例提供的访存指令访问检测方法中,该访存指令的上一条指令为跳转指令,S302之后还包括:
[0144] S303:若访存指令的访问为合法访问,则CPU将被跟踪内存页的页表项中的有效位设置为有效状态。
[0145] S303与S203的执行过程和技术原理类似,此处不再赘述。
[0146] S304:CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0147] 具体地,执行完S304后,TLB的有效位为有效状态。
[0148] S305:CPU将访存指令的下一条第一指令与跳转指令要跳转至的第二指令替换为断点指令。
[0149] 具体地,S303-S305都是TLB无效例外中进行的操作。S304与S305没有时序关系。
[0150] 可选的,在TLB无效例外中,还可以进行以下操作:设置第二结构体,并将待访问地址、第一指令、第一指令的地址、第二指令及第二指令的地址存储在第二结构体中。将该第二结构体的有效位设置为有效状态。
[0151] S306:若访存指令的访问为合法访问,CPU执行访存指令。
[0152] 具体地,在执行完TLB无效例外,即执行完S302-S305之后,会返回重新执行断点指令及访存指令。CPU可以正常执行该访存指令。
[0153] S307:CPU将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令。
[0154] 具体地,由于S305中将访存指令的下一条第一指令及跳转指令要跳转至的第二指令都替换为了断点指令,则在执行完访存指令之后,不论程序是要顺序执行第一指令还是要跳转执行第二指令的时候,都会执行到断点指令,从而进入断点例外。在断点例外中,执行S307。在将TLB的有效位设置为无效状态时,与S206类似,有两种实现方式,此处不再赘述。
[0155] 可选的,若S305之后设置有第二结构体,则在S307之前还要执行以下操作:判断第二结构体的有效位的状态;若第二结构体的有效位的状态为有效状态,则确定执行将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令的步骤。将第二结构体的有效位设置为无效状态。
[0156] 在将断点指令分别替换为第一指令和第二指令的时候,可以根据S305之后设置的第二结构体中存储的第一指令、第一指令的地址、第二指令及第二指令的地址将断点指令分别替换为第一指令和第二指令。在处理完断点例外之后,重新执行引起断点例外的指令即执行第一指令或第二指令,由于此时的断点指令已经被分别替换为第一指令和第二指令,则可以正常执行。
[0157] 本实施例提供的访存指令访问检测方法,通过在页表项中添加隐藏位,并在隐藏位为有效状态,有效位为无效状态时,且在访存指令的上一条指令问跳转指令时,CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中,CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,若访存指令的访问为合法访问,则CPU将被跟踪内存页的页表项中的有效位设置为有效状态,CPU将页表项中的虚实地址转换关系、及有效位的状态写入TLB中,CPU将访存指令的下一条第一指令与跳转指令要跳转至的第二指令替换为断点指令,若访存指令的访问为合法访问,CPU执行访存指令,CPU将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令,实现了在每次执行访存指令后,被跟踪内存页对应的TLB的有效位为无效状态,在下一次执行访存指令的时候,重新发生TLB重填例外及TLB无效例外,从而,实现每次执行操作系统内核的访存指令时都能进行访存指令访问检测,进一步提高了计算机系统运行的稳定性。
[0158] 在图3所示实施例的基础上,在另外一种场景中,当访存指令的前面不是跳转指令时,S304和S305的步骤也可以为:CPU将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并将访存指令的下一条第三指令替换为断点指令。S307可以为:CPU将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令替换为第三指令。
[0159] 图4为本发明提供的访存指令访问检测方法实施例四的流程示意图。如图4所示,本实施例提供的访存指令访问的检测方法,在图1所示实施例的基础上,对S101之前的步骤进行详细说明:
[0160] 若被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,则执行:
[0161] S401:CPU将页表项中的虚实地址转换关系、有效位的状态及隐藏位的状态写入TLB中。
[0162] 在执行访存指令时,会发生TLB重填例外,在TLB重填例外中,执行S401。S401与S201的实现过程及技术原理类似,此处不再赘述。
[0163] 在执行完S401后,与被跟踪的内存页对应的TLB的有效位为有效状态,隐藏位为有效状态。
[0164] S402:CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0165] 在执行完S401后,即TLB重填例外执行完后,CPU返回重新执行引起TLB重填例外的指令,即重新指令访存指令。
[0166] 在再次执行访存指令时,由于TLB的隐藏位为有效状态,则会发生隐藏例外,在隐藏例外中,执行S402。S402的实现过程和技术原理与S101类似,此处不再赘述。
[0167] S403:若访存指令的访问为合法访问,则CPU执行访存指令。
[0168] 在执行完隐藏例外后,如果访存指令的访问合法,则CPU执行访存指令后继续执行下一条指令。
[0169] 需要说明的是,可以在TLB中添加一个隐藏位用于触发隐藏例外,以进行访存指令访问合法性的检测。
[0170] 可选的,如果访存指令的访问不合法,则可以输出非法访问的提示信息后,继续执行下一条指令。
[0171] 本实施例提供的访存指令访问检测方法,在被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态时,通过CPU将页表项中的虚实地址转换关系、有效位的状态及隐藏位的状态写入TLB中,CPU根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,由于隐藏位为有效状态,从而实现了每次执行访存指令时,都能进行访存指令访问检测,且其实现过程简单,效率较高,进一步提高了计算机系统的稳定性及计算机系统的运行效率。
[0172] 图5为本发明提供的访存指令访问检测装置实施例一的结构示意图。如图5所示,本实施例提供的访存指令访问检测装置包括:
[0173] 确定模块501,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0174] 执行模块502,用于当访存指令的访问为合法访问时,执行访存指令。
[0175] 其中,影子内存页与包括待访问地址的被跟踪内存页对应,被跟踪内存页为装置分配给操作系统内核代码的内存空间,影子内存页为装置分配给操作系统内核代码的、用于记录被跟踪内存页的每个地址的状态的内存空间。
[0176] 确定模块501具体用于:若访存指令的操作类型为读操作,待访问地址的状态为已经初始化,则确定访存指令的访问为合法访问;若访存指令的操作类型为读操作,待访问地址的状态为未初始化,则确定访存指令的访问为非合法访问;若访存指令的操作类型为写操作,待访问地址的状态为已经初始化或者未初始化,则确定访存指令的访问为合法访问。
[0177] 可选的,本实施例提供的访存指令访问检测装置还可以包括:分配模块,用于为操作系统内核代码分配被跟踪内存页,并将被跟踪内存页的页表项中的隐藏位设置为有效状态,有效位设置为无效状态,用于为被跟踪内存页分配影子内存页,并将影子内存页的隐藏位设置为无效状态,有效位设置为有效状态。
[0178] 本实施例提供的访存指令访问检测装置具体可以是CPU。
[0179] 本实施例提供的访存指令的访问检测装置具体可用于执行图1所示访存指令访问检测方法,其实现原理类似,此处不再赘述。
[0180] 本实施例提供的访存指令访问检测装置,通过设置确定模块用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,执行模块,用于当访存指令的访问为合法访问时,执行访存指令,能够实现在执行操作系统内核代码中的访存指令时,根据访存指令的操作类型、待访问地址及待访问地址的状态确定该访存指令是否为合法访问,只有在其为合法访问的时候,执行该访存指令,从而,避免了由于访存指令非法访问内核空间内存而导致的操作系统内核崩溃,提高了计算机系统运行的稳定性。
[0181] 图6为本发明提供的访存指令访问检测装置实施例二的结构示意图。如图6所示,若被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,本实施例提供的访存指令访问检测装置包括:
[0182] 第一写入模块601,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0183] 确定模块602,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0184] 第一设置模块603,用于当访存指令的访问为合法访问时,将被跟踪内存页的页表项中的有效位设置为有效状态.
[0185] 第二写入模块604,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并设置单步调试状态。
[0186] 执行模块605,用于当访存指令的访问为合法访问时,执行访存指令。
[0187] 清除模块606,用于将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并清除单步调试状态。
[0188] 本实施例中的访存指令访问检测装置可以为适用于单步调试状态的装置。
[0189] 可选的,本实施例提供的访存指令访问检测装置还可以包括第一设置模块,用于设置第一结构体,并将待访问地址存储在第一结构体中,将第一结构体的有效位设置为有效状态;第一判断模块,用于判断第一结构体的有效位的状态,当第一结构体的有效位的状态为有效状态时,确定执行将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态的步骤,将第一结构体的有效位设置为无效状态,并确定执行清除单步调试状态的步骤。
[0190] 本实施例提供的访存指令访问检测装置具体可用于执行图2所示访存指令访问检测方法,其实现原理类似,此处不再赘述。
[0191] 本实施例提供的访存指令访问检测装置,通过在页表项中添加隐藏位,并在隐藏位为有效状态,有效位为无效状态时,第一写入模块,将页表项中的虚实地址转换关系及有效位的状态写入TLB中,确定模块,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,第一设置模块,用于当访存指令的访问为合法访问时,用于将被跟踪内存页的页表项中的有效位设置为有效状态,第二写入模块,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并设置单步调试状态,执行模块,用于当访存指令的访问为合法访问时,执行访存指令,清除模块,用于将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并清除单步调试状态,在执行完一次访存指令之后,将包含访存指令的待访问地址的被跟踪内存页的页表项的有效位设置为无效状态,TLB的有效位设置为无效状态,实现了在每次执行访存指令后,被跟踪内存页对应的TLB的有效位为无效状态,在下一次执行访存指令的时候,重新发生TLB重填例外及TLB无效例外,从而,实现每次执行操作系统内核的访存指令时都能进行访存指令访问检测,进一步提高了计算机系统运行的稳定性。
[0192] 图7为本发明提供的访存指令访问检测装置实施例三的结构示意图。如图7所示,若被跟踪内存页的页表项中隐藏位为有效状态,有效位为无效状态,且访存指令的上一条指令为跳转指令时,本实施例提供的访存指令访问检测装置包括:
[0193] 第一写入模块701,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0194] 确定模块702,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0195] 第二设置模块703,用于当访存指令的访问为合法访问时,将被跟踪内存页的页表项中的有效位设置为有效状态。
[0196] 第三写入模块704,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0197] 第一替换模块705,用于将访存指令的下一条第一指令与跳转指令要跳转至的第二指令替换为断点指令。
[0198] 执行模块706,用于当访存指令的访问为合法访问时,执行访存指令。
[0199] 第二替换模块707,用于将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令。
[0200] 可选的,本实施例提供的访存指令访问检测装置还可以包括:第二设置模块,用于设置第二结构体,并将待访问地址、第一指令、第一指令的地址、第二指令及第二指令的地址存储在第二结构体中,将第二结构体的有效位设置为有效状态;第二判断模块,用于判断第二结构体的有效位的状态,当第二结构体的有效位的状态为有效状态时,确定执行将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令的步骤,将第二结构体的有效位设置为无效状态。
[0201] 本实施例提供的访存指令访问检测装置具体可用于执行图3所示访存指令访问检测方法,其实现原理类似,此处不再赘述。
[0202] 本实施例提供的访存指令访问检测装置,通过在页表项中添加隐藏位,并在隐藏位为有效状态,有效位为无效状态时,第一写入模块,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中,确定模块,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,第二设置模块,用于当访存指令的访问为合法访问时,将被跟踪内存页的页表项中的有效位设置为有效状态,第三写入模块,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中,第一替换模块,用于将访存指令的下一条第一指令与跳转指令要跳转至的第二指令替换为断点指令,执行模块,用于当访存指令的访问为合法访问时,执行访存指令,第二替换模块,用于将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令分别替换为第一指令和第二指令,实现了在每次执行访存指令后,被跟踪内存页对应的TLB的有效位为无效状态,在下一次执行访存指令的时候,重新发生TLB重填例外及TLB无效例外,从而,实现每次执行操作系统内核的访存指令时都能进行访存指令访问检测,进一步提高了计算机系统运行的稳定性。
[0203] 可选的,在图7所示实施例的基础上,当访存指令的上一条指令不是跳转指令时,在图5所示实施例的基础上,装置还包括:
[0204] 第一写入模块,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中。
[0205] 第三设置模块,用于当访存指令的访问为合法访问时,将被跟踪内存页的页表项中的有效位设置为有效状态。
[0206] 第三替换模块,用于将页表项中的虚实地址转换关系及有效位的状态写入TLB中,并将访存指令的下一条第三指令替换为断点指令。
[0207] 第四替换模块,用于将页表项的有效位设置为无效状态,将TLB的有效位设置为无效状态,并将断点指令替换为第三指令。
[0208] 图8为本发明提供的访存指令访问检测装置实施例四的结构示意图。如图8所示,若被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态,本实施例提供的访存指令访问检测装置包括:
[0209] 第四写入模块801,用于将页表项中的虚实地址转换关系、有效位的状态及隐藏位的状态写入TLB中。
[0210] 确定模块802,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问。
[0211] 执行模块803,用于当访存指令的访问为合法访问时,执行访存指令。
[0212] 本实施例提供的访存指令访问检测装置具体可用于执行图4所示访存指令访问检测方法,其实现原理类似,此处不再赘述。
[0213] 本实施例提供的访存指令访问检测装置,在被跟踪内存页的页表项中有效位为有效状态,隐藏位为有效状态时,通过设置第四写入模块,用于将页表项中的虚实地址转换关系、有效位的状态及隐藏位的状态写入TLB中,确定模块,用于根据操作系统内核代码中的访存指令的操作类型、访存指令的待访问地址和影子内存页中记录的待访问地址的状态,确定访存指令的访问是否为合法访问,由于隐藏位为有效状态,从而实现了每次执行访存指令时,都能进行访存指令访问检测,且其实现过程简单,效率较高,进一步提高了计算机系统的稳定性及计算机系统的运行效率。
[0214] 需要说明的是,上述任一实施例提供的访存指令访问检测装置中,还可以包括输出模块,用于当访存指令的访问为非法访问时,输出非法访问的提示信息。从而提醒用于操作系统内核代码中有非法访存操作,同时,便于操作系统开发人员定位和解决该非法访存问题。
[0215] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0216] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。