一种处理敏感指令的方法、装置以及物理机的制作方法

文档序号:6399892阅读:158来源:国知局
专利名称:一种处理敏感指令的方法、装置以及物理机的制作方法
技术领域
本发明涉及计算机虚拟化领域,尤其涉及一种处理敏感指令的方法、装置以及物理机。
背景技术
在虚拟化领域中,虚拟化技术扩大了硬件的容量,简化了软件的重新配置过程,实现了在一台物理主机上虚拟多个虚拟机,并且同时在各个虚拟机上运行一个独立的操作系统,从而显著提高计算机的工作效率,其中,这些独立的操作系统称为客户机操作系统(Guest Operating System, Guest OS)。在现有技术中,通常采用硬件虚拟化技术访问处理器。在Xen构架下的虚拟机系统中,Xen为虚拟机监视器,虚拟机不能处理敏感指令,如中央处理器(Central ProcessingUnit, CPU)指令中一部分指令为敏感指令。此时虚拟机陷入(Virtual Machine Exit, VMExit)Xen中,由Xen来处理敏感指令。在敏感指令处理完成之后,通过虚拟机进入(VirtualMachine Entry, VM Entry)操作返回虚拟机内部继续处理下一条指令。当下一条指令为敏感指令时,采用上述方法处理敏感指令;当下一条指令为非敏感指令时,虚拟机直接处理该非敏感指令。然而,在现有技术中,每当虚拟机执行一条敏感指令时,就需要在一次虚拟机陷入中处理一条敏感指令。当出现连续的敏感指令访问时,虚拟机在短期内需要执行大量敏感指令,导致大量的虚拟机陷入,使得虚拟机性能下降。

