虚拟机的模拟方法和计算机设备的制作方法

文档序号:6367596阅读:109来源:国知局
专利名称:虚拟机的模拟方法和计算机设备的制作方法
技术领域
本发明涉及计算机系统结构、虚拟机技术领域,尤其涉及一种虚拟机的模拟方法和计算机设备。
背景技术
旁路转换缓冲(Translation Look-aside Buffer, TLB)模拟对虚拟机的性能有关键性影响,在CPU执行的所有指令中,超过50 %的指令是访存指令。现在一般CPU均支持虚 拟存储机制,即指令中含有的逻辑地址经过页表转换为物理地址。TLB即为用于加速页表转换的硬件支持部件,具有较高的执行频率。当前虚拟机中主要采用纯软件的方法实现TLB模拟。在开源虚拟机系统(例如Bochs,QEMU等)中,均以纯软件方法模拟虚拟机系统中TLB的执行机制,包括遍历TLB表项;判断表项是否匹配输入的虚拟地址;如果命中,返回表项中包含的物理地址;如果不命中,执行异常处理。纯软件的模拟方法具有良好的可移植性,但是引入了较高的模拟代价对于目标CPU执行的一条访存指令,用于模拟TLB查找算法所需要的模拟指令一般至少几十条。在对虚拟机性能有较高要求的场合,TLB模拟环节容易形式性能瓶颈。为了克服纯软件方法的缺点,某些虚拟机采用硬件模拟方式,以本地物理TLB模拟目标TLB,这种模拟方法主要用于同体系结构的虚拟机(例如Vmware、VirtualBox, KVM等),即本地CPU的TLB中保存目标系统中应用程序的页表快照,以本地CPU直接执行目标CPU的访存指令。硬件模拟方式比纯软件方法具有突出的效率优势,但是限制了可移植性,只能在相同体系结构的虚拟机中才能使用。对于异构虚拟机,由于无法在本地CPU上直接执行目标体系结构的访存指令,因此也无法直接利用本地CPU的TLB模拟目标TLB。

发明内容
本发明的目的是针对现有技术的缺陷,提供一种虚拟机的模拟方法和计算机设备,实现了利用软件和硬件共同完成虚拟机中TLB的模拟,该模拟方法可以同时适用于异构虚拟机,TLB模拟效率高。为了达到上述目的,本发明提供了一种虚拟机的模拟方法,所述方法包括以下步骤虚拟机取出目标CPU要执行的第一访存指令;获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令;虚拟机执行所述第二访存指令时,本地CPU的旁路转换缓冲TLB将所述第二访存指令携带的虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项;本地CPU的TLB中存在所述虚拟地址对应的表项时,本地CPU的TLB将所述虚拟地址转换为物理地址,用以使本地CPU将所述物理地址作为所述第二访存指令的实际访问地址,正常执行所述第二访存指令。优选地,所述判断是否存在所述虚拟地址对应的表项之后还包括本地CPU的TLB中不存在所述虚拟地址对应的表项时,本地CPU产生TLB miss异常,并转入执行本地操作系统注册的异常处理例程入口,由本地操作系统针对所述TLB miss异常进行模拟处理优选地,所述本地CPU的TLB将所述虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项之前还包括虚拟机将目标CPU中的被模拟的TLB表项填写到本地CPU的TLB中。优选地,所述虚拟机获取所述第一访存指令对应的第二访存指令具体为虚拟机根据翻译后指令保存队列,判断所述第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将所述第一访存指令翻译为所述第二访存指令,并将所述第二访存指令存入所述翻译后指令保存队列。 优选地,所述目标CPU和所述本地CPU为不同的体系结构;所述目标CPU中的TLB和所述本地CPU中的TLB支持的页面单位的大小相同。优选地,所述第二访存指令具体为一个访存指令,或一个访存指令序列。 优选地,所述由本地操作系统针对所述TLB miss异常进行模拟处理具体为本地操作系统在异常处理例程中识别异常产生的原因,判断所述异常为来自虚拟机的TLB miss异常后,模拟目标CPU中产生TLB miss异常的硬件处理方法进行处理。相应地,为了达到上述目的,本发明实施例还提供了一种计算机设备,所述计算机设备包括虚拟机,所述虚拟机包括取指单元,用于取出目标CPU要执行的第一访存指令;指令获取单元,用于获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令;所述计算机设备还包括本地CPU,所述本地CPU包括旁路转换缓冲TLB,用于将所述第二访存指令携带的虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项;本地CPU的TLB中存在所述虚拟地址对应的表项时,TLB将所述虚拟地址转换为物理地址,用以使本地CPU将所述物理地址作为所述第二访存指令的实际访问地址,正常执行所述第二访存指令。优选地,本发明实施例中的虚拟机还包括TLB操作单元,用于将目标CPU中的被模拟的旁路转换缓冲TLB表项填写到本地CPU的TLB中。优选地,所述指令获取单元具体用于根据翻译后指令保存队列,判断所述第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将所述第一访存指令翻译为所述第二访存指令,并将所述第二访存指令存入所述翻译后指令保存队列。优选地,所述目标CPU和所述本地CPU为不同的体系结构;所述目标CPU中的TLB和所述本地CPU中的TLB支持的页面单位的大小相同。本发明的上述实施例中,虚拟机将目标CPU中的TLB表项填写到本地CPU的TLB中,当目标CPU要执行一个访存指令时,虚拟机将该访存指令翻译为本地CPU可执行的访存指令;虚拟机执行翻译后的访存指令时,本地CPU的TLB将访存指令携带的虚拟地址转换为物理地址,供翻译后的访存指令访问,由此完成目标CPU要执行的访存指令的访存操作;如果本地CPU的TLB中不包含访存指令携带的虚拟地址对应的表项,本地CPU产生TLB miss异常,并转入执行本地操作系注册的异常处理例程入口,由本地操作系统模拟目标CPU中产生TLB miss异常的硬件处理方法处理该异常。由此,本发明使用硬件和软件结合的方法实现了异构虚拟机中TLB的模拟,提高了虚拟机中TLB的模拟效率。


