一种在虚拟化技术中管理内存的方法与流程

文档序号:13421503阅读:258来源:国知局
本发明涉及虚拟化、内存隔离领域,尤其是涉及针对虚拟化技术中的内存保护方案。
背景技术
::随着大数据的日益增长,云计算的需求也呈现爆发式增长。在云计算中,虚拟化技术起着核心作用,虚拟化的好坏关系着客户机(guestos)的稳定、性能和安全;虚拟化中的安全涉及到内存、存储、io等各个方面,其中对内存的保护格外重要,内存保护能够防止虚拟化中各个客户机之间的数据窃取,增加客户机的安全性。在目前主流的虚拟化方案中,客户机的内存是直接从宿主机系统中分配出来的,没有进行安全保护,例如,在基于arm架构的虚拟化中,不同的客户机使用一块共享的物理内存,无法做到不同客户机之间的内存隔离。另外,最近也出现一些基于内存加密技术的内存保护方案,例如,在amd的虚拟化方案sev中采用对内存加密的方式实现宿主机上不同客户机的内存保护。加密方式会降低客户机的性能,任何内存中的数据都需要经过解密才能使用,并且加密方式依赖于加密算法实现的好坏,不好的加解密算法实现容易受到侧信道攻击,另外,基于内存加密的内存保护方案无法保证内存数据的完整性,恶意代码可能通过篡改密文数据来干扰客户机。技术实现要素:本发明的目的在于,采用物理隔离的方法,解决虚拟化中对内存数据的软件攻击。和内存加密技术相比,本发明可以阻止恶意软件对加密过程的侧信道攻击,并且有效消除由于内存加密而引起的性能下降问题。同时,本发明中的内存隔离方案也可以防止虚拟机监控器(virtualmachinemonitor,vmm)、kernel等系统软件对客户虚拟机guestos的数据窃取,增加了虚拟化中guestos的安全性。为实现上述目的,本发明提供了获取客户虚拟机的状态信息;获取客户虚拟机要求访问的内存的物理地址;根据物理地址查询用于记录各个内存页面的访问权限属性的线性映射表,获取所属物理地址所在页面的访问权限属性;将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问。优选地,该方法还包括:在获取客户虚拟机的状态信息后,获取安全处理器sp和虚拟机监控器vmm的状态信息。优选地,物理地址是客户虚拟机发出的虚拟地址经过内存映射单元转化得到的。优选地,客户虚拟机状态信息包括该虚拟机的vmid,即第一vmid,访问权限属性包括允许访问该内存页面的客户虚拟机的vmid,即第二vmid;将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问包括:判断第一vmid与第二vmid是否相等,如果相等,则允许本次访问。优选地,线性映射包括:根据内存地址的从低到高,以映射表的第一项至最后一项,来对整个内存进行一一映射。优选地,线性映射表保存在一块物理连续的内存中。优选地,线性映射表中的表项有三种状态:未初始化状态、空闲状态和使用状态;在未初始化状态下,表项中的内容为随机值或不可信的值;在空闲状态下,线性映射表中的内容为默认值;在使用状态下,表项中的访问权限正在保护所对应的客户虚拟机。进一步优选地,根据虚拟机监控器vmm的行为改变线性映射表中表项的状态,改变线性映射表的状态包括:当vmm初始化时,线性映射表中的内容被设置为初始值,同时,将线性映射表设置为只有安全处理器sp可以访问;当vmm启动一个客户虚拟机时,sp将客户虚拟机所使用的物理内存对应的表项的空闲状态修改为使用状态;当vmm关闭一个客户虚拟机时,由sp清除线性映射表中表项的内容,设置为初始值,将性映射表中表项的使用状态修改为空闲状态。本发明的有益效果是:本发明通过一种在虚拟机系统中管理内存的方法,实现了虚拟化中不同客户虚拟机之间的内存物理隔离,和内存加密技术相比较,省去了加密过程带来的性能下降,提高了虚拟化的性能,同时也消除了黑客对加解密算法中的侧信道攻击,提高了guestos的安全性和性能。附图说明图1为本发明实施例提供的一种在虚拟机化技术中管理内存方法流程示意图;图2为本发明实施例提供的一种在虚拟机化技术中管理内存工作过程示意图;图3为本发明实施例提供的一种两个客户虚拟机对不同物理地址的访问示意图;图4为本发明实施例提供的一种sp、vmm、mpmu和lmat的关系示意图;图5为本发明实施例提供的一种增加只读、不可执行属性的lmat示例图;图6为本发明实施例提供的一种增加虚拟化客户物理地址的lmat示例图;图7为本发明实施例提供的一种增加guestos内部线程threadid的lmat示例图;图8为本发明实施例提供的一种lmat三种状态的转换示意图。具体实施方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。图1为本发明实施例提供的一种在虚拟机系统中管理内存的方法流程示意图;如图1所示,该方法包括:步骤s101:获取客户虚拟机的状态信息;步骤s102:获取客户虚拟机要求访问的内存的物理地址;步骤s103:根据物理地址查询用于记录各个内存页面的访问权限属性的线性映射表,获取所属物理地址所在页面的访问权限属性;步骤s104:将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问。具体的,该方法还包括:在获取客户虚拟机的状态信息后,获取安全处理器sp和虚拟机监控器vmm的状态信息。具体的,物理地址是虚拟机发出的虚拟地址经过内存映射单元转化得到的。具体的,客户虚拟机状态信息包括该虚拟机的vmid,即第一vmid,访问权限属性包括允许访问该内存页面的客户虚拟机的vmid,即第二vmid;将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问包括:判断第一vmid与第二vmid是否相等,如果相等,则允许本次访问。具体的,线性映射表用于将内存进行线性映射,记录各个物理地址对应的访问权限属性。具体的,线性映射包括:根据内存地址的从低到高,以映射表的第一项至最后一项,来对整个内存进行一一映射。图2为本发明实施例提供的一种虚拟机系统管理内存工作过程示意图。如图2所示,该实施例中的lmat为线性属性映射表(linearmapattributetable,lmat)108,中央处理器(centralprocessingunit,cpu)103上运行有一个或多个客户虚拟机,客户虚拟机101、客户虚拟机102代表虚拟化中两个不同的客户操作系统guestos;相应地,在图1的步骤s101,客户虚拟机101发出的虚拟地址112经过虚拟地址映射单元或内存映射单元105转换为物理地址114,该转换的过程可能涉及到转换检测缓冲区(translationlookasidebuffer,tlb)查询、系统页表查询以及虚拟化中嵌套页表(nestedpagetable)的查询等,本领域技术人员已知该转换过程,不再赘述。相应地,在图1的步骤s102,权限管理逻辑电路(memorypermissionmanagementunit,mpmu)107就可以获取到转换后的物理地址114和当前cpu中发起内存访问的虚拟机vmid113信息;其中,被访问的物理地址114位于系统内存中的第n个页面page111中,该page在lmat108中的映射为index110;在图1的步骤s103,mpmu107根据物理地址114读取index110中的内容,即物理地址所在页面对应线性映射表中的访问权限属性信息,并在步骤s104,和当前的虚拟机的状态信息行匹配,根据对比的结果允许或拒绝本次内存访问;如果允许访问,则mpmu107将该访问信号发给内存控制器106,通过内存控制器106对内存109进行读、写操作。为了增加线性属性映射表的安全性,只允许soc中的安全处理器104对线性属性映射表lmat108进行数据更新以及清除等操作。具体地,lmat将系统内存(ddr)以物理页面为单位进行映射,lmat中的每一项对应ddr中的一个物理页面(page),并包含了该page所属guestos的状态信息。线性映射是指根据内存地址的从低到高,以线性映射表的第一项至最后一项,来对整个系统内存进行一一映射。lmat的大小由系统内存大小、系统一个page的大小以及lmat中一个tableindex的大小共同决定。给定任意一个内存物理地址,都能以物理页面单位索引到该地址在系统内存中的index,该index即与该内存地址对应的lmat中的index相等。例如系统内存的起始物理地址为start_address,一个page的大小为page_size,则给定任意物理地址physical_address,在lmat中的index可以通过以下公式计算:图3为本发明实施例提供的一种两个客户虚拟机对不同物理地址的访问示意图,如图3所示,guestos201和guestos202分别发起对物理地址210和物理地址211的访问。mpmu205获取上述物理地址210和211,以及两个虚拟机的id,然后根据物理地址和虚拟机的vmid,查询lmat207,同时lmat207中vmid208和vmid209分别映射了物理地址210和物理地址211,并分别写入了guestos201和guestos202的vmid。为了实现不同guestos之间的内存共享以及虚拟机监控器(virtualmachinemonitor,vmm)专属内存,可以在lmat的tableindex中定义一些特殊用途的vmid。表1为一个包含有特殊用途的vmid分级示例表。表1:包含特殊用途的8位vmid实例在上表中,访问权限属性用特定的vmid指示出特出的内存访问权限属性,例如用属性值254指示出对应页面为共享页面,所有客户虚拟机均可访问;用属性值255指示出对应页面仅可以由安全处理器sp来操作。相应地,在映射表包括指示出共享内存的属性值的情况下,guestos和vmm之间,不同guestos之间共享内存的方法包括:判断请求访问的页面对应的访问权限属性值,即第二vmid,是否等于上述指示共享内存的属性值,如果是,则不需要mpmu的裁决可直接允许本次内存访问。在一个实施例中,映射表保存在一块物理连续的存储空间中;该存储空间从系统内存中或片内随机存储器sram中预留。本发明的实施例中,需要使用一块物理连续的内存空间保存lmat。该连续内存所处的位置不受限制,或存在于soc的片内sram中,或直接从系统内存中预留出。同时,为了加速mpmu对lmat的读取速度,mpmu内部可以现一个cache缓存机制,将频繁使用的lmattableindex缓存至mpmu内部,以加快mpmu的裁决速度。同时,为了增加lmat的安全性,防止恶意代码对lmat的篡改,该lmat所属的内存空间只允许安全处理器secureprocessor(sp)进行改写,并且sp和vmm之间通过一套认证机制来保证合法的vmm向sp发起修改、更新lmat的操作。图4为本发明实施例提供的一种amd-sp、vmm、mpmu和lmat的关系示意图。lmat中tableindex的内容可以根据需求而进行扩展。例如,在某些guestos中,需要一些只读和不可执行的内存,可以扩展tableindex增加r、x两个bit。图5为本发明实施例提供的一种增加只读、不可执行属性的lmat示例图;图6为本发明实施例提供的一种增加虚拟化客户物理地址(guestphysicaladdress)的lmat示例图;图7为本发明实施例提供的一种增加guestos内部threadid的lmat示例图。lmat中的每一个index有三种状态:未初始化状态、空闲状态和使用状态:(1)未初始化状态,指系统启动时,lmat中的内容为随机值或不可信的值,此时mpmu也处于未初始化状态,cpu对内存的访问将绕过mpmu的裁决逻辑;(2)空闲状态,指lmat中的内容为默认值,例如0,表示该index对应的page不属于任何guestos;(3)使用状态,指lmat中index对应page分配给某一guestos,正在被该guestos使用。图8为lmat这三种状态转换的状态图。相应地,本发明实施例的方法还包括,根据虚拟机监控器vmm的行为改变线性映射表中不同index的状态:当vmm初始化时,安全处理器sp将线性映射表中的内容初始化为初始值,同时,sp进行将线性映射表设置为只有sp可以访问;具体的,当vmm初始化时,cpu将lmat的起始地址发送给sp,sp根据该地址将lmat中的内容初始化为初始值,同时,sp进行一定的权限配置将lmat设置为只有sp可以访问的空间。另外,cpu也会根据lmat的起始地址对mpmu进行初始化,使mpmu生效。当vmm启动一个客户虚拟机时,sp将映射表中对应空闲状态修改为使用状态;进一步具体的,当vmm启动一个guestos时,从系统中分配内存给该guestos使用。cpu根据这些内存的物理地址,计算出在lmat中的索引项index,并将这些index和guestos的vmid发送给sp,sp根据vmid修改lmat中的index。当vmm关闭一个客户虚拟机时,由sp清除线性映射表中的对应index,将性映射表中对应使用状态修改为空闲状态。进一步具体的,当vmm关闭一个guestos时,释放该guestos使用的内存。同样,cpu将这些内存的物理地址对应的index发送供sp,由sp清除lmat中的对应index。以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1