本发明涉及内存虚拟化,尤其涉及一种设备内存访问方法、装置、设备及可读存储介质。
背景技术:
1、由于只有设备能够直接感知设备内存中的数据发生变更,而应用无法直接感知设备内存中的数据发生变更,且应用访问设备内存的指令,仅仅支持本地访问,不支持网络访问,所以应用远程访问设备内存,难以保证内部缓存与设备内存的数据一致性,因此,亟需一种保证应用每次都可以及时获取远程设备内存中正确数据的方法。
技术实现思路
1、本发明的主要目的在于提供一种设备内存远程访问方法、装置、设备及可读存储介质,旨在解决目前应用无法每次都及时且准确的获取远程设备内存自刷新后的数据的问题。
2、第一方面,本发明提供一种设备内存访问方法,所述设备内存访问方法包括:
3、内存管理模块将多个设备内存物理地址对应的设备内存虚拟地址写入内存i/o地址页表,其中,设备内存物理地址与设备内存虚拟地址一一对应;
4、内存管理模块根据用以访问设备内存的目标设备内存虚拟地址查询内存映射表,得到目标设备内存虚拟地址对应的目标设备内存物理地址、目标设备内存缓存物理地址以及访问类型并传输给设备;
5、若设备检测到所述访问类型为读操作,则设备将所述目标设备内存物理地址对应的设备内存中的数据同步到目标设备内存缓存物理地址对应的内部缓存中;
6、内存管理模块将目标设备内存缓存物理地址写入内存i/o地址页表并修改下一条应用指令;
7、应用执行所述访问类型对应的当前应用指令,以供硬件将所述内部缓存中的数据写入寄存器中;
8、应用执行修改后的下一条应用指令,以供内存管理模块将内存i/o地址页表表项置为无效。
9、可选的,所述传输给设备的步骤,包括:
10、内存管理模块根据目标设备内存虚拟地址查询设备内存映射表,得到目标设备内存虚拟地址对应的设备通信地址和端口;
11、内存管理模块通过所述设备通信地址和端口将目标设备内存虚拟地址以及目标设备内存虚拟地址对应的目标设备内存物理地址、目标设备内存缓存物理地址、访问类型发送给设备。
12、可选的,在所述内存管理模块根据用以访问设备内存的目标设备内存虚拟地址查询内存映射表,得到目标设备内存虚拟地址对应的目标设备内存物理地址、目标设备内存缓存物理地址以及访问类型并传输给设备的步骤之后,包括:
13、若设备检测到所述访问类型为写操作,则设备将写操作对应的数据写入所述目标设备内存物理地址对应的设备内存中。
14、可选的,所述硬件将所述内部缓存中的数据写入寄存器中的步骤,包括:
15、硬件接收目标设备内存虚拟地址以及寄存器地址或寄存器名称,并执行应用的读指令;
16、硬件通过查询内存i/o地址页表获取目标设备内存虚拟地址对应的目标设备内存缓存物理地址,并将目标设备内存缓存物理地址对应的内部缓存中的数据写入寄存器地址或寄存器名称对应的寄存器中。
17、可选的,所述修改下一条应用指令的步骤,包括:
18、内存管理模块根据目标设备内存虚拟地址查询设备内存映射表,得到目标设备内存虚拟地址对应的当前应用指令地址;
19、根据当前应用指令地址确定下一条应用指令的地址;
20、基于下一条应用指令的地址修改下一条应用指令。
21、可选的,在所述应用执行修改后的下一条应用指令的步骤之后,包括:
22、内存管理模块将修改后的下一条应用指令恢复;
23、执行恢复后的下一条应用指令。
24、可选的,在所述应用执行修改后的下一条应用指令的步骤之后,包括:
25、检测目标设备内存虚拟地址对应的目标设备内存缓存物理地址在内存i/o地址页表中是否为空
26、若为空,则将目标设备内存缓存物理地址写入的内存i/o地址页表中,并将对应的页表表项置为有效;
27、若不为空,则将对应的页表表项置为有效。
28、第二方面,本发明还提供一种设备内存访问装置,所述设备内存访问装置包括:
29、第一写入模块,用于内存管理模块将多个设备内存物理地址对应的设备内存虚拟地址写入内存i/o地址页表,其中,设备内存物理地址与设备内存虚拟地址一一对应;
30、查询模块,用于内存管理模块根据用以访问设备内存的目标设备内存虚拟地址查询内存映射表,得到目标设备内存虚拟地址对应的目标设备内存物理地址、目标设备内存缓存物理地址以及访问类型并传输给设备;
31、同步模块,用于若设备检测到所述访问类型为读操作,则设备将所述目标设备内存物理地址对应的设备内存中的数据同步到目标设备内存缓存物理地址对应的内部缓存中;
32、第二写入模块,用于内存管理模块将目标设备内存缓存物理地址写入内存i/o地址页表并修改下一条应用指令;
33、第一指令执行模块,用于应用执行所述访问类型对应的当前应用指令,以供硬件将所述内部缓存中的数据写入寄存器中;
34、第二指令执行模块,用于应用执行修改后的下一条应用指令,以供内存管理模块将内存i/o地址页表表项置为无效。
35、第三方面,本发明还提供一种设备内存访问设备,所述设备内存访问设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的设备内存访问程序,其中所述设备内存访问程序被所述处理器执行时,实现如上所述的设备内存访问方法的步骤。
36、第四方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有设备内存访问程序,其中所述设备内存访问程序被处理器执行时,实现如上所述的设备内存访问方法的步骤。
37、本发明中,内存管理模块将多个设备内存物理地址对应的设备内存虚拟地址写入内存i/o地址页表,其中,设备内存物理地址与设备内存虚拟地址一一对应;内存管理模块根据用以访问设备内存的目标设备内存虚拟地址查询内存映射表,得到目标设备内存虚拟地址对应的目标设备内存物理地址、目标设备内存缓存物理地址以及访问类型并传输给设备;若设备检测到所述访问类型为读操作,则设备将所述目标设备内存物理地址对应的设备内存中的数据同步到目标设备内存缓存物理地址对应的内部缓存中;内存管理模块将目标设备内存缓存物理地址写入内存i/o地址页表并修改下一条应用指令;应用执行所述访问类型对应的当前应用指令,以供硬件将所述内部缓存中的数据写入寄存器中;应用执行修改后的下一条应用指令,以供内存管理模块将内存i/o地址页表表项置为无效。通过本发明,由于每次硬件将内部缓存中的数据写入寄存器中之后,内存i/o地址页表表项一般仍旧保持有效,即使设备内存的数据发生了变更,内部缓存的数据也难以及时变更,因此当应用再次读取设备内存数据时,仍旧会读取到上一次的内部缓存的数据,所以为了保证下次硬件能将设备内存的数据及时写入寄存器,内存管理模块每一次将内部缓存中的数据写入寄存器之后,都会将内存i/o地址页表表项置为无效,并且在下一次读取设备内存时,内存管理模块及时将设备内存数据同步到内部缓存,然后再将内存i/o地址页表表项置为有效,从而使得每次写入寄存器中的数据都是设备内存自刷新后的数据,保证了应用每次获取的数据的正确性和及时性,解决了目前cpu无法及时且准确的获取设备内存自刷新后的数据的问题。