发明内容
本发明提供的一种处理敏感指令的方法、装置以及物理机,可以实现减少虚拟机陷入的次数,提高虚拟机的性能。第一方面,本发明提供一种处理敏感指令的方法,包括:在虚拟机处理待处理的敏感指令导致陷入之后,获取所述待处理的敏感指令对应的内存地址当所述待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与所述待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,其中,所述敏感指令集包括至少两条敏感指令,且所述敏感指令集的起始指令和结尾指令均为敏感指令;根据获取的所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集。结合第一方面,在第一种可能的实施例中,所述敏感指令集包括至少两条敏感指令和至少一条非敏感指令。结合第一方面中的第一种可能的实施例,在第二种可能的实施例中,所述根据所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集,包括:按照所述指令的执行顺序,处理所述敏感指令集中的第一指令;在处理第一指令之后,获取所述第一指令的长度;根据所述第一指令的长度,修改指令指针IP寄存器指向的地址为所述敏感指令集中的第二指令对应的内存地址,以便根据上述处理所述第一指令的方法处理所述第二指令。结合第一方面中的第二种可能的实施例,在第三种可能的实施例中,所述根据所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集,包括:按照所述指令的执行顺序,处理所述敏感指令集;在处理所述敏感指令集之后,获取所述敏感指令集的长度;根据所述敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址,以便处理所述待处理指令。结合第一方面中的前述任一种可能的实施例,在第四种可能的实施例中,所述方法还包括:当所述待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,直接处理所述待处理的敏感指令。第二方面,本发明提供一种处理敏感指令的装置,包括:第一获取模块,用于在虚拟机处理待处理的敏感指令导致陷入之后,获取所述待处理的敏感指令对应的内存地址,并将所述处理的敏感指令对应的内存地址发送给第二获取模块;所述第二获取模块用于接收所述第一获取模块发送的所述待处理的敏感指令,当所述待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与所述待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,并将所述敏感指令集发送给处理模块;其中,所述敏感指令集包括至少两条敏感指令,且所述敏感指令集的起始指令和结尾指令均为敏感指令;所述处理模块用于根据所述第二获取模块获取的所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集。结合第二方面,在第一种可能的实施例中,所述处理模块,包括:第一处理单元,用于按照所述指令的执行顺序,处理所述敏感指令集中的第一指令;第一获取单元,用于在所述第一处理单元处理完第一指令之后,获取所述第一指令的长度,并将所述第一指令的长度发送给第一修改单元;所述第一修改单元,用于根据接收的所述第一获取单元获取的所述第一指令的长度,修改IP寄存器指向的地址为所述敏感指令集中的第二指令对应的内存地址。结合第二方面的第一种可能的实施例,在第二种可能的实施例中,所述处理模块,包括:第二处理单元,用于按照所述指令的执行顺序,处理所述敏感指令集;第二获取单元,用于在所述第二处理单元处理完所述敏感指令集之后,获取所述敏感指令集的长度,并将所述敏感指令集的长度发送给第二修改单元;所述第二修改单元,用于根据接收的所述第二获取单元获取的所述敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址。结合第二方面的前述任一种可能的实施例,在第四种可能的实施例中,所述处理模块,还用于当所述待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,直接处理所述待处理的敏感指令。第三方面,本发明实施例还提供一种物理机,所述物理机包括硬件层、运行在硬件层之上的虚拟机监视器和运行在虚拟机监视器上的一个或多个虚拟机,所述虚拟机监视器包括如前述任一项实施例所述的处理敏感指令的装置。可见,本发明实施例提供一种处理敏感指令的方法、装置以及物理机,通过在虚拟机执行待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址;当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;根据敏感指令集记录的指令及指令的执行顺序处理敏感指令集,与现有技术中每当虚拟机执行一条敏感指令时,就需要在一次虚拟机陷入中模拟一条敏感指令,当出现连续的敏感指令访问时,虚拟机在短期内需要执行大量敏感指令,导致大量的虚拟机陷入,使得虚拟机性能下降相比,本发明实施例可以实现减少虚拟机陷入的次数,提高虚拟机的性能。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种处理敏感指令的方法的流程示意图;图2为本发明实施例提供的另一种处理敏感指令的方法的流程示意图;图3为本发明实施例提供的一种处理器之间的中断IPI中包含的指令的示意图;图4为本发明实施例提供的一种处理敏感指令的方法的流程示意图;图5为本发明实施例提供的另一种处理敏感指令的方法的流程示意图;图6为本发明实施例提供的一种处理敏感指令的装置的逻辑结构示意图;图7为本发明实施例提供的另一种处理敏感指令的装置的逻辑结构示意图;图8为本发明实施例提供的再一种处理敏感指令的装置的逻辑结构示意图;图9为本发明实施例提供的再一种处理敏感指令的装置的逻辑结构示意图;图10为本发明实施例提供的一种物理机的逻辑结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。如图1所示,本发明实施例提供一种处理敏感指令的方法,该方法的执行主体可以为虚拟机监视器Xen,该方法包括以下步骤:步骤101,在虚拟机处理待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址;Xen为一种虚拟机监视器。Xen可以预先将至少一个敏感指令集和敏感指令集中起始指令对应的内存地址保存在存储区域中。通常,在Guest OS中由虚拟机处理指令,但是虚拟机无法处理某些指令,这些指令需要切换到Xen中,由Xen来进行处理。虚拟机不能处理的指令为敏感指令,虚拟机可以处理的指令为非敏感指令。当虚拟机不能处理敏感指令时,Xen通过捕获该敏感指令,切换到Xen中处理该敏感指令的过程叫虚拟机陷入(VirtualMachine Exit, VM Exit)。可以理解的是,在本实施例中该敏感指令为待处理的敏感指令。指令由操作码和操作数两部分组成。其中,操作码为需要执行操作的内容,如传送、运算、移位、跳转等具体操作,操作码是指令中不可缺少的组成部分;操作数为指令执行的对象,即各种操作的对象。需要说明的是,一些指令中可以不需要操作数。步骤102,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,其中,敏感指令集包括至少两条敏感指令,且敏感指令集的起始指令和结尾指令均为敏感指令;敏感指令集由连续的敏感指令组成;或者敏感指令集中的至少两条敏感指令之间可以不连续,他们中间可以包含非敏感指令,但是在敏感指令集中的起始指令和结尾指令必须为敏感指令。优选的,在敏感指令集中至少两条敏感指令之间的非敏感指令的个数不大于M。其中,M为大于等于1、小于等于10的自然数。在本实施例中,至少两条敏感指令之间的非敏感指令的个数不大于4。当然,本实施例不限制至少两条敏感指令之间的非敏感指令的个数。按照Xen保存的敏感指令集的排列顺序,Xen将待处理的敏感指令对应的内存地址与保存的敏感指令集中起始指令对应的内存地址依次进行比较,当找到与待处理的敏感指令对应的内存地址相同的敏感指令集中起始指令对应的内存地址时,停止该操作,然后获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集。步骤103,根据敏感指令集记录的指令及指令的执行顺序处理敏感指令集。Xen按照指令的执行顺序对敏感指令集记录的指令进行处理。在Xen处理完敏感指令集之后,然后通过虚拟机进入(Virtual Machine Entry,VM Entry)返回虚拟机内部继续处理下一条待处理的指令。其中,处理敏感指令记录的指令的方法为现有技术,在此不--赘述。需要说明的是,当待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,Xen直接按照现有技术处理待处理的敏感指令。可见,本发明实施例提供一种处理敏感指令的方法,通过在虚拟机执行待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址;当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;根据敏感指令集记录的指令及指令的执行顺序处理敏感指令集。与现有技术中每当虚拟机执行一条敏感指令时,就需要在一次虚拟机陷入中模拟一条敏感指令,当出现连续的敏感指令访问时,虚拟机在短期内需要执行大量敏感指令,导致大量的虚拟机陷入,使得虚拟机性能下降相比,本发明实施例可以实现减少虚拟机陷入的次数,提高虚拟机的性能。如图2所示,本发明实施例提供另一种处理敏感指令的方法,该方法包括以下步骤:步骤201,Xen接收新敏感指令集和新敏感指令集中起始指令对应的内存地址,并将新敏感指令集进行保存;本步骤为可选步骤,当有新敏感指令集时,执行此步骤;当没有新敏感指令集时,直接执行步骤202。其中虚线框表示此步骤为可选步骤,当然也可以以其他方式表示可选关系,

