技术领域
[0001] 本
发明属于计算机技术领域,特别涉及一种内存巡检方法及系统。
背景技术
[0002] 在计算机技术领域中,对安全性要求较高的设备需要进行内存检测。例如,在轨道交通的安全相关设备中就需要对设备的内存进行检测,以保障安全平台正常运行。目前,检测内存是否有故障,对只读数据通常采用CRC校验的方式验证内存。对于可变内存部分,则采用定期读写比较的方式检测内存损坏。
[0003] 读写比较检测方法如下:前提条件是停止CPU其他任务中断的运行,且关闭中断。
[0004] 1、将被检测区cache刷新到内存,并无效cache,关闭cache;
[0005] 2、将被检测区数据拷贝到备份区;
[0007] 4、从被检测区读取数据,与写入值比较确认是否一致;
[0008] 5、重复3、4,直到巡检完毕;
[0009] 6、检测完成后,将原始的被检测区数据从备份区恢复数据到被检测区;
[0010] 7、打开cache。
[0011] 检测完成后,恢复系统的正常运行。
[0012] Cache作为CPU和内存直接的高速缓存,CPU写入的数据不一定立即写入内存,读取数据也存在从缓存中返回数据而无法获取真实物理地址数据的问题,因此在有cache的情况下,必须关闭cache,才能将数据真正写入内存,并检验到实际内存。而有些安全系统的架构中,cache关闭操作非常耗费时间,尤其有L2 cache(二级缓存)时,对于实时
操作系统来说是不可接受的。还有一部分操作系统在CPU运行时不能关闭cache,因此无法内存检测。
[0013] 因此,需要一种方法和系统来解决对内存进行检测的状况。
发明内容
[0014] 针对上述问题,本发明设计一种内存巡检方法,包括:
[0015] 对物理内存建立第一虚拟空间;
[0016] 所述物理内存还包括与之对应的第二虚拟空间,所述第二虚拟空间用于系统运行时通过缓存
访问物理内存;
[0017] 通过所述第一虚拟空间直接访问所述物理内存,对所述物理内存进行巡检。
[0018] 优选的,建立所述第一虚拟空间后,关闭所述第一虚拟空间的缓存访问机制。
[0019] 优选的,建立第二虚拟空间;
[0020] 所述第二虚拟空间与所述第一虚拟空间相对应,共同映射与同一所述物理内存区间;
[0021] 所述第一虚拟空间与所述第二虚拟空间的地址不重叠。
[0022] 优选的,对所述物理内存进行巡检之前,中断系统中运行的程序。
[0023] 优选的,对所述物理内存进行巡检包括:
[0024] 将待检测的所述物理内存中的数据备份到备份区;
[0025] 检测所述物理内存是否正常;
[0026] 将所述备份区的数据恢复到所述物理内存中。
[0027] 优选的,所述检测所述物理内是否正常包括:
[0028] 记录待写入测试数据;
[0029] 将所述测试数据写入到指定的所述物理内存中;
[0030] 从所述指定的物理内存中读出数据;
[0031] 将读出数据与记录的测试数据进行比较,若不一致,则判断所述指定的物理内存故障。
[0032] 本发明还设计一种内存巡检系统,
[0034] 所述映射模块,用于对物理内存建立第一虚拟空间;
[0035] 所述访问模块,用于对所述物理内存建立第二虚拟空间,在系统运行时通过缓存访问物理内存;
[0036] 所述巡检模块,用于通过所述第一虚拟空间直接访问所述物理内存,对所述物理内存进行巡检。
[0037] 优选的,所述映射模块包括第一单元;
[0038] 所述第一单元,用于关闭所述第一虚拟空间的缓存访问机制。
[0039] 优选的,所述访问模块包括第二单元;
[0040] 所述第二单元,用于在系统运行时通过缓存访问物理内存。
[0041] 优选的,所述第一单元与所述第二单元相对应,共同映射与同一所述物理内存区间。
[0042] 本发明的技术优点:本发明通过将一个物理内存的同一区域映射第一虚拟空间和第二虚拟空间,程序运行过程中,CPU通过第一虚拟空间对物理内存进行访问,并通过cache(缓存)减少实际访问物理地址的
频率。CPU通过第二虚拟空间对物理内存进行巡检,对所述物理内存进行巡检之前,中断系统中运行的程序,关闭cache,能够直接通过第二虚拟空间对物理内存进行检测,多次将数据进行写入和读出,将读出数据与记录的测试数据进行比较,若不一致,则判断所述指定的物理内存故障。
[0043] 本发明的其它特征和优点将在随后的
说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、
权利要求书以及
附图中所指出的结构来实现和获得。
附图说明
[0044] 为了更清楚地说明本发明
实施例或
现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0045] 图1示出了本发明的物理内存与虚拟内存的整体映射示意图;
[0046] 图2示出了本发明实施例的第二虚拟空间对物理内存进行巡检流程示意图。
具体实施方式
[0047] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0048] 图1示出了本发明的物理内存与虚拟内存的整体映射示意图。如图1所示,本发明涉及一种内存巡检方法,包括以下步骤:
[0049] 对物理内存建立第一虚拟空间和第二虚拟空间;
[0050] 在系统启动初始化时建立物理内存和虚拟空间的映射关系,且系统运行期间映射关系不变化。CPU或程序一般不直接操作物理内存,而是通过虚拟地址对物理地址进行访问,其中,虚拟地址是物理地址的逻辑映射,程序或CPU通过访问虚拟地址进行读取或者写入数据,实际上数据的读取或者写入发生在于虚拟地址相对应的物理地址中。
[0051] 本发明通过映射的方式将物理内存映射到虚拟内存空间,双方的映射关系可以通过映射表进行表示,其中,映射表是物理内存上的一部分空间。在MMU
硬件中,通过访问虚拟空间的地址,就能访问到与之对应的物理地址。本发明中,虚拟空间对应虚拟地址,物理内存对应物理地址,进而虚拟空间是物理内存的逻辑映射,CPU或程序通过虚拟空间对物理内存进行访问,进而对物理内存进行巡检时,CPU通过虚拟空间对物理内存进行数据写入和读取。
[0052] 示例性的,在计算机中,对系统盘内部的文件进行查询,通过向输入框输入需要查询的数据,系统自动从计算机的内存中搜索查询数据的具体信息,然后再找到系统盘中的对应具体信息。其中,计算机内存相当于物理内存,输入框相当于虚拟空间,而系统盘相当于虚拟空间对应的一部分内存。从而通过输入框内输入查询数据,然后在计算机内存的系统盘中查询具体信息,即CPU或程序通过虚拟空间访问物理内存中的一部分内存。
[0053] 在图1中,第一虚拟空间和第二虚拟空间相互对应,且共同映射同一物理内存。
[0054] 通过所述第一虚拟空间直接访问所述物理内存,对所述物理内存进行巡检;
[0055] 虚拟空间包括第一虚拟空间和第二虚拟空间,第一虚拟空间通过缓存对物理内存进行巡检;第二虚拟空间不通过缓存对物理内存进行巡检。
[0056] 第一虚拟空间:开启缓存,CPU通过第一虚拟空间对物理内存进行访问,并通过缓存减少访问频率。
[0057] 程序运行过程中,CPU通过访问虚拟空间对物理内存内部数据进行读写,并通过缓存(cache)减少实际访问虚拟空间的频率,只有达到指定周期或者被CPU主动冲入(flush)才将缓存数据写入物理内存。在CPU和内存之间还设置有cache(缓存),cache是一个暂存区域。CPU要写入内存的数据可能会暂存在cache中,经过一定周期,cache数据才会真实写入物理内存。示例性的,缓存是临时文件交换区,电脑把最常用的文件从
存储器里提出来临时放在缓存里,就像把工具和材料搬上
工作台一样,这样会比用时现去仓库取更快速。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在工作完成后将文件送到
硬盘等存储器里永久存储。即当CPU不对物理内存进行访问时,CPU发出存储命令,进而将缓存数据存储到物理内存中存储。
[0058] 所述第二虚拟空间用于系统运行时通过缓存访问物理内存;
[0059] 第二虚拟空间:关闭缓存,CPU通过第二虚拟空间对物理内存进行巡检,并在巡检过程中,CPU中断系统中的其他程序运行。
[0060] 中断系统中的其他程序运行:在检测物理内存的部分内存时,对部分内存的数据进行备份后,向部分内存中写入数据,此时部分内存中的数据是无效数据,如果此时有其他任务或中断访问此内存中的非法数据会导致不可预期的错误,因此在检测内存时不能运行其他任务或中断。
[0061] 示例性的,CPU对内存中的一个程序进行运行时,CPU通过程序进行运行时,其中一个程序即是特定的一系列动作、行动或操作,而这些活动、动作或操作必须被执行于相同方式以为了在相同环境下恒常得出相同的结果。在不中断程序的状况下,CPU对程序进行数据读取时,当其他任务对程序内部的某些代码进行改变,CPU运行同样程序得到结果也就不同。若CPU运行一个程序,得到两个完全相反的结果,进而会增大CPU的运算负荷,从而影响程序结果的正确判断。
[0062] 图2示出了本发明实施例的第二虚拟空间对物理内存进行巡检流程示意图。如图2所示,
[0063] 将待检测的所述物理内存中的数据备份到备份区;
[0064] 记录待写入测试数据;
[0065] 将所述测试数据写入到指定的所述物理内存中;
[0066] 从所述指定的物理内存中读出数据;
[0067] 将读出数据与记录的测试数据进行比较,若不一致,则判断所述指定的物理内存故障;
[0068] 将所述备份区的数据恢复到所述物理内存中。
[0069] 不通过缓存对物理内存进行巡检时,先将物理内存中被检测区的部分数据拷贝到备份区,避免数据写入或读出对被检测区的部分数据造成损坏,拷贝后,数据写入或读出不会对被检测区的部分数据造成影响。等到拷贝过后,CPU向被检测区写入巡检数据,写入后,CPU从被检测区读取巡检数据,然后将读取的巡检数据与写入的巡检数据进行比较,得到一个比较结果。重复写入和读写两个过程,得到多个比较结果,根据多个比较结果,从而判断被检测区是否正常。
[0070] 若比较结果一致,则记录被检测区处于正常状态;
[0071] 当CPU从被检测区读取的巡检数据与CPU向被检测区写入的巡检数据一致时,即CPU的写入和读取一致,从而得到被检测区的内存是正常工作的过程,能够对写入的数据进行完全保存,并不会损坏写入的巡检数据。
[0072] 若比较结果不一致,则记录被检测区处于不正常状态;
[0073] 在被检测区出现损坏、被检测区无法存储(或正常存储)以及CPU读取被检测区的巡检数据空白(或读取的巡检数据损坏)的状况下,进而巡检数据在写入和读取的比较结果不一致。
[0074] 被检测区的读取和写入的巡检数据不一致时,得到被检测区的异常。其中,被检测区的异常,并不仅限于被检测区损坏或内存较小的方式,例如被检测区内存无法读取数据。
[0075] 比较结果判定后,从而得到被检测区的内存是否正常,等到巡检完成后,将备份区的数据恢复到被检测区内部。被检测区的内存出现问题时,用户针对应用场景来对物理内存进行处理。
[0076] 示例性的,对物理内存进行巡检时,可以不关闭缓存进行巡检过程。
[0077] CPU通过第二虚拟空间对物理内存进行巡检的过程:
[0078] 将被检测区数据拷贝到备份区;
[0079] 向所述被检测区写入巡检数据;
[0080] 将所述被检测区对应的缓存刷新到所述物理内存中,并无效所述被检测区对应的缓存;
[0081] 从所述被检测区读取所述巡检数据,并与写入的巡检数据进行比较;
[0082] 重复写入、刷新、读取和比较的过程,得到所述被检测区的巡检结果;
[0083] 对所述被检测区巡检完成后,将所述备份区的数据恢复到所述被检测区。
[0084] 将被检测区的数据拷贝到备份区后,向被检测区内部写入巡检数据,将被检测区对应的缓存刷新到物理内存中,并无效被检测区对应的缓存,进而被检测区缓存中写入的巡检数据已经存储到物理内存中,进而保证巡检数据在缓存和物理内存内部的数据相同。然后重复写入、刷新、读取和比较的过程,得到多个被检测区的巡检结果,巡检完成后,将备份区的数据恢复到被检测区中。
[0085] 其中,CPU无需关闭cache(缓存)操作,但每次写操作后,都必须刷新被检测区部分内存数据对应的cache到实际物理内存中,并无效被检测区部分内存对应的cache。因此,CPU无需关闭所有cache,每次只刷新并无效部分cache,但根据循环的次数不同会进行多次cache操作。
[0086] CPU通过第二虚拟空间对物理内存进行巡检后,恢复系统正常运行。
[0087] 本发明还涉及一种内存巡检的系统,包括映射模块、访问模块和巡检模块;
[0088] 所述映射模块,用于对物理内存建立第一虚拟空间;
[0089] 所述访问模块,用于对所述物理内存建立第二虚拟空间,在系统运行时通过缓存访问物理内存;
[0090] 所述巡检模块,用于通过所述第一虚拟空间直接访问所述物理内存,对所述物理内存进行巡检;
[0091] 所述映射模块包括第一单元;
[0092] 所述第一单元,用于关闭所述第一虚拟空间的缓存访问机制;
[0093] 所述访问模块包括第二单元;
[0094] 所述第二单元,用于在系统运行时通过缓存访问物理内存。
[0095] 映射模块的第一单元通过缓存对物理内存进行访问,第二单元对物理内存进行巡检。即第一单元在通过缓存减小实际访问物理内存的频率,第二单元不通过缓存对物理内存的被检测区进行巡检。
[0096] 通过第二单元的巡检结果,从而判断物理内存是否正常。
[0097] 所述第一单元与所述第二单元相对应,共同映射与同一所述物理内存区间。本发明通过将一个物理内存的同一区域映射第一虚拟空间和第二虚拟空间,程序运行过程中,CPU通过第一虚拟空间对物理内存进行访问,并通过cache(缓存)减少实际访问物理地址的频率。CPU通过第二虚拟空间对物理内存进行巡检,对所述物理内存进行巡检之前,中断系统中运行的程序,关闭cache,能够直接通过第二虚拟空间对物理内存进行检测,多次将数据进行写入和读出,将读出数据与记录的测试数据进行比较,若不一致,则判断所述指定的物理内存故障。
[0098] 尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行
修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。