页表更新方法、装置及相关设备与流程

文档序号:26520481发布日期:2021-09-04 10:25阅读:98来源:国知局
页表更新方法、装置及相关设备与流程

1.本发明实施例涉及虚拟机技术领域,具体涉及一种页表更新方法、装置及相关设备。


背景技术:

2.随着信息技术的发展,特别是云计算技术的发展与普及,使得越来越多的客户把业务系统部署在云端。虚拟化技术作为一种应用于云端的计算机技术,可虚拟化出多台虚拟机(virtual machine,vm),以实现对硬件资源的高效利用。
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.可选的,发送第一地址之前,还包括:
58.接收内存迁移开始消息,所述内存迁移开始消息包括即将迁移的内存的主机虚拟地址;
59.查询虚拟机管理器的内存占位槽,获取所述主机虚拟地址中指向共享内存的第一地址。
60.可选的,还包括:
61.内存迁移结束后,发送已迁移的共享内存对应的第三地址,以使所述安全处理器基于所述第三地址,更新所述共享内存信息链表中,对应所述第三地址的链表节点的状态信息。
62.可选的,所述第三地址为客户机物理地址,所述发送已迁移的共享内存对应的第三地址,具体为,发送第二状态更新指令,所述第二状态更新指令携带所述第三地址。
63.在本发明的一个实施例中,还提供了一种页表更新装置,包括:
64.地址获取模块,用于内存迁移启动后,获取第一地址,所述第一地址指向安全虚拟机待迁移的共享内存;
65.地址释放模块,用于释放页表中所述第一地址的地址映射关系,以使所述安全虚拟机在访问所述第一地址指向的共享内存时,产生缺页异常;
66.指令获取模块,用于在产生由所述安全虚拟机缺页异常触发的页表更新指令后,获取所述页表更新指令,所述页表更新指令包括产生缺页异常的第二地址;
67.页表更新模块,用于基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系。
68.在本发明的一个实施例中,还提供了另一种页表更新装置,包括:
69.地址发送模块,用于内存迁移启动后,发送第一地址至安全处理器,以使所述安全处理器释放页表中所述第一地址的地址映射关系,所述第一地址指向安全虚拟机待迁移的共享内存;
70.指令发送模块,用于在安全虚拟机产生缺页异常时,发送由缺页异常触发的页表更新指令至所述安全处理器,以使所述安全处理器基于所述页表更新指令,在第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系;其中,所述页表更新指令包括产生缺页异常的第二地址。
71.在本发明的一个实施例中,还提供了一种安全处理器,所述安全处理器可执行,实现上述应用于安全处理器的页表更新方法的程序。
72.在本发明的一个实施例中,还提供了一种主机,所述主机可执行,实现上述应用于主机的页表更新方法的程序。
73.可选的,所述主机包括虚拟机模块,所述虚拟机模块可执行,实现上述应用于主机的页表更新方法的程序。
74.在本发明的一个实施例中,还提供了一种计算机架构,包括:上述的安全处理器和上述的主机。
75.本发明实施例提供了一种页表更新方法、装置及相关设备,所述页表更新方法包括:内存迁移启动后,获取第一地址,所述第一地址指向安全虚拟机待迁移的共享内存;释放页表中所述第一地址的地址映射关系,以使所述安全虚拟机在访问所述第一地址指向的
共享内存时,产生缺页异常;在产生由所述安全虚拟机缺页异常触发的页表更新指令后,获取所述页表更新指令,所述页表更新指令包括产生缺页异常的第二地址;基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系。其中,内存迁移启动后,即释放页表中待迁移共享内存的地址映射关系,使安全虚拟机访问到该部分共享内存时产生缺页异常,从而使安全处理器基于该缺页异常更新页表中对应的地址映射关系,进而使得安全虚拟机的共享内存的页表更新得以实现,并进一步使得针对共享内存的迁移得以实现。
附图说明
76.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
77.图1为基于虚拟化技术的云服务可选架构图;
78.图2为本发明实施例提供的计算机架构示意图;
79.图3为本发明实施例提供的一种页表的地址映射关系示意图;
80.图4为本发明实施例提供的一种虚拟机内存访问示意图;
81.图5为本发明实施例提供的内存迁移过程中的页表更新示意图;
82.图6为本发明实施例提供的一种页表更新方法流程示意图;
83.图7为本发明实施例提供的步骤s14的可选流程示意图;
84.图8为本发明实施例提供的一种共享内存信息链表结构示例图;
85.图9为本发明实施例提供的一种内存迁移的可选流程示意图;
86.图10为本发明实施例提供的步骤s21的可选流程示意图;
87.图11为本发明实施例提供的一种页表更新方法的可选流程示意图;
88.图12为本发明实施例提供的页表更新装置的可选框图;
89.图13为本发明实施例提供的页表更新装置的另一可选框图;
90.图14为本发明实施例提供的页表更新装置的又一可选框图;
91.图15为本发明实施例提供的页表更新装置的另一可选框图。
具体实施方式
92.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
93.虚拟化技术可应用于多种场景,特别的,随着云服务的发展,虚拟化技术在云服务这一场景中得到了越来越广泛的应用;为便于理解虚拟化技术,下面以基于虚拟化技术的云服务为例,对虚拟化技术进行介绍。
94.参照图1所示基于虚拟化技术的云服务可选架构,该云服务架构可以包括:云主机100,网络200,用户301至30n;
95.其中,云主机100为云服务提供方(如云服务厂商)部署在网络侧的用于提供云服务的主机设备(主机设备的形式可以是服务器);基于不同用户的需求,云主机可通过虚拟化技术为不同用户创建一台或多台虚拟机,例如,用户可以根据业务需求,请求云主机为用户创建适应其业务需求的多台虚拟机,从而用户可以在属于其的多台虚拟机上分别运行应用,以通过多台虚拟机运行的应用来协作完成用户特定的业务;可以理解的是,虚拟机即为用户提供服务的客户机。
96.网络200可以认为是互联网,或者其他形式的具有通信功能的网络,云主机与用户之间通过网络实现通信和数据传输,本发明实施例并不限制网络200的具体网络形式;
97.用户301至30n为使用云服务的注册用户,其数量可以为多个,本发明实施例并不限制n的具体数值;在云服务场景下,每一个用户可以在云主机中拥有属于其的一台或多台虚拟机,以利用属于用户的虚拟机来完成用户特定的业务。
98.作为一种可选示例,图2示出了虚拟化环境的系统架构的可选示意图,如图2所示,虚拟化环境的系统架构可以包括:cpu(central processing unit,中央处理器)核心1,内存控制器2,内存3和安全处理器(psp,platform secure processor)4;
99.其中,cpu核心1可通过运行在其内的主机操作系统(下称主机)10配置虚拟机管理器(vmm,virtual machine monitor)11,并通过虚拟化技术虚拟化出多台虚拟机12,该多台虚拟机可由虚拟机管理器11基于主机10中的虚拟机模块(kvm,kernel

based virtual machine)13进行内存的访问和管理,并由虚拟机管理器11基于内存管理单元(mmu,memory management unit)14进行内存地址的转换和内存迁移。内存控制器2是控制内存3,并且使内存3与cpu核心1之间交换数据的硬件,内存控制器2可配置加密引擎21,加密引擎21可存储密钥;安全处理器4是安全虚拟化技术专门设置的负责虚拟机数据安全的处理器,安全处理器4可通过加密引擎21存储的密钥为部分或所有虚拟机的内存进行加密,并且不同虚拟机使用的内存通过不同的密钥进行加密。
100.在虚拟机12的程序运行时,虚拟机12需要找到为该程序运行而分配的内存页面,也即通过虚拟机的客户机物理地址(guest physical address,gpa;在本方案中,虚拟机即可理解为客户机,因此,此处也可称为虚拟机物理地址)找到内存页面对应的主机物理地址。页表作为记录地址映射关系的表单,记录有包含客户机物理地址到主机物理地址的映射关系。
101.图3示出了页表的地址映射关系示意图。可以看出,从虚拟机的客户机虚拟地址到主机的物理地址,包含了客户机虚拟地址到客户机物理地址的映射页表(gpt),该映射页表称为虚拟机映射页表,同时,还包含了客户机物理地址到主机物理地址的映射页表(npt),该映射页表称为嵌套页表。
102.可以理解的是,当虚拟机的程序运行时,可以通过查找虚拟机映射页表,找到待访问页面的客户机物理地址,并进一步通过找到的客户机物理地址,从嵌套页表中查找主机物理地址,基于查找的主机物理地址进行数据的访问。其中,如不能找到对应的主机物理地址或对应的内存页面,则会出现缺页异常。
103.为保证内存数据的安全,在内存中进一步通过安全机制划分出一部分内存作为安全内存,该安全内存仅允许为其分配的虚拟机访问,不允许超级操作系统(例如主机操作系统或虚拟机管理器等)访问,以避免超级操作系统对虚拟机数据的侵入性访问。结合参考图
2和图4,内存3可以包括普通内存30和安全内存31,分配有安全内存的虚拟机可称为安全虚拟机,未分配安全隔离内存的虚拟机可称为普通虚拟机。其中,安全内存的安全机制可以为配置特殊的加密机制,也可以为物理隔离。
104.结合参考图4示出的虚拟机内存访问示意图,其中,图中以运行在cpu上的主机操作系统进行访问为例,在主机操作系统访问安全内存时,则拒绝主机操作系统访问。需要说明的是,在安全虚拟机中并不仅分配安全内存,还可以同时分配普通内存,以作为共享内存,存储需要安全虚拟机和主机操作系统共享的数据。参考图4虚线框示出的内存,为分配给安全虚拟机的安全内存和共享内存。
105.同时,为保障安全虚拟机的信息访问安全,安全虚拟机的嵌套页表可以由安全处理器维护。在安全虚拟机进行内存访问时,基于安全处理器内的嵌套页表进行主机物理地址的查找,从而基于该主机物理地址读取相应的数据。
106.然而,参考图5所示的内存迁移过程中的页表更新示意图,在主机进行内存迁移的过程中,需要基于vmm的memslot(内存占位槽)中记载的客户机物理地址gpa与主机虚拟地址(host virtual address,hva)的映射关系,以及vmm的管理器页表(下称vmm进程页表)记录的迁移后的主机虚拟地址hva与主机物理地址(host physical address,hpa)的地址映射关系,确定客户机物理地址gpa对应的主机物理地址hpa,进而更新嵌套页表npt中对应的地址映射关系,从而在内存迁移后,保证虚拟机访问准确的内存页面。
107.可以理解的是,内存迁移由主机中的mmu执行,然而,基于安全虚拟机的嵌套页表由安全处理器维护,主机或虚拟机管理器没有权限进行嵌套页表的更新,使得针对安全虚拟机的共享内存的迁移无法实现。
108.基于此,本发明实施例提供了一种页表更新方法、装置及相关设备,所述页表更新方法包括:内存迁移启动后,获取第一地址,所述第一地址指向安全虚拟机待迁移的共享内存;释放页表中所述第一地址的地址映射关系,以使所述安全虚拟机在访问所述第一地址指向的共享内存时,产生缺页异常;在产生由所述安全虚拟机缺页异常触发的页表更新指令后,获取所述页表更新指令,所述页表更新指令包括产生缺页异常的第二地址;基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系。其中,内存迁移启动后,即释放页表中待迁移共享内存的地址映射关系,使安全虚拟机访问到该部分共享内存时产生缺页异常,从而使安全处理器基于该缺页异常更新页表中对应的地址映射关系,进而使得安全虚拟机的共享内存的页表更新得以实现,并进一步使得针对共享内存的迁移得以实现。
109.在一个可选的示例中,参照图2所示的系统架构可选示意图,本发明实施例提供了一种页表更新方法,基于主机中的mmu、kvm和安全处理器执行,参考图6示出的页表更新方法流程示意图,所述页表更新方法包括:
110.步骤s10:kvm发送第一地址至安全处理器,所述第一地址指向所述安全虚拟机待迁移的共享内存;
111.其中,共享内存为配置于安全虚拟机的普通内存。kvm可以基于主机的内存迁移开始消息,获取第一地址。可选的,所述第一地址为客户机物理地址,在内存迁移启动后,主机的mmu可以向主机中的kvm发送内存迁移开始消息,所述内存迁移开始消息包括即将迁移的内存的主机虚拟地址hva。kvm通过接收该内存迁移开始消息,得到即将迁移的内存的主机
虚拟地址,并通过查询vmm的memslot,获取主机虚拟地址中,指向共享内存的第一地址。需要说明的是,在本示例中,mmu可以为主机中用于管理内存的分配、释放、迁移、以及页表更新的一个软件模块。
112.可以理解的是,即将迁移的普通内存可以为配置于安全虚拟机的部分或全部共享内存,也可以不为配置于安全虚拟机的共享内存。可选的,mmu可以查询配置给安全虚拟机共享内存,在即将迁移的内存为安全虚拟机的共享内存时,基于该即将迁移的内存的hva,向kvm发送内存迁移开始消息;或者,mmu可以将即将迁移的内存的地址范围发送给kvm,由kvm在查询即将迁移的内存的客户机物理地址时,确定指向该安全虚拟机的共享内存的第一地址。
113.其中,待迁移的共享内存可以为一个内存页面,也可以为多个内存页面,相应的,第一地址可以以地址范围(gpa,gpa_end)表示。
114.可以理解的是,在进行内存迁移的过程中,相应内存的客户机物理地址gpa是不变的,发生变化的是主机物理地址hpa。从而,以第一地址为客户机物理地址进行嵌套页表的更新,能够有效准确的变更相应的地址映射关系。
115.在一个可选的示例中,安全虚拟机可以通过安全调用使得kvm将安全虚拟机的第一地址(gpa,gpa_end)发送至安全处理器。
116.步骤s11:安全处理器释放页表中所述第一地址的地址映射关系;
117.安全处理器在接收到所述第一地址后,可以将嵌套页表中,与第一地址对应的地址映射关系释放,以使所述安全虚拟机在访问所述第一地址指向的共享内存时,产生缺页异常,并进一步基于该缺页异常执行页表的更新。
118.其中,在释放第一地址对应的地址映射关系时,可以基于各个内存页面对应的地址逐一释放,也可以基于多个内存页面对应的地址并行执行释放。
119.步骤s12:mmu将所述第一地址指向的共享内存迁移至预设的内存页面;
120.在安全处理器释放所述第一地址对应的地址映射关系之后,安全处理器可以发送地址释放响应消息,以指示所述第一地址的地址映射关系被完全释放。所述释放响应消息可以发送至主机的mmu,或发送至kvm并由kvm转发至主机的mmu。主机的mmu获取所述地址释放响应消息后,可以执行内存的迁移,将内存迁移至预设的内存页面。
121.需要说明的是,在执行内存的迁移过程中,主机操作系统会在vmm进程页表中记录主机虚拟地址到预设的内存页面的主机物理地址的映射关系,从而使得安全虚拟机的嵌套页表可以基于该vmm进程页表进行相应的更新。
122.在内存迁移结束后,mmu可以向kvm发送内存迁移结束消息,以表明内存迁移过程已经结束。
123.步骤s13:kvm在安全虚拟机产生缺页异常时,发送由缺页异常触发的页表更新指令至安全处理器;
124.可以理解的是,嵌套页表中释放第一地址对应的地址映射关系后,在安全虚拟机访问的一个或多个内存页面为迁移后的共享内存时,会产生缺页异常。具体的,该缺页异常可以为嵌套缺页错误,相应的,在产生缺页异常时,可以触发kvm产生页表更新指令,并将页表更新指令发送至安全处理器,以使安全处理器将新的地址映射关系更新至嵌套页表。所述页表更新指令中包括产生缺页异常的客户机物理地址。具体的,本发明以产生缺页异常
的地址为第二地址进行说明,相应的,所述页表更新指令包括产生缺页异常的第二地址。
125.相应的,安全处理器可以在kvm发送页表更新指令后,获取该页表更新指令。
126.步骤s14:安全处理器基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系;
127.所述第二地址可能指向安全内存,也可能指向共享内存,需要确定第二地址指向的内存页面是否为共享内存,并且,在第二地址指向共享内存时,基于安全虚拟机和内存迁移可能同时运行,因此,需要确定第二地址指向的共享内存是否为已完成迁移流程的共享内存(即已迁移的共享内存),进而在所述第二地址指向已迁移的共享内存时,在页表中更新第二地址对应的地址映射关系。
128.在一个可选的示例中,参考图7所示的步骤s14的可选流程示意图,步骤s14可以包括:
129.步骤s141:安全处理器基于所述地址更新指令,在所述第二地址指向共享内存时,获取所述第二地址对应的主机物理地址;
130.可以理解的是,所述第二地址可能指向安全内存,也可能指向共享内存,安全处理器在获取页表更新指令后,可以确定第二地址指向的内存页的属性,从而基于内存页的属性确定第二地址指向的是安全内存还是共享内存,而kvm则在所述第二地址指向共享内存时,确定所述第二地址对应的主机物理地址。
131.具体的,安全处理器可以确定第二地址指向的内存页的属性后,向主机中的kvm发送第二地址指向的内存页的属性,若内存页的属性不是共享内存,则通知kvm继续运行安全虚拟机,若内存页的属性是共享内存,主机中的kvm则查询vmm进程页表,从而确定第二地址对应的主机物理地址,并将第二地址对应的主机物理地址发送至安全处理器。
132.相应的,安全处理器可以从主机中的kvm获取对应第二地址的主机物理地址。
133.步骤s142:安全处理器判断所述第二地址指向的共享内存是否为已迁移的共享内存;
134.所述共享内存是否处于已迁移状态,可以基于主机的mmu发送的内存迁移结束消息确定,也可以基于共享内存对应的状态信息确定。在基于共享内存对应的状态信息确定时,可以通过状态信息对共享内存是否处于迁移状态进行标记,进而可以查询确定共享内存是否为已迁移。
135.在本步骤中,若判断结果为是,则执行步骤s143,更新所述第二地址对应的地址映射关系,若否,则返回相应的响应消息至kvm,通知kvm继续运行安全虚拟机。
136.步骤s143:安全处理器在页表中更新所述第二地址对应的地址映射关系至所述主机物理地址;
137.安全处理器在获取第二地址对应的主机物理地址后,可以将该主机物理地址更新至第二地址对应的页表项,从而为第二地址建立新的地址映射关系。
138.可以理解的是,上述实施例以主机中的kvm和mmu执行相应的步骤为例进行了说明,在一些可选的示例中,相应步骤还可以由主机中的其他模块执行,本发明在此不做具体的限定。
139.基于上述页表更新方法,可以更新安全虚拟机的嵌套页表,进而使得安全虚拟机中共享内存的迁移得以实现。
140.在可选实现中,还可以进一步使主机和安全虚拟机的共享内存的状态在迁移过程中同步,以实现在安全虚拟机的运行过程中执行共享内存的迁移。其中,在一个可选的示例中,可以为共享内存配置状态信息,在执行共享内存的迁移和访问时,基于该状态信息执行共享内存页表的更新和共享内存数据的访问。
141.所述状态信息可以为管理序列号(sequence),所述管理序列号可以为64bit或128bit的大数,从而可以避免数据溢出。共享内存的管理序列号用于标识共享内存的状态信息,可选的,共享内存每迁移一次,可以更新一次所述管理序列号。可以理解的是,共享内存每次迁移,并不一定迁移全部共享内存,相应的,不同共享内存可以对应该次迁移更新后的管理序列号。
142.共享内存的一个页面可以对应一管理序列号,共享内存的多个页面也可以对应一管理序列号。相应的,共享内存和管理序列号的对应关系可以标示为(gpa,gpa_end,seq),其中,gpa和gpa_end分别表示共享内存的起止地址,seq表示对应该部分共享内存的管理序列号。在可选的示例中,可以建立共享内存信息链表,参考图8所示的共享内存信息链表结构示例图,将不同地址的共享内存及对应的管理序列号连接为一个链表,以保存不同地址范围的共享内存对应的管理序列号。可选的,相邻节点中的地址同时为相邻关系,例如,上一节点的gpa_end与下一节点的gpa相邻。
143.其中,在安全虚拟机的初始化时,可以将共享内存信息链表的sequence设置为初始值,例如可以为0,并预设一个无效状态值(invalid值),例如可以为