Xen为一种虚拟机监视器。Xen可以预先将至少一个敏感指令集和敏感指令集中起始指令对应的内存地址保存在存储区域中,以及当有新敏感指令集,Xen可以接收该新敏感指令集和新敏感指令集中起始指令对应的内存地址,并将存储区域中保存的数据进彳丁更新。敏感指令集由连续的敏感指令组成;或者敏感指令集中的至少两条敏感指令之间可以不连续,他们中间可以包含非敏感指令,但是在敏感指令集中的起始指令和结尾指令必须为敏感指令。优选的,在敏感指令集中至少两条敏感指令之间的非敏感指令的个数不大于M。其中,M为大于等于1、小于等于10的自然数。在本实施例中,至少两条敏感指令之间的非敏感指令的个数不大于4。当然,本实施例不限制至少两条敏感指令之间的非敏感指令的个数。步骤202,虚拟机在处理待处理的敏感指令时,导致VM Exit ;通常,在Guest OS中由虚拟机处理指令,但是虚拟机无法处理某些指令,这些指令需要切换到Xen中,由Xen来进行处理。虚拟机不能处理的指令为敏感指令,虚拟机可以处理的指令为非敏感指令。当虚拟机不能处理敏感指令时,Xen通过捕获该敏感指令,切换到Xen中处理该敏感指令的过程叫VM Exit。可以理解的是,在本实施例中该敏感指令为待处理的敏感指令。例如,在Guest OS中虚拟机需要处理10条指令,其中,敏感指令为指令2、指令3、指令5、指令10,非敏感指令为指令1、指令4、指令6、指令7、指令8、指令9。在Guest OS中,由于指令2、指令3与指令5之间的距离较小,可以作为一个敏感指令集。其中,指令I对应的内存地址为001,指令2对应的内存地址为002,指令3对应的内存地址为003,指令4对应的内存地址为004,指令5对应的内存地址为005,指令6对应的内存地址为006,指令7对应的内存地址为007,指令8对应的内存地址为008,指令9对应的内存地址为009,指令10对应的内存地址为010。虚拟机在处理指令I之后,即将处理的指令2为敏感指令,即指令2为待处理的敏感指令。由于虚拟机不能处理指令2,从而导致了 VM Exit步骤203,在待处理的敏感指令VM Exit之后,Xen获取待处理的敏感指令对应的内存地址;具体的,根据步骤201中的举例,在虚拟机处理指令2导致陷入之后,获取指令2对应的内存地址002。步骤204,Xen将待处理的敏感指令对应的内存地址与保存的敏感指令集中包括的起始指令对应的内存地址依次进行比较,获得比较结果;当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,继续执行步骤205 ;当待处理的敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,继续执行步骤206。步骤205,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;具体的,根据步骤202-步骤203中的举例,当待处理的敏感指令为指令2时,指令指针(Instruction Pointer, IP)寄存器指向的指令2对应的内存地址为002,而Xen中保存的某一个敏感指令集中起始指令对应的内存地址为002,Xen按照保存敏感指令集的顺序,将指令2对应的内存地址依次与保存的敏感指令集中包括的起始指令对应的内存地址进行比较,直到找到与指令2对应的内存地址相同的敏感指令集中起始指令对应的内存地址时,根据指令2对应的内存地址获取与指令2对应的内存地址相同的起始指令所属的敏感指令集。在Xen获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集之后,继续执行步骤207。步骤206,当待处理的敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,Xen按照现有技术处理当前待处理的敏感指令;具体的,根据步骤202中的举例,当待处理的敏感指令为指令10时,IP寄存器指向的指令10对应的内存地址为010。由于指令10为单独的敏感指令,在Xen的存储区域中不存在与指令10对应的内存地址相同的敏感指令集中起始指令对应的内存地址,Xen按照现有技术处理当前待处理的指令10。通常,Xen需要获取指令10,然后解析指令的类型10,根据指令10的类型,解析指令10的内容;根据指令10的内容,Xen对指令10进行处理。其中,敏感指令包括:企图访问或修改虚拟机模式或机器状态的指令;企图访问或修改敏感寄存器或存储单元,如时钟寄存器、中断寄存器等的指令;企图访问存储保护系统或内存、地址分配系统的指令;所有I/O指令。需要说明的是,步骤205与步骤206是并列的关系,两者不可同时执行。在附图2中,以虚线框表示步骤206,或者也可以以虚线框表示步骤205,其中虚线框表示此步骤为可选步骤,当然也可以以其他方式表示可选关系,本发明实施例不进行限制表示可选关系的方式。步骤207, Xen根据敏感指令集记录的指令及指令的执行顺序处理敏感指令集;Xen将获取的敏感指令集记录的指令按照指令的执行顺序依次进行处理。例如,根据步骤202-步骤203的举例,Xen根据敏感指令集中记录的各个指令执行顺序,依次处理指令2、指令3、指令4、指令5。具体的,如图3所示,在Guest OS系统中,处理器之间的中断(Inter-ProcessorInterrupt, IPI)包含的指令以及指令的顺序是固定的,即敏感指令集为“读取中断控制寄存器(Interrupt Controller Register, ICR)的 busy 位”、“代码段 I”、“写 ICR2”、“代码段2”、“写I CR,发送IPI”。其中“读取ICR的busy位”、“写ICR2”、“写I CR,发送IPI”这三个指令为敏感指令;“代码段I”为至少一条非敏感指令、“代码段2”为至少一条非敏感指令。虚拟机处理敏感指令“读取ICR的busy位”导致VM Exit, Xen获取IP寄存器指向的“读取CR的busy位”对应的内存地址;按照Xen保存的敏感指令集的排列顺序,将“读取CR的busy位”对应的内存地址与保存的敏感指令集中起始指令对应的内存地址依次进行比较。当“读取ICR的busy位”对应的内存地址与保存的敏感指令集中起始指令对应的内存地址相同时,Xen从存储区域中获取该敏感指令集,然后根据IP寄存器指向的“读取ICR的busy位”所在地址获取第一敏感指令的内容,然后按照指令的执行顺序依次进行处理。其中,“读取ICR的busy位”用于检测ICR的发送状态位,当状态位是I时,则表明最后一个IPI还未被目标处理器接收,此时Xen需要等待目标处理器接收最后一个IPI之后才能处理下一个指令;当状态位是O时,则表明目标处理器已经接收最后一个IPI,此时Xen可以处理下一个指令。“写ICR2”用于写出IPI发送的目的地址。“写ICR,发送IPI”用于写入中断信息,并发送该中断。需要说明的是,Xen根据敏感指令集记录的指令及指令的执行顺序,处理敏感指令集时,包括以下两种方式。第一种方式,参照附图4对本实施例中Xen处理敏感指令集的过程的详细描述,如图4所示,具体可包括如下步骤:步骤2071a,Xen按照指令的执行顺序,处理敏感指令集中的第一指令;第一指令为敏感指令集中的任意一个指令。当第一指令为敏感指令集中的起始指令或者结尾指令时,第一指令为敏感指令;当第一指令为敏感指令集中除起始指令和结尾指令以外的任一个指令时,第一指令可以为敏感指令,或者第一指令可以为非敏感指令。具体的,根据附图2步骤202-步骤203的举例中,第一指令可以为敏感指令集中指令2-指令5中任一个指令,为了方便描述,在本实施例中第一指令为指令2。步骤2072a,在Xen处理第一指令之后,获取第一指令的长度;通常,一条指令的长度均为I个字节。其中,指令长度的单位为字节。具体的,指令2的长度为I字节。步骤2073a,根据第一指令的长度,Xen修改IP寄存器指向的地址为敏感指令集中的第二指令对应的内存地址,以便根据上述处理第一指令的方法处理第二指令。具体的,根据指令2的长度I字节,将IP寄存器指向的地址002加上指令2的长度I等于下一条指令对应的内存地址003,即将IP寄存器指向的地址为敏感指令集中的第二指令对应的内存地址003。需要说明的是,Xen按照上述方法继续处理指令3、指令4以及指令5以及依次修改IP寄存器指向的地址,直到Xen将指令5处理完之后,按照指令5的长度,将IP寄存器指向的地址005修改为指令6对应的内存地址006。第二种方式,参照附图5对本实施例中Xen处理敏感指令集的过程的另一详细描述,如图5所示,具体可包括如下步骤:步骤2071b,Xen按照指令的执行顺序,处理敏感指令集;步骤2072b,在Xen处理敏感指令集之后,获取敏感指令集的长度;具体的,根据附图2步骤202-步骤203的举例中,敏感指令集的长度为4字节。步骤2073b,根据敏感指令集的长度,Xen修改IP寄存器指向的地址为下一条待处理指令对应的内存地址,以便处理待处理指令。具体的,Xen按照指令的执行顺序,将敏感指令集中的所有指令:指令2、指令3、指令4、指令5处理完成之后,获取敏感指令集的长度为4字节,将IP寄存器指向的地址002加上敏感指令集的长度4等于下一条指令对应的内存地址,即将IP寄存器指向的地址002修改为下一条指令对应的内存地址006。需要说明的是,根据步骤2071a-步骤2073a和步骤2071b_步骤2073b的操作方法为Xen处理敏感指令集的过程。在Xen处理敏感指令集之后,继续执行步骤208。步骤208,在处理敏感指令集之后,通过VM Entry操作返回虚拟机内部,根据IP寄存器指向的地址,虚拟机对IP寄存器指向的地址对应的指令进行处理。具体的,在Xen处理敏感指令集中的指令2-指令5之后,通过VM Entry操作返回虚拟机内部,根据IP寄存器指向的地址006,虚拟机按照现有技术继续对指令6进行处理。可见,虚拟机在短期内需要处理大量敏感指令时,按照现有技术每次陷入只能处理一条指令,使得虚拟机出现大量的陷入,导致了虚拟机性能下降,本发明实施例提供的方案可以在虚拟机需要处理一系列的敏感指令时,在虚拟机一次陷入之后就能将这一系列的敏感指令处理完,然后通过VM Entry返回虚拟机内部继续处理下一条指令。从而实现了减少虚拟机陷入的次数,并且提高了虚拟机的性能。本发明实施例提供一种处理敏感指令的装置,该装置可以独立实现,也可以实现到虚拟机监视器,例如Xen内部。如图6所示,该装置包括:第一获取模块601,第二获取模块602,处理模块603。第一获取模块601,用于在虚拟机处理待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址,并将处理的敏感指令对应的内存地址发送给第二获取模块602 ;第二获取模块602,还用于根据接收第一获取模块601获取的待处理的敏感指令,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,并将敏感指令集发送给处理模块603 ;其中,敏感指令集包括至少两条敏感指令,且敏感指令集的起始指令和结尾指令均为敏感指令;处理模块603,用于根据第二获取模块602获取的敏感指令集记录的指令及指令的执行顺序处理敏感指令集。敏感指令集由连续的敏感指令组成,或者敏感指令集中的至少两条敏感指令之间可以不连续,但是在敏感指令集中的起始指令和结尾指令必须为敏感指令。优选的,在敏感指令集中的至少两条敏感指令之间的非敏感指令的个数不大于M,M为大于等于1、小于等于10的自然数。在本实施例中,至少两条敏感指令之间的非敏感指令的个数不大于4。当然,本实施例不限制至少两条敏感指令之间的非敏感指令的个数。例如,在Guest OS中虚拟机需要处理10条指令,其中,敏感指令为指令2、指令3、指令5、指令10,非敏感指令为指令1、指令4、指令6、指令7、指令8、指令9。在Guest OS中,由于指令2、指令3与指令5之间的距离较小,可以作为一个敏感指令集。虚拟机处理指令的流程以及指令之间的关系是一定的,所以在虚拟机未处理这10条指令之前,该装置已将敏感指令集保存在存取区域。其中,指令I对应的内存地址为001,指令2对应的内存地址为002,指令3对应的内存地址为003,指令4对应的内存地址为004,指令5对应的内存地址为005,指令6对应的内存地址为006,指令7对应的内存地址为007,指令8对应的内存地址为008,指令9对应的内存地址为009,指令10对应的内存地址为010。具体的,第一获取模块601获取指令2对应的内存地址002,然后将指令2对应的内存地址002发送给第二获取模块602。然后第二获取模块602根据接收第一获取模块601获取指令2,当指令2对应的内存地址002与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与指令2对应的内存地址002相同的起始指令所属的敏感指令集,该敏感指令集包括指令2、指令3、指令5以及指令5,并将敏感指令集发送给处理模块603 ;处理模块603按照指令的执行顺序处理敏感指令集。具体的,如图7所示,处理模块603,包括:第一处理单元6031,第一获取单元6032,第一修改单元6033 ;第一处理单元6031按照指令的执行顺序,处理敏感指令集中的第一指令;其中,第一指令为敏感指令集中的任意一个指令。当第一指令为敏感指令集中的起始指令或者结尾指令时,第一指令为敏感指令;当第一指令为敏感指令集中除起始指令和结尾指令以外的任一个指令时,第一指令可以为敏感指令,或者第一指令可以为非敏感指令。在第一处理单元6031处理第一指令之后,第一获取单元6032获取第一指令的长度,并将第一指令的长度发送给第一修改单元6033 ;通常,一条指令的长度均为I个字节。其中,指令长度的单位为字节。根据接收的第一获取单元6032获取的第一指令的长度,第一修改单元6033修改IP寄存器指向的地址为敏感指令集中的第二指令对应的内存地址。其中,处理模块603处理敏感指令集的详细过程可参考附图4所示的方法实施例部分,在此不一一赘述。具体的,如图8所示,处理模块603,包括:第二处理单元6034,第二获取单元6035,第二修改单元6036 ;第二处理单元6034,用于按照指令的执行顺序,处理敏感指令集;第二获取单元6035,用于在第二处理单元6034处理敏感指令集之后,获取敏感指令集的长度,并将敏感指令集的长度发送给第二修改单元6036 ;第二修改单元6036,用于根据接收的第二获取单元6035获取的敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址。其中,处理模块603处理敏感指令集的详细过程可参考附图5所示的方法实施例部分,在此不一一赘述。需要说明的是,当待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,处理模块603直接按照现有技术处理待处理的敏感指令。这里,处理模块603处理待处理的敏感指令可参照附图2中的步骤206,在此不一一赘述。可见,本发明实施例提供一种处理敏感指令的装置,第一获取模块在虚拟机处理待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址,并将处理的敏感指令对应的内存地址发送给第二获取模块;第二获取模块根据接收第一获取模块获取的待处理的敏感指令,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,并将敏感指令集发送给处理模块;其中,敏感指令集包括至少两条敏感指令,且敏感指令集的起始指令和结尾指令均为敏感指令;处理模块根据第二获取模块获取的敏感指令集记录的指令及指令的执行顺序处理敏感指令集。与现有技术中每当虚拟机执行一条敏感指令时,就需要在一次虚拟机陷入中模拟一条敏感指令,当出现连续的敏感指令访问时,虚拟机在短期内需要执行大量敏感指令,导致大量的虚拟机陷入,使得虚拟机性能下降相比,本发明实施例可以实现减少虚拟机陷入的次数,提高虚拟机的性能。需要说明的是,图6-图8所示装置中,其各个模块的具体实施过程以及各个模块之间的信息交互等内容,由于与本发明方法实施例基于同一发明构思,可以参见方法实施例,在此不一一赘述。如图9所示,本发明实施例提供另一种处理敏感指令的装置,该装置包括:存储器901,处理器902 ;
存储器901,用于存储包括程序例程的信息。处理器902,与存储器901耦合,用于控制程序例程的执行,具体包括用于在虚拟机处理待处理的敏感指令导致陷入之后,获取待处理的敏感指令对应的内存地址;以及根据获取的待处理的敏感指令,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;然后根据获取的敏感指令集记录的指令及指令的执行顺序处理敏感指令集。敏感指令集由连续的敏感指令组成,或者敏感指令集中的至少两条敏感指令之间可以不连续,他们中间可以包含非敏感指令,但是在敏感指令集中的起始指令和结尾指令必须为敏感指令。优选的,在敏感指令集中的至少两条敏感指令之间的非敏感指令的个数不大于M,M为大于等于1、小于等于10的自然数。在本实施例中,至少两条敏感指令之间的非敏感指令的个数不大于4。当然,本实施例不限制至少两条敏感指令之间的非敏感指令的个数。当虚拟机不能处理敏感指令时,导致出现了 VM Exit,此时处理器902获取该待处理的敏感指令对应的内存地址。处理器902按照保存敏感指令集的顺序,将IP寄存器指向的当前待处理的敏感指令对应的内存地址依次与保存的敏感指令集中包括的起始指令对应的内存地址进行比较。其中,比较结果有两种情况。第一种情况,当待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,处理器902获取与待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;然后根据获取的敏感指令集记录的指令及指令的执行顺序处理敏感指令集。可选的,处理器902按照指令的执行顺序处理敏感指令集中的第一指令;在处理第一指令之后,获取第一指令的长度;然后根据第一指令的长度,修改IP寄存器指向的地址为敏感指令集中的第二指令对应的内存地址。其中,第一指令为敏感指令集中的任意一个指令。当第一指令为敏感指令集中的起始指令或者结尾指令时,第一指令为敏感指令;当第一指令为敏感指令集中除起始指令和结尾指令以外的任一个指令时,第一指令可以为敏感指令,或者第一指令可以为非敏感指令。通常,一条指令的长度均为I个字节。其中,指令长度的单位为字节。可选的,处理器902还用于按照指令的执行顺序,处理敏感指令集;在处理敏感指令集之后,获取敏感指令集的长度;然后根据敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址。第二种情况,当待处理的敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,处理器902按照现有技术直接处理待处理的敏感指令。需要说明的是,附图9所示装置中,其各个模块的具体实施过程以及各个模块之间的信息交互等内容,由于与本发明方法实施例基于同一发明构思,可以参见方法实施例,在此不一一赘述。本发明实施例提供一种处理敏感指令的装置,可以实现减少虚拟机陷入的次数,提高虚拟机的性能。如图10所示,本发明实施例还提供一种物理机。该物理机包括硬件层1001、运行在硬件层之上的虚拟机监视器1002和运行在虚拟机监视器上的虚拟机1003,该虚拟机监视器1002可以包括任意一种上述实施例的处理敏感指令的装置。硬件层1001包括处理器、存储器、网络接口等功能模块,各个模块可以直接通信,也可以通过总线连接进行通信。虚拟机1003也可以为I个;而多个虚拟机1003可以相同,也可以不同,例如运行不同的操作系统,对此本发明实施例不作特殊限定。综上,本发明实施例提供的敏感指令处理方法、装置以及物理机,可以在连续多个敏感指令出现时有效减少虚拟机陷入的次数,提高虚拟机的性能。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
权利要求
1.一种处理敏感指令的方法,其特征在于,包括: 在虚拟机处理待处理的敏感指令导致陷入之后,获取所述待处理的敏感指令对应的内存地址; 当所述待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与所述待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,其中,所述敏感指令集包括至少两条敏感指令,且所述敏感指令集的起始指令和结尾指令均为敏感指令; 根据获取的所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集。
2.根据权利要求1所述的方法,其特征在于,所述敏感指令集包括至少两条敏感指令和至少一条非敏感指令。
3.根据权利要求2所述的方法,其特征在于,所述根据所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集,包括: 按照所述指令的执行顺序,处理所述敏感指令集中的第一指令; 在处理第一指令之后,获取所述第一指令的长度; 根据所述第一指令的长度,修改指令指针IP寄存器指向的地址为所述敏感指令集中的第二指令对应的内存地址,以便根据上述处理所述第一指令的方法处理所述第二指令。
4.根据权利要求2所述的方法,其特征在于,所述根据所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集,包括: 按照所述指令的执行顺序,处理所述敏感指令集; 在处理完所述敏感指令集中的所有指令之后,获取所述敏感指令集的长度; 根据所述敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述方法还包括: 当所述待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,直接处理所述待处理的敏感指令。
6.一种处理敏感指令的装置,其特征在于,包括: 第一获取模块,用于在虚拟机处理待处理的敏感指令导致陷入之后,获取所述待处理的敏感指令对应的内存地址,并将所述待处理的敏感指令对应的内存地址发送给第二获取模块; 第二获取模块,用于接收所述第一获取模块发送的所述待处理的敏感指令,当所述待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与所述待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集,并将所述敏感指令集发送给处理模块;其中,所述敏感指令集包括至少两条敏感指令,且所述敏感指令集的起始指令和结尾指令均为敏感指令; 处理模块,用于接收所述第二获取模块发送的所述敏感指令集,根据所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集。
7.根据权利要求6所述的装置,其特征在于,所述处理模块,包括: 第一处理单元,用于按照所述指令的执行顺序,处理所述敏感指令集中的第一指令; 第一获取单元, 用于在所述第一处理单元处理完第一指令之后,获取所述第一指令的长度,并将所述第一指令的长度发送给第一修改单元; 第一修改单元,用于根据接收到的所述第一获取单元获取的所述第一指令的长度,修改IP寄存器指向的地址为所述敏感指令集中的第二指令对应的内存地址。
8.根据权利要求6所述的装置,其特征在于,所述处理模块,包括: 第二处理单元,用于按照所述指令的执行顺序,处理所述敏感指令集; 第二获取单元,用于在所述第二处理单元处理完所述敏感指令集之后,获取所述敏感指令集的长度,并将所述敏感指令集的长度发送给第二修改单元; 第二修改单元,用于根据接收的所述第二获取单元获取的所述敏感指令集的长度,修改IP寄存器指向的地址为下一条待处理指令对应的内存地址。
9.根据权利要求6-8中任一项所述的装置,其特征在于,所述处理模块,还用于当所述待处理敏感指令对应的内存地址与保存的每个敏感指令集中起始指令对应的内存地址均不相同时,直接处理所述待处理的敏感指令。
10.一种物理机,其特征在于, 所述物理机包括硬件层、运行在硬件层之上的虚拟机监视器和运行在虚拟机监视器上的一个或多个虚拟机,所述虚拟机监视器包括如权利要求6-9任一项所述的处理敏感指令的装置。
全文摘要
本发明实施例涉及计算机虚拟化领域,通过本发明实施例通过在虚拟机处理待处理的敏感指令导致陷入之后,获取所述待处理的敏感指令对应的内存地址;当所述待处理的敏感指令对应的内存地址与保存的任意一个敏感指令集中起始指令对应的内存地址相同时,获取与所述待处理的敏感指令对应的内存地址相同的起始指令所属的敏感指令集;根据获取的所述敏感指令集记录的指令及所述指令的执行顺序处理所述敏感指令集,可以实现减少虚拟机陷入的次数,提高虚拟机的性能。
文档编号G06F9/455GK103197915SQ20131006669
公开日2013年7月10日 申请日期2013年3月1日 优先权日2013年3月1日
发明者严晓丹 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1