共享内存的管理方法、虚拟机监控器和计算设备与流程
未命名
09-07
阅读:201
评论:0
1.本说明书一个或多个实施例涉及计算机领域,尤其涉及一种共享内存的管理方法、虚拟机监控器和计算设备。背景技术:
::2.虚拟化技术解决方案提供在相同硬件平台上承载异构系统的灵活性,同时实现了良好的高可靠性和故障控制机制,以保证不同应用程序或者属于相同应用程序的不同组件之间的安全隔离。基于虚拟化技术的可信执行环境(trustedexecutionenvironment,tee),可以通过虚拟机监控器(virtualmachinemonitor,vmm;或称为hypervisor),实现对目标应用程序的可信部分和非可信部分进行内存隔离。技术实现要素:3.本说明书一个或多个实施例中提供了一种计算设备中共享内存的管理方法、虚拟机监控器和计算设备。4.第一方面,提供了一种计算设备中共享内存的管理方法,所述计算设备中部署有虚拟机监控器、虚拟机和tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述方法包括:所述虚拟机监控器在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知;所述虚拟机响应于所述中断通知,在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;所述虚拟机监控器响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项。5.在一种可能的实施方式中,所述虚拟机监控器维护有第一状态信息,所述第一状态信息的取值包括第一状态值或第二状态值,所述第一状态值用于指示允许在所述第二页表中生效新的页表项,所述第二状态值用于指示禁止在所述第二页表中生效新的页表项;其中,在根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项之前,所述方法还包括:根据所述第一状态信息确定是否允许生效所述第二页表项。6.在一种可能的实施方式中,所述方法还包括:所述虚拟机向所述虚拟机监控器发送第一起始消息,其中指示所述虚拟机监控器将要无效的第三页表项所对应的第二页面,所述第二页面属于所述共享内存;所述虚拟机监控器将所述第一状态信息设置为所述第二状态值,并在所述第二页表中无效所述第二页面对应的第三页表项;所述虚拟机在所述第一页表中无效所述第二页面对应的第四页表项,并向所述虚拟机监控器发送第一结束消息;所述虚拟机监控器响应于所述第一结束消息,将所述第一状态信息设置为所述第一状态值。7.在一种可能的实施方式中,所述虚拟机包括操作系统和页表项同步驱动;其中,所述方法还包括:所述页表项同步驱动从所述操作系统接收第二起始消息,其中指示所述操作系统将要无效的第五页表项对应的第三页面;所述页表项同步驱动响应于所述第二起始消息,根据所述地址信息确定所述第二起始消息所指示的第三页面是否为属于所述共享内存的第二页面;所述向所述虚拟机监控器发送第一起始消息,包括:在所述第二起始消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。8.在一种可能的实施方式中,所述方法还包括:所述页表项同步驱动从所述操作系统接收第二结束消息,其中指示所述操作系统已无效的第五页表项对应的第三页面;所述页表项同步驱动响应于所述第二结束消息,根据所述地址信息确定所述第二结束消息所指示的第三页面是否为属于所述共享内存的第二页面;所述向所述虚拟机监控器发送第一结束消息,包括:在所述第二结束消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。9.在一种可能的实施方式中,所述页表项同步驱动维护有第二状态信息,所述第二状态信息的取值包括第三状态值或第四状态值,所述第三状态值用于指示允许更新所述共享内存的地址信息,所述第四状态值用于指示禁止更新所述共享内存的地址信息;其中,所述方法还包括:所述页表项同步驱动响应于所述第二起始消息,将所述第二状态信息设置为所述第四状态值;所述页表项同步驱动响应于所述第二结束消息,将所述第二状态信息设置为所述第三状态值。10.在一种可能的实施方式中,所述方法还包括:所述虚拟机获取地址更新请求,用于请求更新所述共享内存的地址信息;所述虚拟机根据所述第二状态信息确定是否允许更新所述共享内存的地址信息;所述虚拟机在允许更新所述共享内存的地址信息的情况下,根据所述地址更新请求更新所述虚拟机中配置的所述共享内存的地址信息,以及向所述虚拟机监控器发送与所述地址更新请求对应的地址更新通知;所述虚拟机监控器根据所述地址更新通知更新其配置的所述共享内存的地址信息。11.第二方面,提供了一种计算设备中共享内存的管理方法,所述计算设备中部署有虚拟机监控器、虚拟机和tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述方法由所述虚拟机监控器执行,所述方法包括:在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知,使得所述虚拟机在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项。12.第三方面,提供了一种虚拟机监控器,所述虚拟机监控器部署在计算设备中,所述计算设备中还部署有虚拟机和tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;包括:缺页处理单元,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知,使得所述虚拟机在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;页表管理单元,配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效第二页表项。13.第四方面,提供了一种计算设备,所述计算设备中部署有虚拟机监控器、虚拟机和tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;其中:所述虚拟机监控器,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知;所述虚拟机,配置为响应于所述中断通知,在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;所述虚拟机监控器,还配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项。14.在一种可能的实施方式中,所述虚拟机监控器维护有第一状态信息,所述第一状态信息的取值包括第一状态值或第二状态值,所述第一状态值用于指示允许在所述第二页表中生效新的页表项,所述第二状态值用于指示禁止在所述第二页表中生效新的页表项;其中,所述虚拟机监控器,还配置为根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项之前,根据所述第一状态信息确定是否允许生效所述第二页表项。15.在一种可能的实施方式中,所述虚拟机,还配置为向所述虚拟机监控器发送第一起始消息,其中指示所述虚拟机监控器将要无效的第三页表项所对应的第二页面,所述第二页面属于所述共享内存;所述虚拟机监控器,还配置为将所述第一状态信息设置为所述第二状态值,并在所述第二页表中无效所述第二页面对应的第三页表项;所述虚拟机,还配置为在所述第一页表中无效所述第二页面对应的第四页表项,并向所述虚拟机监控器发送第一结束消息;所述虚拟机监控器,还配置为响应于所述第一结束消息,将所述第一状态信息设置为所述第一状态值。16.在一种可能的实施方式中,所述虚拟机包括操作系统和页表项同步驱动;所述页表项同步驱动,配置为从所述操作系统接收第二起始消息,其中指示所述操作系统将要无效的第五页表项对应的第三页面;所述页表项同步驱动,还配置为响应于所述第二起始消息,根据所述地址信息确定所述第二起始消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动,还配置为在所述第二起始消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。17.在一种可能的实施方式中,所述页表项同步驱动,还配置为从所述操作系统接收第二结束消息,其中指示所述操作系统已无效的第五页表项对应的第三页面;所述页表项同步驱动,还配置为响应于所述第二结束消息,根据所述地址信息确定所述第二结束消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动,还配置为在所述第二结束消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。18.在一种可能的实施方式中,所述页表项同步驱动维护有第二状态信息,所述第二状态信息的取值包括第三状态值或第四状态值,所述第三状态值用于指示允许更新所述共享内存的地址信息,所述第四状态值用于指示禁止更新所述共享内存的地址信息;所述页表项同步驱动,还配置为响应于所述第二起始消息,将所述第二状态信息设置为所述第四状态值;还配置为响应于所述第二结束消息,将所述第二状态信息设置为所述第三状态值。19.在一种可能的实施方式中,所述虚拟机,还配置为获取地址更新请求,其用于请求更新所述共享内存的地址信息;根据所述第二状态信息确定是否允许更新所述共享内存的地址信息;在允许更新所述共享内存的地址信息的情况下,根据所述地址更新请求更新所述虚拟机中配置的所述共享内存的地址信息,以及向所述虚拟机监控器发送与所述地址更新请求对应的地址更新通知;所述虚拟机监控器,还配置为根据所述地址更新通知更新其配置的所述共享内存的地址信息。20.通过本说明书一个或多个实施例中提供的方法、虚拟机监控器和计算设备,虚拟机和虚拟机监控器中均配置有目标应用程序对应的共享内存的地址信息,目标应用程序的可信部分和非可信部分分别运行于tee和虚拟机中,当可信部分请求访问属于共享内存的第一地址而发生缺页错误时,虚拟机监控器可以根据共享内存的地址信息决策向虚拟机发送中断通知;虚拟机处理该中断通知的过程中,可以根据其维护的共享内存的地址信息确定出期望访问的第一地址属于与目标应用程序对应的共享内存,进而在确保非可信部分的第一页表中已生效第一地址所属第一页面的第一页表项,该第一页表项用于支持非可信部分访问第一页面的情况下,向虚拟机监控器返回响应消息,使得虚拟机监控器可以根据已生效的第一页表项中所包括的第一页面的地址映射信息,在可信部分的第二页表中生效用于支持可信部分访问第一页面的第二页表项。如此,无需为共享内存预留物理内存,目标应用程序的可信部分和非可信部分即可通过访问共享内存中相同的页面来进行信息交互,有利于运行非可信部分的虚拟机动态管理目标应用程序所对应的共享内存,进而提高内存使用效率。附图说明21.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。22.图1为本说明书实施例中示例性提供的一种计算设备的系统架构图;23.图2为示例性提供的通过页表将虚拟地址空间映射到物理地址空间的示意图;24.图3为本说明书实施例中提供的一种计算设备中共享内存的管理方法的流程图之一;25.图4为本说明书实施例中提供的一种计算设备中共享内存的管理方法的流程图之二;26.图5为计算设备中并发执行生效和无效相关页面所对应的页表项的时序图;27.图6为本说明书实施例中提供的一种计算设备中共享内存的管理方法的流程图之三;28.图7为计算设备并发执行更新共享内存和无效相关页面所对应的页表项的时序图;29.图8为本说明书实施例中提供的一种虚拟机监控器的结构示意图;30.图9为本说明书实施例中提供的一种计算设备的结构示意图。具体实施方式31.下面结合附图,对本说明书所提供的各个非限制性实施例进行详细描述。32.目前工业界十分关注tee技术的解决方案,几乎所有主流的芯片和软件联盟都有自己独立的tee解决方案,比如软件方面的tpm(trustedplatformmodule,可信赖平台模块)以及硬件方面的sgx(softwareguardextensions,软件保护扩展)、armtrustzone(信任区)和amdpsp(platformsecurityprocessor,平台安全处理器)等。tee可以起到黑箱作用,在tee中的代码和数据即便是操作系统层都无法偷窥,只有通过代码中预先定义的接口才能对其进行操作。在效率方面,由于tee的黑箱性质,在tee中进行运算的是明文数据,而不是同态加密中复杂的密码学运算,计算过程效率几乎没有损失。33.tee技术中,以sgx(softwareguardextension,以下简称sgx)技术为例加以说明。计算节点可以基于sgx技术创建enclave(围圈或飞地),以作为用于执行特定应用程序可信部分的tee。其中,计算节点中利用cpu中新增的处理器指令,在内存中可以分配一部分区域epc(enclavepagecache,围圈页面缓存或飞地页面缓存),以用于驻留上述的enclave。上述epc对应的内存区域被cpu内部的内存加密引擎mee(memoryencryptionengine)加密,该内存区域中的内容(enclave中的代码和数据)只有在cpu内核中才能够被解密,且用于加解密的密钥只有在epc启动时生成并存储在cpu中。可见,enclave的安全边界只包含其自身和cpu,无论是特权软件或非特权软件都无法访问enclave,即便是操作系统管理员和虚拟机监控器也无法影响enclave中的代码和数据,因而具有极高的安全性。在上述安全性保障的前提下,cpu能够在enclave中对数据进行处理,具有极高的运算效率,从而兼顾了数据安全性和计算效率。34.图1为本说明书实施例中示例性提供的一种计算设备的系统架构图。请参见图1,计算设备中部署有虚拟机监控器以及由虚拟机监控器管理的若干虚拟机,该若干虚拟机例如包括虚拟机vm_a。虚拟机监控器可以直接管理计算设备的硬件(hardware)资源,虚拟机vm_a的操作系统os_a可以执行在通过虚拟机监控器来虚拟的处理器上,更具地说是虚拟机vm_a可以通过虚拟机监控器来使用虚拟化处理后的硬件资源。目标应用程序的非可信部分app_a1在虚拟机vm_a中启动运行后,可以通过sgx或者其它可能的tee技术在计算设备中创建tee,并在该tee中运行目标应用程序的可信部分app_a2。前述tee可以是部署有操作系统的标准虚拟机,也可以是未部署操作系统的进程级别的虚拟机。35.为了使运行在tee中的可信部分app_a2能够和运行在虚拟机vm_a中的非可信部分app_a1通信,通常可以预先在虚拟机vm_a中设置目标应用程序所对应的通信缓冲区/共享内存,并且在非可信部分app_a1和可信部分app_a2的生命周期内,属于共享内存的页面会被设置为禁止被虚拟机vm_a和虚拟机监控器换出。该种实施方式存在诸多的缺陷,例如:因属于共享内存的页面不能被换出而需要为共享内存预留足够的物理内存;虚拟机vm_a无法对共享内存进行管理,例如换出页面、迁移页面、内存碎片整理等,造成内存资源利用率低;虚拟机vm_a无法在目标应用程序运行期间动态调整共享内存的大小。36.本说明书实施例中至少提供了一种计算设备中的共享内存管理方法、虚拟机监控器和计算设备。虚拟机和虚拟机监控器中均配置有目标应用程序对应的共享内存的地址信息,目标应用程序的可信部分和非可信部分分别运行于tee和虚拟机中,当可信部分请求访问属于共享内存的第一地址而发生缺页错误时,虚拟机监控器可以根据共享内存的地址信息决策向虚拟机发送中断通知;虚拟机处理该中断通知的过程中,可以根据其维护的共享内存的地址信息确定出期望访问的第一地址属于与目标应用程序对应的共享内存,进而在确保非可信部分的第一页表中已生效第一地址所属第一页面的第一页表项,该第一页表项用于支持非可信部分访问第一页面的情况下,向虚拟机监控器返回响应消息,使得虚拟机监控器可以根据已生效的第一页表项中所包括的第一页面的地址映射信息,在可信部分的第二页表中生效用于支持可信部分访问第一页面的第二页表项。如此,无需为共享内存预留物理内存,目标应用程序的可信部分和非可信部分即可通过访问共享内存中相同的页面来进行信息交互,有利于运行非可信部分的虚拟机动态管理目标应用程序所对应的共享内存,进而提高内存使用效率。37.下文将结合图1所示的系统架构详细描述本说明书实施例中提供的技术方案。38.参见图1所示,可以首先在虚拟机vm_a中安装页表项同步驱动(记为driver)。安装driver的过程中或者在完成安装driver后,driver可以向虚拟机vm_a的操作系统os_a发送注册请求,使得操作系统os_a的内存管理子系统监控依赖os_a运行的应用程序所使用的页表的页表项变更情况,当监控到操作系统os_a管理的页表中存在某个页表项将要被无效或者已经被无效后,分别向driver返回用于指示相应页表项即将或已经发生变更的页表项变更消息。前述内存管理子系统也被表述为内存管理单元(memorymanagementunit,mmu);典型示例中,当操作系统os_a是linux操作系统的情况下,注册请求用于触发内存管理子系统启用linux操作系统mmu_notifer机制中对change_pte的监控能力。39.虚拟机vm_a中启动目标应用程序的非可信部分app_a1时:操作系统os_a将会向非可信部分app_a1分配供其使用的地址空间(记为地址空间q1),进而对应的维护该非可信部分app_a1的第一页表(记为页表a1);非可信部分app_a1将会向操作系统os_a申请目标应用程序所对应的共享内存(记为共享内存q2),并且由操作系统os_a维护共享内存q2的地址信息;除此之外,非可信部分app_a1还可以请求虚拟机监控器预留由目标应用程序的可信部分app_a2使用的地址空间(记为地址空间q3)。前述的地址空间q1、共享内存q2以及地址空间q3均属于虚拟机地址空间。40.举例来说,参见图2所示,操作系统os_a的内存管理子系统例如可以将虚拟地址空间中的页面0~2n-1作为地址空间q1分配给非可信部分app_a1,进而对应的维护该非可信部分app_a1的页表a1;此外还可以基于非可信部分app_a1的申请,将虚拟地址空间中的页面2n~3n-1作为与目标应用程序对应的共享内存q2,并记录该共享内存q2的地址信息以及其与目标应用程序间的对应关系。虚拟机监控器可以基于非可信部分app_a1的申请,预留页面3n~4n-1作为供可信部分app_a2使用的地址空间q3。41.通过虚拟机vm_a在计算设备中创建与目标引用程序对应的tee,并在该tee中启动目标应用程序的可信部分app_a2时,虚拟机监控器则可将虚拟地址空间中对应预留的页面分配给可信部分app_a2,并对应的维护该可信部分app_a2的第二页表(记为页表a2)。例如请继续参见图2,虚拟机监控器可以将预留的页面3n~4n-1作为地址空间q3分配给可信部分app_a2使用,对应的维护如图2中所示的可信部分app_a2的页表a2。42.页表a1和页表a2用于将地址空间q1和地址空间q3中的虚拟地址映射到物理地址。虚拟机监控器中还可以分别维护与页表a1和页表a2对应的扩展页表(extendedpagetables,ept),扩展页表通常也称为ept页表,用于将物理地址映射到真实的机器地址。部分技术场景中也可能通过页表a1和页表a2,将地址空间q1和地址空间q3中的虚拟地址直接映射到真实的机器地址。可以理解的是,图2示例的页表a1和页表a2的数据结构仅用于辅助描述技术方案,实际的计数场景中页表a1和页表a2还可以具有其它数据结构。43.虚拟机vm_a可以将共享内存q2的地址信息发送至虚拟机监控器。例如页表项同步驱动可以从操作系统os_a的内存管理子系统获取并存储共享内存q2的地址信息;然后将共享内存q2的地址信息发送至虚拟机管理器。其中,页表项同步驱动和虚拟机监控器均可以通过区间树或者其它方式,管理其自身配置/存储的共享内存q2的地址信息。44.完成在虚拟机vm_a中启动目标应用程序的非可信部分app_a1,并且在目标应用程序对应的tee中启动目标应用程序的可信部分app_a2后,参见图3所示,计算设备则可以通过其部署的虚拟机vm_a和虚拟机监控器,相互配合的执行如下步骤s301~步骤s315中的部分或全部,使得可信部分app_a2能够和非可信部分app_a1进行通信。45.步骤s301,虚拟机监控器在可信部分app_a2请求访问第一地址而发生缺页错误的情况下,根据共享内存q2的地址信息确定第一地址是否属于共享内存q2。46.可信部分app_a2请求访问属于共享内存q2或者地址空间q3的地址时,均可能发生缺页错误。对于可信部分app_a2请求访问属于地址空间q3的第一地址而发生的缺页错误,可以由虚拟机监控器来处理该缺页错误,例如在页表a2对应生效某个新的页表项。47.可信部分app_a2请求访问属于共享内存q2的第一地址而发生缺页错误时,虚拟机监控器最初为可信部分app_a2创建的页表和/或ept页表并不支持可信部分app_a2对该第一地址的访问,会触发缺页错误,虚拟机监控器将会中断可信部分app_a2的执行,然后通过相应的中断通知将缺页错误注入虚拟机vm_a的操作系统os_a。48.虚拟机监控器还可以记录缺页错误的错误信息,该错误信息中可以包括被中断运行的可信部分app_a2的标识和期望访问的第一地址;第一地址属于共享内存q2时还可以在错误信息中记录指示信息,用于指示对应的缺页错误是因请求访问共享内存q2而产生的。49.当可信部分app_a2请求访问的第一地址属于共享内存q2的情况下,虚拟机监控器可以接着执行步骤s303,向虚拟机vm_a发送缺页错误所对应的中断通知。50.虚拟机监控器通过中断通知来实现将相关缺页错误注入虚拟机vm_a,进而使得虚拟机vm_a可以基于其接收的中断通知获取第一地址。该中断通知可以被直接发送到操作系统os_a的内存管理子系统,内存管理子系统可以根据该中断通知获取第一地址。在一种可能的实施方式中,中断通知中可以携带包括第一地址在内的相关信息,例如携带缺页错误所对应的错误信息。在另一种可能的实施方式中,虚拟机监控器可以将缺页错误对应的错误信息存储到允许虚拟机监控器和虚拟机vm_a访问的共享空间中,内存管理子系统可以基于中断通知对应读取错误信息,进而从缺页错误中获取第一地址。51.虚拟机vm_a获得第一地址后,可以接着执行步骤s305,根据共享内存q2的地址信息确定第一地址是否属于共享内存q2。其中,计算设备中可能包括部署有一个或多个tee,即虚拟机vm_a中可能运行一个或多个应用程序各自的非可信部分,而第一地址并不属于非可信部分的地址空间,因此需要通过步骤s305来确定第一地址所属的共享内存q2。52.虚拟机vm_a在确定出第一地址属于共享内存q2后,例如可以通过操作系统os_a的内存管理子系统,根据其维护的共享内存q2与目标应用程序的对应关系,确定出虚拟机vm_a中运行的属于目标应用程序的非可信部分app_a1,进而确定非可信部分app_a1的页表a1。由此,虚拟机vm_a可以接着执行步骤s307,确定非可信部分app_a1的页表a1中是否已生效第一页表项,第一页表项包括第一地址所属页面p1的地址映射信息。53.继续以前述非可信部分app_a1使用的地址空间q1包括页面0~2n-1为例,可以通过公式p1=int[x/l]计算得到第一地址所属第一页面的页号p1,其中x表征第一地址,l表征单个页面的大小,l通常可以为4k。进而,在操作系统os_a通过其内存管理子系统维护的页表a1中,查询是否已生效页号为p1的第一页面(即页面p1)所对应的第一页表项。[0054]第一页表项可以包括页面p1的地址映射信息。在一种可能的实施方式中,第一页表项在页表a1中的位置可以指示页号p1;第一页表项中明文记录页面p1对应的目标页框的页框号,此外还可以明文记录用于指示第一页表项是否有效的有效位。举例来说,对于长度是32位的单个页表项,其高20位可能用于存储页框号,其低12位中的某个特定位置可能被作为有效位。更具体地,有效位的取值为1时可以表征其所属页表项有效/已生效,此时高20位中可能存储了某个页框号,相应的表征与该页表项对应的页面已被换入;有效位的取值为0时,则可以表征其所属页表项无效/未生效,此时高20位中无论是否存储有页框号,均表征与该页表项对应的页面未被换入。需要特别说明的时,部分技术场景中单个页面的页表项可能并非存储页框号,而是直接指示该页面对应的真实的机器地址。[0055]如果页表a1中已生效第一页表项,则虚拟机vm_a可以直接执行如下步骤s311,否则虚拟机vm_a可以依次执行如下步骤s309和步骤s311。[0056]步骤s309,在非可信部分app_a1的页表a1中生效第一页表项。[0057]生效第一页表项的过程中,可以从物理地址空间中确定出处于空闲态的目标页框,基于确定的目标页框的页框号,在第一页表中生效第一页表项。[0058]步骤s311,向虚拟机监控器发送与中断通知对应的响应消息。[0059]响应消息中可以包括第一页表项中所包括的地址映射信息。或者,虚拟机监控器在接收到响应消息后,可以从第一页表中主动查询第一页表项所包括的地址映射信息。[0060]共享内存q2由虚拟机vm_a的操作系统os_a管理,操作系统os_a可能根据其配置的内存管理策略主动换出属于共享内存q2的页面,即主动无效属于共享内存q2的页面所对应的页表项。为了确保非可信部分app_a1和可信部分app_a2间能够准确的进行通信,在生效属于共享内存q2的页面所对应页表项时,需要先在页表a1中生效该页面所对应的页表项,然后在页表a2中生效该页面所对应的页表项;相反地是,在无效属于共享内存q2的页面所对应页表项时,需要先在页表a2中无效该页面所对应的页表项,然后才在页表a1中生效该页面所对应的页表项;除此之外,需要确保虚拟机监控器在无效页表a2中某个页表项的过程中,禁止在页表a2中生效新的页表项。基于以上考虑,虚拟机监控器中可以维护页表a2对应的第一状态信息,第一状态信息的取值包括第一状态值或第二状态值,第一状态值用于指示允许在页表a2生效新的页表项,第二状态值用于指示禁止在页表a2中生效新的页表项。第一状态信息可以通过引用计数或者状态机进行维护,其中对于如何设置第一状态信息的取值以及该第一状态信息的所起作用,将在下文中详细描述。[0061]如果虚拟机监控器中维护有页表a2对应的第一状态信息,响应于来自虚拟机vm_a的响应消息,虚拟机监控器可以执行如下步骤s313,基于步骤s313的执行结果决策是否继续执行步骤s315。如果虚拟机监控器中并未维护与页表a2对应的第一状态信息,响应于来自虚拟机vm_a的响应消息,虚拟机监控器可以直接执行如下步骤s315。[0062]步骤s313,根据第一状态信息确定是否允许在页表a2中生效新的页表项。[0063]参照前文,当第一状态信息的取值是第一状态值时,表征允许在页表a2中生效新的页表项,此时可以继续执行步骤s315。当第一状态信息的取值是第二状态值时,表征禁止在页表a2中生效新的页表项,此种情况下:计算设备可以由虚拟机监控器陷入虚拟机vm_a,使得虚拟机vm_a按照特定策略重新发送与中断通知对应的响应消息;或者虚拟机监控器可以将其获取的页面p1的地址映射信息加入等待队列,当虚拟机监控器在后续的某个时刻确定出允许在页表a2中生效新的页表项的情况下,才允许继续执行后续步骤s315。[0064]步骤s315,根据页面p1的地址映射信息在页表a2中生效页面p1对应的第二页表项。[0065]参照前文,第二页表项中也应当包括页面p1对应的页框号,此外第二页表项可以直接包括页面p1的页号,或者第二页表项在页表a2中的位置能够指示页面p1的页号,而且第二页表项中的有效位需要被置为表征第二页表项有效的预定数值。如虚拟机监控器中维护有供可信部分app_a2使用的ept页表,虚拟机监控器还需要对应更新该ept页表。[0066]完成在页表a2中生效页面p1对应的第二页表项后,计算设备即可继续执行可信部分app_a2。例如处理器在执行属于可信部分app_a2的指令a时,指令a请求访问属于共享内存q2的第一地址,此时处理器将会中断对指令a的执行;虚拟机监控器完成在页表a2中生效第二页表项后,处理器即可从指令a开始继续执行属于可信部分app_a2的指令。[0067]通过前述过程,位于tee中的可信部分app_a2和位于虚拟机vm_a中的非可信部分app_a1各自使用的页表a2和页表a1中,均已生效共享内存q2中第一地址所属页面p1对应的页表项,可信部分app_a2和非可信部分app_a1则可使用该页面p1进行通信。[0068]前述步骤s301~步骤s315示例性描述了在页表a1和页表a2中,分别生效属于共享内存q2的页面p1对应的页表项的过程。可以理解的是,计算设备可以通过多次的执行与前述步骤s301~步骤s315相同/相似的过程,进而完成在页表a1和页表a2中,各自生效属于共享内存q2的多个页面所对应的多个页表项。[0069]在前述步骤301~步骤315的基础上,共享内存q2由虚拟机vm_a的操作系统os_a管理,操作系统os_a可能期望根据其配置的内存管理策略主动换出属于共享内存q2的第二页面(记为页面p2),即从页表a1中无效页面p2对应的第四页表项,使得页面p2对应的页框能够被用于进行其它事务。为了实现在操作系统os_a期望换出页面p2的情况下,从页表a1和页表a2中分别无效掉页面p2所对应的页表项,避免非可信部分app_a1和app_a2继续访问页面p2而获取到与目标应用程序无关的数据,计算设备可以通过虚拟机vm_a和虚拟机监控器,联合执行如下步骤s401~步骤s423中的部分或全部。[0070]可选地,当虚拟机vm_a中安装有页表项同步驱动的情况下,虚拟机vm_a可以通过页表项同步驱动执行如下步骤s401~步骤s405中的部分或全部。[0071]步骤s401,从虚拟机vm_a的操作系统os_a接收第二起始消息,其中指示操作系统os_a中将要无效的第五页表项所对应的第三页面。[0072]操作系统os_a可以根据其配置的内存管理策略确定待换出的第三页面,第三页面可能属于共享内存q2或者操作系统os_a分配给其它应用程序的虚拟地址空间,例如第三页面可能属于非可信部分app_a1使用的地址空间q1。参照前文注册页表项同步驱动的相关描述可以理解,页表项同步驱动可以监听操作系统os_a无效页表项的事件,例如通过钩子函数invalidatestart监听操作系统os_a中内存管理子系统将要无效页表项的事件,以及通过钩子函数invalidateend监听操作系统os_a已无效页表项的事件。如此,当操作系统os_a期望换出第三页面时,即操作系统os_a将要在其维护的某个页表中无效第三页面所对应的第五页表项时,操作系统os_a可以向页表项同步驱动发送第二起始消息,例如通过调用钩子函数invalidatestart完成发送第二起始消息。[0073]页表项同步驱动监听的是整个操作系统os_a涉及的页表项变更情况,而本方案中只需要关注属于共享内存q2的页面所对应的页表项变更情况。由此,页表项同步驱动可以响应于来自操作系统os_a的第二起始消息,执行步骤s403,根据共享内存q2的地址信息确定第二起始消息指示的第三页面是否为属于共享内存q2的页面p2。[0074]示例性的,页表项同步驱动的钩子函数的invalidatestart被调用时,会先根据其维护的共享内存q2的地址信息,判断操作系统os_a中将要无效的第五页表项所对应的第三页面是否属于共享内存q2。为了方便描述,在将要换出的第三页面属于共享内存q2的情况下,将第三页面区别性的表述为属于共享内存q2的页面p2(即第二页面),并将操作系统os_a中将要无效的该第三页面所对应的第五页表项表述为第四页表项。[0075]第三页面并非属于共享内存q2的页面p2时,页表项同步驱动可以向操作系统os_a提供与第二起始消息对应的返回消息,使得操作系统os_a执行如下步骤s413。[0076]页表项同步驱动可以维护共享内存q2对应的第二状态信息,第二状态信息的取值包括第三状态值或第四状态值,第三状态值用于指示允许更新共享内存q2的地址信息,第四状态值用于指示禁止更新共享内存q2的地址信息。该第一状态信息可以通过引用计数或者状态机进行维护。此种情况下,页表项同步驱动还可以响应于第二起始消息,还可以执行步骤s405,将第二状态信息设置为第四状态值。[0077]当页表项同步驱动通过状态机来维护第二状态信息时,页表项同步驱动在步骤s405中具体可以将第二状态信息的取值,由第三状态值变更为第四状态值。当页表项同步驱动通过引用计数来维护第二状态信息时,页表项同步驱动在步骤s405中具体可以在第二状态信息的当前取值的基础上,执行加1操作以获得新的状态值。需要说明的是,较之于状态机,引用计数能够更加简单方便的实现对第二状态信息进行维护。[0078]当操作系统os_a将要无效属于共享内存q2的页面p2所对应的第四页表项的情况下,虚拟机vm_a可以执行步骤s407,向虚拟机监控器发送第一起始消息,其中指示页面p2。[0079]前述步骤s407中所述的页面p2可以是通过前述步骤s401和步骤s403确定的,此种情况下虚拟机vm_a中具体可以由页表项同步驱动向虚拟机监控器发送第一起始消息。前述步骤s407中所述的页面p2也可以是通过其它方式确定的,例如可以扩展操作系统os_a中内存管理子系统的功能,使得操作系统os_a在将要无效属于共享内存q2的页面p2所对应的第四页表项的情况下,由内存管理子系统完成向虚拟机监控器发送第一起始消息。[0080]当虚拟机监控器中维护有第一状态信息的情况下,响应于来自虚拟机vm_a的第一起始消息,虚拟机监控器可以执行如下步骤s409,将第一状态信息设置为第二状态值。[0081]当虚拟机监控器通过状态机来维护第一状态信息时,虚拟机监控器在步骤s409中具体可以将第一状态信息的取值,由第一状态值变更为第二状态值。当虚拟机监控器通过引用计数来维护第一状态信息时,虚拟机监控器在步骤s409中具体可以在第一状态信息的当前取值的基础上,执行加1操作以获得新的状态值。需要说明的是,较之于状态机,引用计数能够更加简单方便的实现对第一状态信息进行维护。[0082]响应于来自虚拟机vm_a的第一起始消息,虚拟机监控器还可以执行步骤s411,在页表a2中无效页面p2所对应的第三页表项。[0083]虚拟机监控器完成在页表a2中无效页面p2所对应的第三页表项后,可以向虚拟机提供返回信息,使得虚拟机vm_a在该响应消息的触发下执行如下步骤s413。[0084]步骤s413,虚拟机vm_a无效第三页面所对应的第五页表项。当第三页面是属于共享内存q2的页面p2时,步骤s413中实现在页表a1中无效页面p2所对应的第四页表项。[0085]当虚拟机vm_a中安装有页表项同步驱动的情况下,虚拟机vm_a还可以通过页表项同步驱动执行如下步骤s415~步骤s419中的部分或全部。[0086]步骤s415,页表项同步驱动从操作系统os_a接收第二结束消息,其中指示操作系统os_a已无效的第五页表项对应的第三页面。[0087]当操作系统os_a完成换出第三页面时,即完成从操作系统os_a维护的某个页表中无效第三页面所对应的第五页表项时,操作系统os_a可以向页表项同步驱动发送第二结束消息,例如通过调用钩子函数invalidateend完成发送第二结束消息。[0088]页表项同步驱动监听的是整个操作系统os_a涉及的页表项变更情况,而本方案中只需要关注属于共享内存q2的页面所对应的页表项变更情况。由此,页表项同步驱动可以响应于来自操作系统os_a的第二结束消息,执行步骤s417,根据共享内存q2的地址信息确定第二结束消息指示的第三页面是否为属于共享内存q2的页面p2。[0089]页表项同步驱动维护有共享内存q2对应的第二状态信息时,页表项同步驱动还可以响应于第二结束消息,执行步骤s419,将第二状态信息设置为第三状态值。[0090]当页表项同步驱动通过状态机来维护第二状态信息时,页表项同步驱动在步骤s419中具体可以将第二状态信息的取值,由第四状态值变更为第三状态值。当页表项同步驱动通过引用计数来维护第二状态信息时,页表项同步驱动在步骤s419中具体可以在第二状态信息的当前取值的基础上,执行减1操作以获得新的状态值。[0091]当虚拟机vm_a完成无效属于共享内存q2的页面p2后,虚拟机vm_a可以执行步骤s421,向虚拟机监控器发送第一结束消息,其中指示页面p2。[0092]当页表项同步驱动通过步骤s419实现根据共享内存q2的地址信息确定第二结束消息指示的第三页面为属于共享内存q2的页面p2时,虚拟机vm_a中可以由页表项同步驱动执行步骤s421。或者,可以扩展操作系统os_a中内存管理子系统的功能,使得内存管理子系统在已完成无效页面p2所对应的第四页表项的情况下,执行步骤s421。[0093]虚拟机监控器响应于第一结束消息,执行步骤s423,将第一状态信息设置为表征允许在页表a2中生效新的页表项的第一状态值。[0094]当虚拟机监控器通过状态机来维护第一状态信息时,虚拟机监控器在步骤s423中具体可以将第一状态信息的取值,由第二状态值变更为第一状态值。当虚拟机监控器通过引用计数来维护第一状态信息时,虚拟机监控器在步骤s423中具体可以在第一状态信息的当前取值的基础上,执行减1操作以获得新的状态值。[0095]如果允许计算设备中并发执行生效页面p1所对应的页面项和无效页面p2所对应的页表项,当页面p1和页面p2属于相同页面时,则可能导致非可信部分app_a1和可信部分app_a2无法准确的进行通信。参见图5所示,假设计算设备在t1时刻完成在页表a1中生效页面p1对应的第一页表项,在t2时刻完成在页面a2中无效页面p2对应的第三页表项,在t3时刻完成在页表a2中生效页面p1所对应的第二页表项,在t4时刻完成在页表a1中无效页面p2对应的第四页表项。当页面p1和页面p2是相同页面px时,虚拟机监控器在t3时刻生效的第二页表项中所包括的地址映射信息,相同于即将在t4时刻被无效的第四页表项中所包括的地址映射信息,此种情况下可能导致可信部分app_a2使用页面px来接收或发送其期望与非可信部分app_a1交换的数据,而非可信部分app_a1却并不能访问页面px,从而导致可信部分app_a2和非可信部分app_a1无法准确进行通信。[0096]前述图3和图4所示的各个方法实施例中,通过在虚拟机监控器中按照相应的策略维护与页表a2对应的第一状态信息,第一状态信息的取值可以指示是否允许在页表a2中生效新的页表项,进而避免计算设备并发执行生效和无效相同页面所对应的页面项,确保目标应用程序的非可信部分app_a1和可信部分app_a2能够准确进行通信。[0097]当虚拟机vm_a中通过页表项同步驱动维护有共享内存的地址信息和第二状态信息的情况下,计算设备还可以通过其虚拟机vm_a和虚拟机监控器联合执行如下步骤s601~步骤s609中的部分或全部,实现动态调整目标应用程序对应的共享内存q2的大小。[0098]步骤s601,虚拟机vm_a获取地址更新请求,用于请求更新共享内存q2的地址信息。[0099]地址更新请求可以由非可信部分app_a1发起,或者也可以由操作系统os_a根据其配置的内存管理策略发起,例如非可信部分app_a1或操作系统os_a可以在发现共享内存q2中长时间存在多个页面未被换入时,可以发起第一地址更新请求,用于请求从共享内存的地址信息中删除该多个页面所对应的内存地址,以便减少共享内存q2;再如非可信部分app_a1或操作系统os_a可以在发现共享内存q2的占用率在较长的时间段内持续大于预设数值时,可以发起第二地址更新请求,用于请求在共享内存的地址信息中增加当前并不属于共享内存q2的一个或多个页面的内存地址,以便增大共享内存q2。[0100]步骤s603,虚拟机vm_a根据共享内存q2对应的第二状态信息,确定是否允许更新共享内存q2的地址信息。[0101]如果允许更新共享内存q2的地址信息,虚拟机vm_a可以执行步骤s605和步骤s607。[0102]步骤s605,根据地址更新请求,更新虚拟机vm_a中配置的共享内存q2的地址信息。[0103]步骤s607,向虚拟机监控器发送与地址更新请求对应的地址更新通知。[0104]步骤s609,虚拟机监控器根据地址更新通知更新其配置共享内存q2的地址信息。[0105]前述步骤s601~步骤s607中的部分或全部可以由页表项同步驱动执行。例如,页表项同步驱动可以劫持由非可信部分app_a1向操作系统os_a发起的地址更新请求,进而在确定允许更新共享内存q2的地址信息的情况下,向操作系统os_a例如向操作系统os_a中的内存管理子系统转发该地址更新请求,使得操作系统os_a根据该地址更新请求更新其维护的共享内存q2的地址信息,并将更新后的共享内存q2的地址信息返回给页表项同步驱动;进而,页表项同步驱动可以将其自身维护的共享内存q2的地址信息,更新为来自操作系统os_a的更新后的共享内存q2的地址信息,并通过地址更新通知将更新后的共享内存q2的地址信息发送给虚拟机监控器。[0106]前述步骤s601~步骤s607中的部分或全部可以由操作系统os_a执行。例如,可以扩展操作系统os_a中内存管理子系统的功能,内存管理子系统可以根据其自身配置的内存管理策略产生地址更新请求,或者接收由非可信部分app_a1发起的内存更新请求,进而在确定允许更新共享内存q2的地址信息的情况下,根据地址更新请求更新由操作系统os_a和页表项同步驱动中维护的共享内存q2的地址信息,直接的或者通过页表项同步驱动间接的向虚拟机监控器发送地址更新通知,其中包括更新后的共享内存q2的地址信息。[0107]如果允许计算设备中并发执行更新共享内存q2的地址信息和无效页面p2所对应的页表项,当根据地址更新请求在共享内存q2中增加或删除的至少一个页面中,包括前述步骤s401中所述的第三页面时,则可能导致虚拟机监控器无法正常的维护第一状态信息。[0108]参见图7所示,假设页表项同步驱动在t5时刻从操作系统os_a接收第二起始消息,虚拟机vm_a在t6时刻根据地址更新请求,在其维护的共享内存q2的地址信息中增加或删除至少一个页面的地址信息,页表项同步驱动在t7时刻从操作系统os_a接收第二结束消息,并且增加或删除的至少一个页面的地址信息中包括第三页面的地址信息。[0109]第一方面,如果t6时刻删除的至少一个页面的地址信息中包括第三页面的地址信息,则:页表项同步驱动在t5时刻维护的共享内存q2的地址信息中,包括第二起始消息所指示的第三页面的地址信息,此时第三页面将会被确定为属于共享内存q2的页面p2,虚拟机监控器中与共享内存q2对应的第一状态信息的取值,将会被设置为第二状态值;然而,页表项同步驱动在t7时刻维护的共享内存q2的地址信息中,则可能并不包括第三页面的地址信息,第二结束消息所指示的第三页面不会被确定为属于共享内存q2的页面p2,虚拟机监控器中与共享内存q2对应的第一状态信息的取值,不会被重新设置为第一状态值,导致第一状态信息的取值无法准确的指示是否允许在页表a2中新增新的页表项。[0110]第二方面,如果t6时刻新增的至少一个页面的地址信息中包括第三页面的地址信息,并且虚拟机监控器通过引用计数来维护第一状态信息的取值,则:页表项同步驱动在t5时刻维护的共享内存q2的地址信息中,并不包括第二起始消息所指示的第三页面的地址信息,第三页面不会被确定为属于共享内存q2的页面p2,虚拟机监控器中与共享内存q2对应的第一状态信息的取值,不会在第一状态值的基础上被虚拟机监控器执行加1操作而变更为第二状态值;然而,页表项同步驱动在t7时刻维护的共享内存q2的地址信息中包括第三页面的地址信息,第二结束消息所指示的第三页面会被确定为属于共享内存q2的页面p2,虚拟机监控器中与共享内存q2对应的第一状态信息的取值,将会在第一状态值的基础上被虚拟机监控器执行减1操作,从而变更为不同于第一状态值和第二状态值的其它状态值,导致第一状态信息的取值无法正常的指示是否允许在页表a2中新增新的页表项。[0111]前述图3、图4和图6所示的各个方法实施例中,通过页表项同步驱动实现按照相应的策略维护与共享内存q2对应的第二状态信息,第二状态信息的取值可以指示是否允许更新共享内存q2的地址信息,进而避免计算设备并发执行更新共享内存q2的地址信息和无效属于共享内存q2的页面所对应的页表项,确保虚拟机监控器维护的第一状态信息能够准确指示是否允许在页表a2中生效新的页表项,进而确保目标应用程序的非可信部分app_a1和可信部分app_a2能够准确进行通信。[0112]前述图3、图4和图6所示的各个方法实施例中,对于虚拟机vm_a执行的任意的单个方法步骤,在未限定其可以或需要由页表项同步驱动执行的情况下,该方法步骤通常可以由虚拟机vm_a的操作系统os_a执行,例如由操作系统os_a的内存管理子系统执行。[0113]与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种虚拟机监控器800。参见图8所示,所述虚拟机监控器800部署在计算设备中,所述计算设备中还部署有虚拟机和tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器800中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述虚拟机监控器800包括:缺页处理单元801,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知,使得所述虚拟机在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;页表管理单元803,配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效第二页表项。[0114]与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种计算设备900。参见图9所示,所述计算设备900中部署有虚拟机监控器901、虚拟机903和tee905,所述虚拟机903和所述tee905中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机903和所述虚拟机监控器901中配置有共享内存的地址信息,所述虚拟机903维护所述非可信部分的第一页表,所述虚拟机监控器901维护所述可信部分的第二页表;其中:所述虚拟机监控器901,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知;所述虚拟机903,配置为响应于所述中断通知,在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;所述虚拟机监控器901,还配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项。[0115]在一种可能的实施方式中,所述虚拟机监控器901维护有第一状态信息,所述第一状态信息的取值包括第一状态值或第二状态值,所述第一状态值用于指示允许在所述第二页表中生效新的页表项,所述第二状态值用于指示禁止在所述第二页表中生效新的页表项;所述虚拟机监控器901,还配置为根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项之前,根据所述第一状态信息确定是否允许生效所述第二页表项。[0116]在一种可能的实施方式中,所述虚拟机903,还配置为向所述虚拟机监控器发送第一起始消息,其中指示所述虚拟机监控器将要无效的第三页表项所对应的第二页面,所述第二页面属于所述共享内存;所述虚拟机监控器901,还配置为将所述第一状态信息设置为所述第二状态值,并在所述第二页表中无效所述第二页面对应的第三页表项;所述虚拟机903,还配置为在所述第一页表中无效所述第二页面对应的第四页表项,并向所述虚拟机监控器发送第一结束消息;所述虚拟机监控器901,还配置为响应于所述第一结束消息,将所述第一状态信息设置为所述第一状态值。[0117]在一种可能的实施方式中,所述虚拟机903包括操作系统9031和页表项同步驱动9033;所述页表项同步驱动9033,配置为从所述操作系统9031接收第二起始消息,其中指示所述操作系统9031将要无效的第五页表项对应的第三页面;所述页表项同步驱动9033,还配置为响应于所述第二起始消息,根据所述地址信息确定所述第二起始消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动9033,还配置为在所述第二起始消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器901发送第一起始消息。[0118]在一种可能的实施方式中,所述页表项同步驱动9033,还配置为从所述操作系统9031接收第二结束消息,其中指示所述操作系统9031已无效的第五页表项对应的第三页面;所述页表项同步驱动9033,还配置为响应于所述第二结束消息,根据所述地址信息确定所述第二结束消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动9033,还配置为在所述第二结束消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器901发送第一起始消息。[0119]在一种可能的实施方式中,所述页表项同步驱动9033维护有第二状态信息,所述第二状态信息的取值包括第三状态值或第四状态值,所述第三状态值用于指示允许更新所述共享内存的地址信息,所述第四状态值用于指示禁止更新所述共享内存的地址信息;所述页表项同步驱动9033,还配置为响应于所述第二起始消息,将所述第二状态信息设置为所述第四状态值;以及,还配置为响应于所述第二结束消息,将所述第二状态信息设置为所述第三状态值。[0120]在一种可能的实施方式中,所述虚拟机903,还配置为获取地址更新请求,用于请求更新所述共享内存的地址信息;根据所述第二状态信息确定是否允许更新所述共享内存的地址信息;在允许更新所述共享内存的地址信息的情况下,根据所述地址更新请求更新所述虚拟机中配置的所述共享内存的地址信息,以及向所述虚拟机监控器发送与所述地址更新请求对应的地址更新通知;所述虚拟机监控器901,还配置为根据所述地址更新通知更新其配置的所述共享内存的地址信息。[0121]本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令/代码进行传输,以便这些功能所对应的计算机程序被计算机执行时,通过计算机实现本说明书任意一个实施例中所述的方法。[0122]本说明书实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序/指令,当所述计算机程序/指令在计算设备中执行时,计算设备执行本说明书任意一个实施例中提供的由虚拟机或者虚拟机监控器所执行的方法步骤。[0123]本说明书实施例中还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序/指令,所述处理器执行所述计算机程序/指令时,实现本说明书任意一个实施例中提供的由虚拟机或者虚拟机监控器所执行的方法步骤。[0124]本说明书中的各个实施例均采用递进的方式描述,各个实施例中相同、相似的部分互相参见即可,每个实施例中重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。[0125]上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。[0126]以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。[0127]本说明书实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者多个该特征。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。当前第1页12当前第1页12
技术特征:
1.一种计算设备中共享内存的管理方法,所述计算设备中部署有虚拟机监控器、虚拟机和可信执行环境tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述方法包括:所述虚拟机监控器在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知;所述虚拟机响应于所述中断通知,在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;所述虚拟机监控器响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效第二页表项。2.根据权利要求1所述的方法,所述虚拟机监控器维护有第一状态信息,所述第一状态信息的取值包括第一状态值或第二状态值,所述第一状态值用于指示允许在所述第二页表中生效新的页表项,所述第二状态值用于指示禁止在所述第二页表中生效新的页表项;其中,在根据所述地址映射信息在所述第二页表中生效第二页表项之前,所述方法还包括:根据所述第一状态信息确定是否允许生效所述第二页表项。3.根据权利要求2所述的方法,所述方法还包括:所述虚拟机向所述虚拟机监控器发送第一起始消息,其中指示所述虚拟机监控器将要无效的第三页表项所对应的第二页面,所述第二页面属于所述共享内存;所述虚拟机监控器将所述第一状态信息设置为所述第二状态值,并在所述第二页表中无效所述第二页面对应的第三页表项;所述虚拟机在所述第一页表中无效所述第二页面对应的第四页表项,并向所述虚拟机监控器发送第一结束消息;所述虚拟机监控器响应于所述第一结束消息,将所述第一状态信息设置为所述第一状态值。4.根据权利要求3所述的方法,所述虚拟机包括操作系统和页表项同步驱动;其中,所述方法还包括:所述页表项同步驱动从所述操作系统接收第二起始消息,其中指示所述操作系统将要无效的第五页表项对应的第三页面;所述页表项同步驱动响应于所述第二起始消息,根据所述地址信息确定所述第二起始消息所指示的第三页面是否为属于所述共享内存的第二页面;所述向所述虚拟机监控器发送第一起始消息,包括:在所述第二起始消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。5.根据权利要求4所述的方法,所述方法还包括:所述页表项同步驱动从所述操作系统接收第二结束消息,其中指示所述操作系统已无效的第五页表项对应的第三页面;
所述页表项同步驱动响应于所述第二结束消息,根据所述地址信息确定所述第二结束消息所指示的第三页面是否为属于所述共享内存的第二页面;所述向所述虚拟机监控器发送第一结束消息,包括:在所述第二结束消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。6.根据权利要求5所述的方法,所述页表项同步驱动维护有第二状态信息,所述第二状态信息的取值包括第三状态值或第四状态值,所述第三状态值用于指示允许更新所述共享内存的地址信息,所述第四状态值用于指示禁止更新所述共享内存的地址信息;其中,所述方法还包括:所述页表项同步驱动响应于所述第二起始消息,将所述第二状态信息设置为所述第四状态值;所述页表项同步驱动响应于所述第二结束消息,将所述第二状态信息设置为所述第三状态值。7.根据权利要求6所述的方法,所述方法还包括:所述虚拟机获取地址更新请求,用于请求更新所述共享内存的地址信息;所述虚拟机根据所述第二状态信息确定是否允许更新所述共享内存的地址信息;所述虚拟机在允许更新所述共享内存的地址信息的情况下,根据所述地址更新请求更新所述虚拟机中配置的所述共享内存的地址信息,以及向所述虚拟机监控器发送与所述地址更新请求对应的地址更新通知;所述虚拟机监控器根据所述地址更新通知更新其配置的所述共享内存的地址信息。8.一种计算设备中共享内存的管理方法,所述计算设备中部署有虚拟机监控器、虚拟机和可信执行环境tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述方法由所述虚拟机监控器执行,所述方法包括:在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知,使得所述虚拟机在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效第二页表项。9.一种虚拟机监控器,所述虚拟机监控器部署在计算设备中,所述计算设备中还部署有虚拟机和可信执行环境tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;所述虚拟机监控器包括:缺页处理单元,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知,使得所述虚拟机在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;
页表管理单元,配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效第二页表项。10.一种计算设备,所述计算设备中部署有虚拟机监控器、虚拟机和可信执行环境tee,所述虚拟机和所述tee中分别运行有目标应用程序的非可信部分和可信部分,所述虚拟机和所述虚拟机监控器中配置有共享内存的地址信息,所述虚拟机维护所述非可信部分的第一页表,所述虚拟机监控器维护所述可信部分的第二页表;其中:所述虚拟机监控器,配置为在所述可信部分请求访问第一地址而发生缺页错误的情况下,根据所述地址信息确定所述第一地址是否属于所述共享内存,如果是则向所述虚拟机发送中断通知;所述虚拟机,配置为响应于所述中断通知,在根据所述地址信息确定出所述第一地址属于所述共享内存的情况下,确保所述第一页表中已生效第一页表项,并向所述虚拟机监控器返回响应消息,所述第一页表项包括所述第一地址所属第一页面的地址映射信息;所述虚拟机监控器,还配置为响应于所述响应消息,根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项。11.根据权利要求10所述的计算设备,所述虚拟机监控器维护有第一状态信息,所述第一状态信息的取值包括第一状态值或第二状态值,所述第一状态值用于指示允许在所述第二页表中生效新的页表项,所述第二状态值用于指示禁止在所述第二页表中生效新的页表项;其中,所述虚拟机监控器,还配置为根据所述地址映射信息在所述第二页表中生效所述第一页面对应的第二页表项之前,根据所述第一状态信息确定是否允许生效所述第二页表项。12.根据权利要求11所述的计算设备,其中:所述虚拟机,还配置为向所述虚拟机监控器发送第一起始消息,其中指示所述虚拟机监控器将要无效的第三页表项所对应的第二页面,所述第二页面属于所述共享内存;所述虚拟机监控器,还配置为将所述第一状态信息设置为所述第二状态值,并在所述第二页表中无效所述第二页面对应的第三页表项;所述虚拟机,还配置为在所述第一页表中无效所述第二页面对应的第四页表项,并向所述虚拟机监控器发送第一结束消息;所述虚拟机监控器,还配置为响应于所述第一结束消息,将所述第一状态信息设置为所述第一状态值。13.根据权利要求12所述的计算设备,所述虚拟机包括操作系统和页表项同步驱动;所述页表项同步驱动,配置为从所述操作系统接收第二起始消息,其中指示所述操作系统将要无效的第五页表项对应的第三页面;所述页表项同步驱动,还配置为响应于所述第二起始消息,根据所述地址信息确定所述第二起始消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动,还配置为在所述第二起始消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。14.根据权利要求13所述的计算设备,其中:所述页表项同步驱动,还配置为从所述操作系统接收第二结束消息,其中指示所述操作系统已无效的第五页表项对应的第三页面;
所述页表项同步驱动,还配置为响应于所述第二结束消息,根据所述地址信息确定所述第二结束消息所指示的第三页面是否为属于所述共享内存的第二页面;所述页表同步驱动,还配置为在所述第二结束消息所指示的第三页面是属于所述共享内存的第二页面的情况下,向所述虚拟机监控器发送第一起始消息。15.根据权利要求14所述的计算设备,所述页表项同步驱动维护有第二状态信息,所述第二状态信息的取值包括第三状态值或第四状态值,所述第三状态值用于指示允许更新所述共享内存的地址信息,所述第四状态值用于指示禁止更新所述共享内存的地址信息;其中,所述页表项同步驱动,还配置为响应于所述第二起始消息,将所述第二状态信息设置为所述第四状态值;以及,还配置为响应于所述第二结束消息,将所述第二状态信息设置为所述第三状态值。16.根据权利要求15所述的计算设备,其中:所述虚拟机,还配置为获取地址更新请求,用于请求更新所述共享内存的地址信息;根据所述第二状态信息确定是否允许更新所述共享内存的地址信息;在允许更新所述共享内存的地址信息的情况下,根据所述地址更新请求更新所述虚拟机中配置的所述共享内存的地址信息,以及向所述虚拟机监控器发送与所述地址更新请求对应的地址更新通知;所述虚拟机监控器,还配置为根据所述地址更新通知更新其配置的所述共享内存的地址信息。
技术总结
一种共享内存的管理方法、虚拟机监控器和计算设备,计算设备中部署虚拟机监控器、虚拟机和TEE,虚拟机和TEE中各自运行目标应用程序的非可信部分和可信部分;虚拟机和虚拟机监控器中配置有共享内存的地址信息,分别维护有非可信部分的第一页表和可信部分的第二页表。虚拟机监控器在可信部分请求访问第一地址而发生缺页错误,并且根据地址信息确定第一地址属于共享内存时,向虚拟机发送中断通知,使得虚拟机在根据地址信息确定出第一地址属于共享内存后,确保第一页表中已生效第一页表项,并向虚拟机监控器返回响应消息,第一页表项包括第一地址所属第一页面的地址映射信息;相应的是虚拟机监控器可以根据地址映射信息在第二页表中生效第二页表项。页表中生效第二页表项。页表中生效第二页表项。
技术研发人员:徐依凌 刘双 段然 闫守孟
受保护的技术使用者:支付宝(杭州)信息技术有限公司
技术研发日:2023.06.01
技术公布日:2023/9/5
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