1,在sequence为无效状态值时,则可以基于该无效状态值执行预设的流程。具体的,可以在sequence为无效状态值时,认为对应该sequence的共享内存处于迁移过程中,进一步的,在内存迁移结束后,可以在更新管理序列号为已迁移状态。
144.安全管理器可以维护共享内存信息链表,具体的,在共享内存的迁移和访问过程中,安全管理器可以基于共享内存的状态更新该共享内存信息链表,安全处理器和主机则基于该共享内存信息链表,在内存迁移和页表更新过程中实现共享内存状态的同步。
145.在一个可选的示例中,参考图9所示的内存迁移过程中的页表更新方法的可选流程示意图,包括:
146.步骤s20:kvm发送第一状态更新指令至安全处理器,其中,所述第一状态更新指令携带所述第一地址;
147.在一个可选的示例中,kvm在内存迁移启动后,可以向安全处理器发送第一状态更新指令,所述第一状态更新指令可以携带所述第一地址,从而将第一地址发送至安全处理器。
148.其中,所述第一状态更新指令用于使安全处理器基于所述第一状态更新指令进行共享内存信息链表的更新,以表明共享内存信息链表对应的共享内存处于迁移状态。
149.步骤s21:安全处理器基于所述第一状态更新指令,更新所述共享内存信息链表中包含所述第一地址的链表节点的状态信息。
150.通过更新所述共享内存信息链表中包含所述第一地址的链表节点的状态信息,以表明所述第一地址对应的共享内存处于迁移状态。
151.在本示例中,共享内存信息链表中,链表节点的状态信息包括管理序列号,在一个可选的示例中,所述链表节点的状态信息可以为管理序列号。
152.在一个可选的示例中,参考图10所示的步骤s21的可选流程示意图,步骤s21可以包括:
153.步骤s211:安全处理器基于所述第一状态更新指令,查找共享内存信息链表中包含所述第一地址的链表节点;
154.在一个可选的示例中,kvm发送携带所述第一地址的第一状态更新指令,安全处理器则根据所述第一状态更新指令,获取所述第一地址。
155.其中,在安全处理器进行对应地址映射关系的释放之前,首先遍历共享内存信息链表,查找包含所述第一地址的链表节点(gpa_n,gpa_end_n,seq),若查找到符合条件的链表节点,则执行步骤s22,若没有找到符合条件的节点,则返回相应的响应消息至主机的mmu,通知mmu继续运行。
156.其中,所述第一地址,可以包含在所述链表节点内的地址范围内,也可以与所述链表节点内的地址范围相等同,或者至少部分包含在所述链表节点内的地址范围内。在本示例中,所述链表节点内的地址范围与第一地址有交叉范围,即认为所述链表节点包含所述第一地址。
157.步骤s212:安全处理器将查找到的链表节点的管理序列号配置为无效状态值;
158.通过将查找到的链表节点的管理序列号配置为无效状态值,以指示该部分的共享内存处于迁移状态。
159.在一个可选的示例中,若第一地址的部分地址范围包含在查找到的链表节点的地址范围内,可以将所述链表节点拆分为第一链表节点和第二链表节点,其中,第一链表节点内的地址为与所述第一地址的至少部分地址范围,即第一链表节点内的地址为与所述第一地址的交叉范围内的地址,第二链表节点内的地址为所述链表节点内的剩余地址范围。可以理解的是,在第一链表节点的起始地址与拆分前的链表节点的起始地址相同,或,第一链表节点的结束地址与拆分前的链表节点的结束地址相同时,所述第二链表节点可以为1个,对应所述链表节点内的剩余地址范围;在第一链表节点的地址范围在拆分前的链表节点的中间范围时,所述第二链表节点可以为2个,分别对应第一链表节点的起始地址前的地址范围,和第一链表节点的结束地址后的地址范围。
160.需要说明的是,在拆分所述链表节点后,可以将第一链表节点的管理序列号配置为无效状态值,将第二链表节点的管理序列号配置为拆分前的链表节点的管理序列号。
161.步骤s22:安全处理器释放页表中所述第一地址的地址映射关系;
162.步骤s23:mmu将所述第一地址指向的共享内存迁移至预设的内存页面;
163.在内存迁移过程中,主机中的mmu将所述第一地址指向的共享内存迁移至预设的内存页面,并将相应的地址映射关系更新至vmm进程页表。
164.步骤s24:kvm查询已迁移的共享内存对应的第三地址;
165.第三地址可以为客户机物理地址。具体的,在内存迁移结束后,共享内存迁移至预设的内存页面,主机的mmu可以发送内存迁移结束消息至kvm。其中,主机的mmu基于内存的hva执行内存的迁移,相应的,mmu将已迁移的内存地址(hva,hva_end)通过内存迁移结束消息发送至kvm。kvm可以从嵌套页表中查询(hva,hva_end)到(gpa,gpa_end)的映射关系,并通过第二状态更新指令将所述第三地址发送至安全处理器,其中,所述第二状态更新指令携带所述第三地址。
166.可以理解的是,在内存迁移成功完成时,所述第三地址与所述第一地址相等同,在内存迁移未成功完成时,所述第三地址可以仅为所述第一地址范围内的部分地址范围。
167.步骤s25:安全处理器基于所述第三地址,更新所述共享内存信息链表中,对应所述第三地址的链表节点的状态信息;
168.安全处理器可以基于第二状态更新指令获取第三地址,从而对共享内存信息链表中,对应所述第三地址的链表节点的管理序列号进行更新。
169.具体的,安全处理器可以查找所述共享内存信息链表中包含所述第三地址的链表节点;并将查找到的链表节点的管理序列号配置为已迁移状态值。可选的,可以将共享内存信息链表中的管理序列号加1,并查找包含第三地址的链表节点,若找到该链表节点,则将该链表节点内的管理序列号更新为加1之后的管理序列号。
170.需要说明的是,在内存迁移过程中,将处于迁移过程中的共享内存的序列号配置为无效状态值,从而在相应的内存访问或页表更新时,基于该无效状态值确定该部分的共享内存处于迁移过程中,进而可以执行对应迁移过程的流程,例如延迟相应操作或取消相应操作等。
171.在一个可选的示例中,还提供一种页表更新方法,该页表更新方法在内存访问到已迁移的共享内存时,则可以基于缺页异常执行页表的更新。参考图11所示的页表更新方法的可选流程示意图,页表更新过程可以包括:
172.步骤s30:kvm在安全虚拟机产生缺页异常时,发送页表更新指令至安全处理器,所述页表更新指令包括产生缺页异常的第二地址;
173.步骤s31:安全处理器基于所述页表更新指令,确定所述第二地址指向的内存页的内存属性;
174.其中,内存页的内存属性可以为安全内存,也可以为普通内存(即共享内存),在接收页表更新指令后,可以基于所述页表更新指令获取其中的第二地址,从而进一步确定第二地址指向的内存页的内存属性。
175.可选的,安全处理器可以基于共享内存信息链表确定第二地址指向的内存页的内存属性。具体的,安全处理器可以查找共享内存信息链表,若第二地址在共享内存信息链表任一节点的地址范围内,则该第二地址指向的内存页的内存属性为共享内存;否则,第二地址指向的内存页的内存属性为安全内存。
176.需要说明的是,在第二地址指向的内存页的内存属性为安全内存时,安全处理器可以为安全处理器直接分配对应该第二地址的安全内存,并将该第二地址的地址映射关系更新至嵌套页表中。
177.步骤s32:安全处理器在所述第二地址指向的内存页的内存属性为共享内存时,向kvm发送所述内存属性信息和对应所述第二地址的管理序列号;
178.其中,在所述第二地址指向的内存页的内存属性为共享内存时,表明此时的第二地址需要基于vmm进程页表更新,通过同时发送第二地址的管理序列号,用于基于该管理序列号信息,确认运行中的安全虚拟机的共享内存是否再次发生内存迁移(参考上述内存迁移实施例,发生内存迁移时,管理序列号会更新),从而使得安全处理器和主机的虚拟机管理器可以基于同步的管理序列号信息确定将要进行页表更新的第二地址对应的内存页是否处于同一状态。
179.步骤s33:kvm查找所述第二地址对应的主机物理地址;
180.kvm在所述第二地址指向的内存页的内存属性为共享内存时,可以在获取所述第二地址后,可以从vmm进程页表中查找第二地址对应的主机物理地址。
181.步骤s34:kvm发送页表更新确认指令至安全处理器;
182.在查找第二地址对应的主机物理地址后,kvm可以再次发送页表更新指令至安全处理器,其中,该页表更新确认指令中可以包括第二地址gpa、第二地址对应的主机物理地址hpa,以及第二地址对应的管理序列号sequence。
183.步骤s35:安全处理器判断所述第二地址指向的共享内存是否为已迁移的共享内存;
184.其中,安全处理器获取所述页表更新指令后,可以基于该页表更新指令,遍历共享内存信息链表,查找包含第二地址的共享内存链表节点,若未找到对应的链表节点,则返回到kvm,通知kvm继续运行安全虚拟机;若找到对应的链表节点,则判断该链表节点对应的sequence值是否为无效状态值,若是,表明该链表节点的共享内存处于迁移状态,则返回到kvm,继续运行安全虚拟机;若否,则表明该链表节点的共享内存未处于迁移状态,进一步判断该链表节点对应的sequence值是否大于所述页表更新确认指令中携带的管理序列号,若是,表明此页表更新指令中的更新信息对应的共享内存状态与该节点对应的共享内存状态不相符,则返回到kvm,继续运行安全虚拟机;若否,则此页表更新指令中的更新信息对应的共享内存状态与该节点对应的共享内存状态相符,则第二地址指向的共享内存是否为已迁移的共享内存。
185.具体的,在判断该链表节点对应的sequence值是否大于所述页表更新指令中携带的管理序列号时,可以令序列号命令提示符cmd_seq等于页表更新指令中携带的管理序列号,进而可以通过判断链表节点对应的sequence值是否大于cmd_seq,判断链表节点对应的sequence值是否大于所述页表更新指令中携带的管理序列号。
186.步骤s36:安全处理器在第二地址指向的共享内存为已迁移的共享内存,根据所述主机物理地址,更新所述第二地址对应的地址映射关系;
187.基于上述页表更新方法,基于共享内存信息链表进行页表的更新,从而可以实现安全虚拟机的运行过程中进行内存的迁移和安全虚拟机的嵌套页表的更新,从而不必关闭安全虚拟机,提升了用户体验。
188.上文描述了本申请实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本申请实施例披露、公开的实施例方案。
189.下面从安全处理器的角度,对本申请实施例提供的页表更新装置进行介绍,下文描述的页表更新装置可以认为是,安全处理器为实现本申请实施例提供的页表更新方法,所需设置的功能模块;下文描述的页表更新装置的内容,可与上文描述的方法内容相互对应参照。
190.在可选实现中,图12示出了本申请实施例提供的页表更新装置的可选框图,该页表更新装置可应用于安全处理器,如图12所示,该页表更新装置可以包括:
191.地址获取模块110,用于内存迁移启动后,获取第一地址,所述第一地址指向安全虚拟机待迁移的共享内存;
192.地址释放模块120,用于释放页表中所述第一地址的地址映射关系,以使所述安全虚拟机在访问所述第一地址指向的共享内存时,产生缺页异常;
193.指令获取模块130,用于在产生由所述安全虚拟机缺页异常触发的页表更新指令后,获取所述页表更新指令,所述页表更新指令包括产生缺页异常的第二地址;
194.页表更新模块140,用于基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系。
195.可选的,所述页表更新模块140,用于基于所述页表更新指令,在所述第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系,包括:
196.基于所述页表更新指令,在所述第二地址指向共享内存时,获取所述第二地址对应的主机物理地址;
197.判断所述第二地址指向的共享内存是否为已迁移的共享内存,若是,在页表中更新所述第二地址对应的地址映射关系至所述主机物理地址。
198.可选的,所述页表更新模块140,用于基于所述页表更新指令,在所述第二地址指向共享内存时,获取所述第二地址对应的主机物理地址,包括:
199.基于所述页表更新指令,确定第二地址指向的内存页的属性;
200.向主机发送第二地址指向的内存页的属性,以使主机在第二地址指向的内存页的属性为共享内存时,查询虚拟机管理器进程页表,确定第二地址对应的主机物理地址;
201.获取所述第二地址对应的主机物理地址。
202.可选的,所述页表更新模块140,用于基于所述页表更新指令,确定第二地址指向的内存页的属性,包括:
203.基于所述页表更新指令,获取所述第二地址;
204.查找共享内存信息链表,确定第二地址指向的内存页的属性;
205.其中,若第二地址在共享内存信息链表任一节点的地址范围内,则所述第二地址指向的内存页的内存属性为共享内存;否则,所述第二地址指向的内存页的内存属性为安全内存。
206.可选的,所述页表更新模块140,用于向主机发送第二地址指向的内存页的属性,包括:向主机发送所述第二地址指向的内存页的内存属性信息和对应所述第二地址的管理序列号;
207.所述页表更新模块140,用于获取所述第二地址对应的主机物理地址,包括:获取主机发送的页表更新确认指令,所述页表更新确认指令包括第二地址、第二地址对应的主机物理地址,以及第二地址对应的管理序列号。
208.可选的,所述页表更新模块140,用于判断所述第二地址指向的共享内存是否为已迁移的共享内存,包括:
209.查找所述共享内存信息链表中包含所述第二地址的链表节点;
210.判断查找到的链表节点的管理序列号是否为无效状态值;
211.若否,判断查找到的链表节点的管理序列号是否为大于所述页表更新确认指令中携带的管理序列号
212.若否,则所述第二地址指向的共享内存为已迁移的共享内存。
213.可选的,所述地址获取模块110,用于获取第一地址,包括:获取主机发送的第一状
态更新指令,其中,所述第一状态更新指令携带所述第一地址;
214.所述获取主机发送的第一状态更新指令之后,所述释放页表中所述第一地址的地址映射关系之前,还包括:
215.基于所述第一状态更新指令,更新共享内存信息链表中包含所述第一地址的链表节点的状态信息。
216.可选的,所述共享内存信息链表中,链表节点的状态信息为管理序列号;所述地址获取模块110,用于基于所述第一状态更新指令,更新所述共享内存信息链表中包含所述第一地址的链表节点的状态信息,包括:
217.基于所述第一状态更新指令,查找所述共享内存信息链表中包含所述第一地址的链表节点;
218.将查找到的链表节点的管理序列号配置为无效状态值。
219.可选的,所述第一地址的至少部分地址范围包含在查找到的链表节点的地址范围内,所述地址获取模块110,用于将查找到的链表节点的管理序列号配置为无效状态值,包括:
220.将所述链表节点拆分为第一链表节点和第二链表节点,其中,所述第一链表节点内的地址为与所述第一地址的至少部分地址范围,所述第二链表节点内的地址为所述链表节点内的剩余地址范围;
221.将所述第一链表节点的管理序列号配置为无效状态值,将所述第二链表节点的管理序列号配置为拆分前的链表节点的管理序列号。
222.可选的,所述地址获取模块110,还用于:
223.内存迁移结束后,获取主机发送的已迁移的共享内存对应的第三地址;
224.所述页表更新模块140,还用于基于所述第三地址,更新所述共享内存信息链表中,对应所述第三地址的链表节点的状态信息。
225.可选的,所述第三地址为客户机物理地址,所述地址获取模块110,用于获取主机发送的已迁移的共享内存对应的第三地址,具体为,获取主机发送的第二状态更新指令,所述第二状态更新指令携带所述第三地址;
226.所述页表更新模块140,用于基于所述第三地址,更新所述共享内存信息链表中,对应所述第三地址的链表节点的状态信息,包括:
227.查找所述共享内存信息链表中包含所述第三地址的链表节点;
228.将查找到的链表节点的管理序列号配置为已迁移状态值。
229.下面从安全虚拟机的角度,对本申请实施例提供的页表更新装置进行介绍,下文描述的页表更新装置可以认为是,安全虚拟机为实现本申请实施例提供的页表更新方法,所需设置的功能模块;下文描述的页表更新装置的内容,可与上文描述的方法内容相互对应参照。
230.在可选实现中,图13示出了本申请实施例提供的页表更新装置的另一可选框图,该页表更新装置可应用于主机,如图13所示,该页表更新装置可以包括:
231.地址发送模块210,用于内存迁移启动后,发送第一地址至安全处理器,以使所述安全处理器释放页表中所述第一地址的地址映射关系,所述第一地址指向安全虚拟机待迁移的共享内存;
232.指令发送模块220,用于在安全虚拟机产生缺页异常时,发送由缺页异常触发的页表更新指令至所述安全处理器,以使所述安全处理器基于所述页表更新指令,在第二地址指向已迁移的共享内存时,在页表中更新所述第二地址对应的地址映射关系;其中,所述页表更新指令包括产生缺页异常的第二地址。
233.可选的,参考图14示出的本申请实施例提供的页表更新装置的又一可选框图,所述页表更新装置还包括:
234.地址确定模块230,用于在所述第二地址指向共享内存时,确定所述第二地址对应的主机物理地址。
235.可选的,所述地址确定模块230,用于确定所述第二地址对应的主机物理地址,包括:
236.接收第二地址指向的内存页的属性;
237.在第二地址指向的内存页的属性为共享内存时,查询虚拟机管理器进程页表,确定第二地址对应的主机物理地址;
238.将第二地址对应的主机物理地址发送至安全处理器。
239.可选的,所述地址确定模块230,用于接收第二地址指向的内存页的属性,包括:接收第二地址指向的内存页的内存属性信息和对应所述第二地址的管理序列号;
240.所述地址确定模块230,用于将第二地址对应的主机物理地址发送至安全处理器,包括:发送的页表更新确认指令至安全处理器,所述页表更新确认指令包括第二地址、第二地址对应的主机物理地址,以及第二地址对应的管理序列号。
241.可选的,地址发送模块210,用于发送第一地址至安全处理器,包括:向安全处理器发送第一状态更新指令,其中,所述第一状态更新指令携带所述第一地址
242.可选的,参考图15示出的本申请实施例提供的页表更新装置的另一可选框图,所述页表更新装置还包括:
243.消息接收模块240,用于接收内存迁移开始消息,所述内存迁移开始消息包括即将迁移的内存的主机虚拟地址;
244.页表查询模块250,用于查询虚拟机管理器的内存占位槽,获取所述主机虚拟地址中指向共享内存的第一地址。
245.可选的,所述地址发送模块210,还用于内存迁移结束后,发送已迁移的共享内存对应的第三地址,以使安全处理器基于所述第三地址,更新所述共享内存信息链表中,对应所述第三地址的链表节点的状态信息。
246.可选的,所述第三地址为客户机物理地址,所述地址发送模块210,用于发送已迁移的共享内存对应的第三地址,具体为,发送第二状态更新指令,所述第二状态更新指令携带所述第三地址。
247.本申请实施例还提供一种安全处理器,该安全处理器可执行本申请实施例提供的页表更新方法的程序,具体内容可参照上文相应部分的描述,此处不再进一步展开介绍。
248.本申请实施例还提供一种主机,该主机可执行本申请实施例提供的页表更新方法的程序,在一个可选的示例中,该程序由主机中的虚拟机模块执行。具体内容可参照上文相应部分的描述,此处不再进一步展开介绍。
249.本申请实施例还提供一种计算机架构,该计算机架构例如云主机,该计算机架构
可以包括上述安全处理器和主机,该计算机架构的可选结构可如图2所示,该计算机架构可执行本申请实施例提供的页表更新方法的程序,具体内容可参照上文相应部分的描述,此处不再进一步展开介绍。
250.虽然本发明实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可做各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1