图I为本发明实施例提供的一种虚拟机的模拟方法流程图;图2为本发明实施例提供的又一虚拟机的模拟方法流程图;图3为本发明实施例提供的一种计算机设备示意图。
具体实施例方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。首先对本申请文件中使用的名词术语进行解释 I、本地平台是指虚拟机软件所在的运行平台,是真实的物理平台;2、目标平台是指虚拟机软件在运行期间模拟的平台,也就是在虚拟机中运行的目标软件所依托的平台。3、本地CPU为本地平台中的CPU,目标CPU为目标平台中的CPU。4、虚拟机的本地平台和目标平台相同时,称为同构虚拟机,否则称为异构虚拟机。5、TLB命中是指TLB中包含传入的虚拟地址对应的表项,能够转换成物理地址。TLB不命中是指TLB中不包含传入的虚拟地址对应的表项。6、目标操作系统是指虚拟机中运行的操作系统,本地操作系统是在本地物理主机上运行的操作系统。图I为本发明实施例提供的一种虚拟机的模拟方法流程图。本实施例详细描述了利用软件和硬件共同完成虚拟机中TLB的模拟的过程。如图I所示,本实施例包括以下步骤步骤101,虚拟机取出目标CPU要执行的第一访存指令。虚拟机在执行目标程序的过程中,以循环方式不断从目标内存中取出下一条要执行的指令,如果该指令是访存指令,则使用本发明实施例提供的方法模拟该访存指令的执行过程;否则,指令的执行与本发明无关。需要说明的是,本发明实施例所提供的方法适用于异构虚拟机,即本地CPU和目标CPU的体系结构不相同。另外,本发明实施例中,本地CPU和目标CPU均支持虚拟存储系统,并且本地CPU和目标CPU均包含用于虚拟地址和物理地址转换的硬件TLB ;本地CPU中的TLB和目标CPU中的TLB要支持相同大小的页面单位,这一条件在现有主要平台中通常都能得到满足,因此本发明实施例提供的方法的可行性较好;本地CPU提供对于TLB的操作指令,即TLB表项的读写指令,以便虚拟机能够使用这些指令读写本地TLB。步骤102,虚拟机获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令。虚拟机获取所述第一访存指令对应的第二访存指令的具体方法为虚拟机根据翻译后指令保存队列,判断第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将第一访存指令翻译为本地CPU可执行的第二访存指令。
虚拟机在模拟执行取出的第一访存指令时,首先在翻译后指令保存队列中进行检索,查看该指令是否已经被翻译为本地CPU可以执行的第二访存指令。翻译后指令保存队列是虚拟机中用于保存所有翻译后代码的一个队列,如果要执行的指令已经被翻译,则虚 拟机直接将翻译后的本地CPU可以执行的第二访存指令取出并执行。如果翻译后指令保存队列中没有目标CPU执行的第一访存指令对应的本地CPU执行的第二访存指令,则虚拟机翻译第一访存指令,并将翻译后的代码保存在该翻译后指令保存队列中,以便虚拟机下次再执行第一访存指令时,无须重新翻译,直接从该队列中取出并执行翻译后的第二访存指令。虚拟机将目标CPU中的第一访问指令翻译成本地CPU的第二访存指令所使用的方法是采用二进制指令翻译规则保证翻译前、翻译后指令在语义上的等价性。翻译后的指令序列中包含对于本地内存的访问动作,指令中包含的虚拟地址与翻译之前相同。需要说明的是,本实施例中的第二访存指令可以为一个单一指令,也可以为一个指令序列,即多个指令,这由目标CPU和本地CPU的体系结构决定。步骤103,虚拟机执行所述第二访存指令时,本地CPU的旁路转换缓冲TLB将所述第二访存指令携带的虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项。虚拟机在获取到翻译后的第二访存指令时,将该指令序列投入本地CPU运行,第二访存指令中携带了目标CPU要访问的虚拟地址,本地CPU内部的TLB以硬件方式检查该TLB中包含该虚拟地址对应的表项,即查询该虚拟地址是否能够转换为物理地址,也就是使用TLB本身的异常处理机制来判断是否能够将该虚拟地址转换为物理地址。其中,上述虚拟地址被模拟指令要访问的虚拟地址,物理地址为本地物理内存地址,对应于目标内存的区域。将目标CPU中的TLB表项填写到本地CPU的TLB中,实现了使用纯硬件方法模拟目标TLB的查询和地址转换流程,步骤102中的翻译后代码中将只有翻译后的访存指令,无须生成TLB的检索、是否命中的判断代码,从而使翻译代价降低到最小幅度,执行速度远远高于使用纯软件方法的几十条指令的规模。步骤104,本地CPU的TLB中存在所述虚拟地址对应的表项时,本地CPU的TLB将所述虚拟地址转换为物理地址,用以使本地CPU将所述物理地址作为所述第二访存指令的实际访问地址,正常执行所述第二访存指令。虚拟机将第二访存指令投入本地CPU运行后,由本地CPU根据第二访存指令中的虚拟地址,在TLB中获取虚拟地址对应的物理地址。只要本地操作系统将本地CPU配置为启用页表转换的模式,本地CPU在执行指令时首先经过TLB进行“虚拟地址-物理地址”转换,TLB将要转换的虚拟地址与自身保存的所有表项进行匹配检查,如果存在相同虚拟地址的表项,则返回对应的物理地址,供本地CPU在执行后续的访存流程中使用。本地CPU将转换后的物理地址为访存的实际位置,根据指令的语义执行本地内存的访问动作,以正常完成第二访存指令的执行。由于TLB—般具有较高的命中率,因此TLB命中,第二访存指令正常执行完成的情形占TLB模拟的重要比例,又由于TLB命中时不会产生异常,因此也无需在内核中执行异常处理部分,使得虚拟机在整体上产生了较大规模的性能提升。
本发明实施例中,当目标CPU要执行一个访存指令时,虚拟机首先获取将该访存指令对应的本地CPU可执行的访存指令;虚拟机执行翻译后的访存指令时,本地CPU的TLB将访存指令携带的虚拟地址转换为物理地址,供翻译后的访存指令访问,由此完成目标CPU要执行的访存指令的访存操作。由此,本发明使用硬件和软件结合的方法实现了异构虚拟机中TLB的模拟,提高了虚拟机中TLB的模拟效率图2为本发明实施例提供的又一虚拟机的模拟方法流程图。如图2所示,本实施例包括以下步骤步骤201,虚拟机取出目标CPU要执行的第一访存指令。虚拟机在执行目标程序的过程中,以循环方式不断从目标内存中取出下一条要执行的指令,如果该指令是访存指令,则使用本发明实施例提供的方法模拟该访存指令的执行过程;否则,指令的执行与本发明无关。
步骤202,虚拟机根据翻译后指令保存队列,判断第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将第一访存指令翻译为本地CPU可执行的第二访存指令。虚拟机在模拟执行取出的第一访存指令时,首先在翻译后指令保存队列中进行检索,查看该指令是否已经被翻译为本地CPU可以执行的第二访存指令。翻译后指令保存队列是虚拟机中用于保存所有翻译后代码的一个队列,如果要执行的指令已经被翻译,则虚拟机直接将翻译后的本地CPU可以执行的第二访存指令取出并执行。如果翻译后指令保存队列中没有目标CPU执行的第一访存指令对应的本地CPU执行的第二访存指令,则虚拟机翻译第一访存指令,并将翻译后的代码保存在该翻译后指令保存队列中,以便虚拟机下次再执行第一访存指令时,无须重新翻译,直接从该队列中取出并执行翻译后的第二访存指令。步骤203,虚拟机执行所述第二访存指令时,由本地CPU根据所述第二访存指令携带的虚拟地址,本地CPU的旁路转换缓冲TLB将所述虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项。虚拟机在获取到翻译后的第二访存指令时,将该指令序列投入本地CPU运行,第二访存指令中携带了目标CPU要访问的虚拟地址,本地CPU内部的TLB以硬件方式检查该TLB中包含该虚拟地址对应的表项,即查询该虚拟地址是否能够转换为物理地址,也就是使用TLB本身的异常处理机制来判断是否能够将该虚拟地址转换为物理地址。其中,上述虚拟地址被模拟指令要访问的虚拟地址,物理地址为本地物理内存地址,对应于目标内存的区域。根据所述第二访存指令携带的虚拟地址,查询本地CPU的TLB中是否存在所述虚拟地址对应的表项之前,本实施例还包括步骤206,将目标CPU中的被模拟的TLB表项填写到本地CPU的TLB中。虚拟机执行步骤206的操作的时机与目标CPU中执行这一项硬件动作的时机相同。优选地,在目标操作系统调度新进程时,虚拟机会将目标CPU中的被模拟的TLB表项填写到本地CPU的TLB中。优选地,在目标CPU上执行页表更新动作时,虚拟机会将目标CPU中更新后的TLB表项替换本地CPU中相应的TLB表项。优选地,在目标CPU发生TLB miss异常时,虚拟机会执行表项替换动作,使用目标内存中的页表内容替换本地CPU中的TLB表项。优选地,虚拟机还可以使用本地CPU提供对于TLB的操作指令,显示修改本地CPU中的TLB表项。 将目标CPU中的TLB表项填写到本地CPU的TLB 中,实现了使用纯硬件方法模拟目标TLB的查询和地址转换流程,步骤202中的翻译后代码中将只有翻译后的访存指令,无须生成TLB的检索、是否命中的判断代码,从而使翻译代价降低到最小幅度,执行速度远远高于使用纯软件方法的几十条指令的规模。步骤204,本地CPU的TLB中存在所述虚拟地址对应的表项时,本地CPU的TLB将所述虚拟地址转换为物理地址,用以使本地CPU正常执行所述第二访存指令。虚拟机将第二访存指令投入本地CPU运行后,由本地CPU根据第二访存指令中的虚拟地址,在TLB中获取虚拟地址对应的物理地址。只要本地操作系统将本地CPU配置为启用页表转换的模式,本地CPU在执行指令时首先经过TLB进行“虚拟地址-物理地址”转换,TLB将要转换的虚拟地址与自身保存的所有表项进行匹配检查,如果存在相同虚拟地址的表项,则返回对应的物理地址,供本地CPU在执行后续的访存流程中使用。步骤205,本地CPU的TLB中不存在所述虚拟地址对应的表项时,本地CPU产生TLBmiss异常,并转入执行本地操作系注册的异常处理例程入口,由本地操作系统针对所述TLBmiss异常进行模拟处理。如果本地CPU的TLB中不存在所述虚拟地址对应的表项,本地CPU产生TLB miss异常,由本地操作系统中的异常处理功能模块来处理该异常。由本地操作系统针对所述TLB miss异常进行模拟处理具体为本地操作系统在异常处理例程中识别异常产生的原因,判断所述异常为来自虚拟机的TLB miss异常后,模拟目标CPU中产生TLB miss异常的硬件处理方法进行处理。需要说明的是,在不同的体系结构中,TLB miss异常处理过程不同。在硬件管理的TLB中(以X86为代表),TLB在发生miss异常时,首先由CPU在物理内存中执行页表查找动作,如果在页表中查找到有效的物理地址,则把这次查找结果反填到TLB中,从而在下次访问相同虚拟地址时能够直接在TLB中得到转换。在软件管理的TLB中(以MIPS为代表),TLB在发生miss异常时,CPU本身只向操作系统报告异常,由操作系统完成物理内存中页表的查找动作,如果在页表中查找到有效的物理地址,则由操作系统调用特定的TLB读写指令,显式的把这次查找结果反填到TLB中。无论是在哪一种类型中,虚拟机都是模拟与目标硬件相匹配的行为,在目标CPU的TLB被修改的时机,执行本地TLB的相应修改。本发明实施例中,虚拟机将目标CPU中的TLB表项填写到本地CPU的TLB中,当目标CPU要执行一个访存指令时,虚拟机将该访存指令翻译为本地CPU可执行的访存指令;虚拟机执行翻译后的访存指令时,本地CPU的TLB将访存指令携带的虚拟地址转换为物理地址,供翻译后的访存指令访问,由此完成目标CPU要执行的访存指令的访存操作;如果本地CPU的TLB中不包含访存指令携带的虚拟地址对应的表项,本地CPU产生TLB miss异常,并转入执行本地操作系注册的异常处理例程入口,由本地操作系统模拟目标CPU中产生TLBmiss异常的硬件处理方法处理该异常。由此,本发明使用硬件和软件结合的方法实现了异构虚拟机中TLB的模拟,提高了虚拟机中TLB的模拟效率。下面以一个目标CPU要执行的访存指令为例,说明异构虚拟机中TLB模拟的方法。假设主机中的CPU为MIPS结构的CPU,虚拟机的CPU为X86的CPU,在X86CPU中使用4K页面,在MIPS CPU中则一般能够支持4K、16K等不同的页面大小,甚至能够在CPU运行期间混合使用不同页面单位的页表,满足使用本方法的前提条件。在MIPS指令集中提供4条TLB操作指令TLBP (查询条目)、TLBR (读条目)、TLBffI (写条目)、TLBffR (随机写条目)。这四条指令都是特权指令,必须在特权态下执行,提供了操作本地TLB的全部必要手段。假设虚拟机使用连续的本地物理内存模拟X86物理内存,其起始物理地址为0x40000000o在X86CPU中,某应用程序的页表中存在下面的映射[虚拟地址0x80000000,物理地址 0x50000] 并且这一条映射已经在本地CPU的TLB中存在,其内容为[虚拟地址OxSOOOOOOO,物理地址 0x40050000]如果应用程序执行下面的访存指令MOV EAX,
经过虚拟机翻译成下面的MIPS指令Iui t0,0x8000ori t0 0x0002Iw s0,0(t 0)其中,寄存器t0保存了原有X86指令要访问的虚拟地址;s0用于模拟目标EAX寄存器,用于保存从内存中读取的数据。本地MIPS在执行最后一条Iw指令时,以虚拟地址的页面基地址(0x80000000)查询TLB,与TLB中表项相匹配,从而取出物理页面基地址为0x40050000。这一物理地址再加上原虚拟地址的页内偏移量(0x2),得到最终访问的本地物理地址为0x40050002。这一地址正是虚拟机模拟的X86目标物理地址,从而使模拟执行的MOV指令的语义得到正确模拟。通过上述具体的示例描述,说明了本发明实施例提供的TLB模拟方法的可行性好,效率高。相应地,本发明还提供了一种虚拟机中旁路转换缓冲的模拟装置。图3为本发明实施例提供的一种计算机设备示意图。如图3所示,本实施例包括以下单元虚拟机301,虚拟机301包括取指单元303,用于取出目标CPU要执行的第一访存指令;指令获取单元304,用于获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令。需要说明的是,本发明实施例所提供的虚拟机既可以为同构虚拟机,也可以为异构虚拟机,即本地CPU和目标CPU可以是相同的体系结构,也可以是不同的体系结构。对于同构虚拟机,虚拟机可以直接利用本地CPU模拟目标CPU的TLB执行流程,因此,本发明实施例将只针对异构虚拟机中TLB的模拟进行详细描述。另外,本发明实施例中,本地CPU和目标CPU均支持虚拟存储系统,并且本地CPU和目标CPU均包含用于虚拟地址和物理地址转换的硬件TLB ;本地CPU中的TLB和目标CPU中的TLB要支持相同大小的页面单位,这一条件在现有主要平台中通常都能得到满足,因此本发明实施例提供的装置具有广泛的适用性;本地CPU提供对于TLB的操作指令,即TLB表项的读写指令,以便虚拟机能够使用这些指令读写本地TLB。指令获取单元304具体用于根据翻译后指令保存队列,判断所述第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将所述第一访存指令翻译为所述第二访存指令,并将所述第二访存指令存入所述翻译后指令保存队列。虚拟机在模拟执行取出的第一访存指令时,指令获取单元304首先在翻译后指令保存队列中进行检索,查看该指令是否已经被翻译为本地CPU可以执行的第二访存指令。翻译后指令保存队列是虚拟机中用于保存所有翻译后代码的一个队列,如果要执行的指令已经被翻译,则虚拟机直接将翻译后的本地CPU可以执行的第二访存指令取出并执行。如果翻译后指令保存队列中没有目标CPU执行的第一访存指令对应的本地CPU执行的第二访存指令,则虚拟机翻译第一访存指令,并将翻译后的代码保存在该翻译后指令保存队列中,以便虚拟机下次再执行第一访存指令时,无须重新翻译,直接从该队列中取出并执行翻译后的第二访存指令。虚拟机将目标CPU中的第一访存指令翻译成本地CPU的第二访存指令所使用的方法是采用二进制指令翻译规则保证翻译前、翻译后指令在语义上的等价性。翻译后的指令序列中包含对于本地内存的访问动作,指令中包含的虚拟地址与翻译之前相同。需要说明的是,本实施例中的第二访存指令可以为一个单一指令,也可以为一个指令序列,即多个指令,这由目标CPU和本地CPU的体系结构决定。本地CPU302,本地CPU302包括TLB305,用于将所述第二访存指令携带的虚拟地址与TLB305中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项;本地CPU302的TLB305中存在所述虚拟地址对应的表项时,TLB305将所述虚拟地址转换为物理地址,用以使本地CPU302正常执行所述第二访存指令优选地,虚拟机301还包括TLB操作单元306,用于将目标CPU中的被模拟的旁路转换缓冲TLB表项填写到本地CPU302的TLB305中。虚拟机将翻译后的访存指令投入本地CPU302运行,由本地CPU302模拟目标CPU执行访存指令,在本地CPU执行访存指令的过程中,本地TLB305以硬件方式检查该TLB中的表项,以判断是否能够将访存指令携带的虚拟地址装换为物理地址,如果能,则正常执行访存指令,否则模拟目标硬件的方法处理TLB miss异常。专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的 软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式
,对本发明的目的、技术方案和有益效果进行了进ー步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式
而已,并不用于限定本发明 的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种虚拟机的模拟方法,其特征在于,所述方法包括 虚拟机取出目标CPU要执行的第一访存指令; 虚拟机获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令; 虚拟机执行所述第二访存指令时,本地CPU的旁路转换缓冲TLB将所述第二访存指令携带的虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项; 本地CPU的TLB中存在所述虚拟地址对应的表项时,本地CPU的TLB将所述虚拟地址转换为物理地址,用以使本地CPU将所述物理地址作为所述第二访存指令的实际访问地址,正常执行所述第二访存指令。
2.如权利要求I所述的虚拟机的模拟方法,其特征在于,所述判断是否存在所述虚拟地址对应的表项之后还包括本地CPU的TLB中不存在所述虚拟地址对应的表项时,本地CPU产生TLB失败TLB miss异常,并转入执行本地操作系统注册的异常处理例程入口,由本地操作系统针对所述TLB miss异常进行模拟处理。
3.如权利要求I所述的虚拟机的模拟方法,其特征在于,所述本地CPU的TLB将所述虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项之前还包括虚拟机将目标CPU中的被模拟的TLB表项填写到本地CPU的TLB中。
4.如权利要求I所述的虚拟机的模拟方法,其特征在于,所述虚拟机获取所述第一访存指令对应的第二访存指令具体为虚拟机根据翻译后指令保存队列,判断所述第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将所述第一访存指令翻译为所述第二访存指令,并将所述第二访存指令存入所述翻译后指令保存队列。
5.如权利要求3所述的虚拟机的模拟方法,其特征在于,所述目标CPU和所述本地CPU为不同的体系结构;所述目标CPU中的TLB和所述本地CPU中的TLB支持的页面单位的大小相同。
6.如权利要求I所述的虚拟机的模拟方法,其特征在于,所述第二访存指令具体为一个访存指令,或一个访存指令序列。
7.如权利要求2所述的虚拟机的模拟方法,其特征在于,所述由本地操作系统针对所述TLB miss异常进行模拟处理具体为本地操作系统在异常处理例程中识别异常产生的原因,判断所述异常为来自虚拟机的TLB miss异常后,模拟目标CPU中产生TLB miss异常的硬件处理方法进行处理。
8.一种计算机设备,其特征在于,所述计算机设备包括 虚拟机,所述虚拟机包括取指单元,用于取出目标CPU要执行的第一访存指令;指令获取单元,用于获取所述第一访存指令对应的第二访存指令,所述第二访存指令为虚拟机翻译所述第一访存指令而得到的本地CPU可执行的指令; 本地CPU,所述本地CPU包括旁路转换缓冲TLB,用于将所述第二访存指令携带的虚拟地址与TLB中的表项进行匹配检查,判断是否存在所述虚拟地址对应的表项;本地CPU的TLB中存在所述虚拟地址对应的表项时,TLB将所述虚拟地址转换为物理地址,用以使本地CPU将所述物理地址作为所述第二访存指令的实际访问地址,正常执行所述第二访存指令。
9.如权利要求8所述的计算机设备,其特征在于,所述虚拟机还包括TLB操作单元,用于将目标CPU中的被模拟的旁路转换缓冲TLB表项填写到本地CPU的TLB中。
10.如权利要求8所述的计算机设备,其特征在于,所述指令获取单元具体用于根据翻译后指令保存队列,判断所述第一访存指令是否已经被翻译为本地CPU的第二访存指令,若是,则从所述翻译后指令保存队列中获取所述第二访存指令;否则将所述第一访存指令翻译为所述第二访存指令,并将所述第二访存指令存入所述翻译后指令保存队列。
11.如权利要求9所述的计算机设备,其特征在于,所述目标CPU和所述本地CPU为不同的体系结构;所述目标CPU中的TLB和所述本地CPU中的TLB支持的页面单位的大小相同。
全文摘要
本发明涉及一种虚拟机中旁路转换缓冲的模拟方法和装置。其中,虚拟机将目标CPU中的TLB表项填写到本地CPU的TLB中,当目标CPU要执行一个访存指令时,虚拟机将该访存指令翻译为本地CPU可执行的访存指令;虚拟机执行翻译后的访存指令时,本地CPU的TLB将访存指令携带的虚拟地址转换为物理地址,供翻译后的访存指令访问,由此完成目标CPU要执行的访存指令的访存操作。本发明使用硬件和软件结合的方法实现了异构虚拟机中TLB的模拟,提高了TLB的模拟效率。
文档编号G06F12/10GK102662726SQ201210097039
公开日2012年9月12日 申请日期2012年4月1日 优先权日2012年4月1日
发明者胡伟武, 靳国杰, 高翔 申请人:龙芯中科技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1