买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】在没有VMM介入的情况下对调用VMM配置的服务的指令集支持_英特尔公司_201811075414.5 

申请/专利权人:英特尔公司

申请日:2012-09-28

公开(公告)日:2022-04-01

公开(公告)号:CN109240801B

主分类号:G06F9/455(20060101)

分类号:G06F9/455(20060101)

优先权:["20111028 US 61/553,108","20120927 US 13/629,395"]

专利状态码:有效-授权

法律状态:2022.04.01#授权;2019.02.19#实质审查的生效;2019.01.18#公开

摘要:一种处理核包括指令执行逻辑电路和寄存器空间。与VM进入相称,从VMCS采用指示由处理核代表VMM提供的服务是否被启用的信息来加载寄存器空间。响应于宾客软件调用指令,指令执行逻辑查看寄存器空间以确认服务已经被启用,并且查看第二寄存器空间或存储器空间以获取由所述宾客软件编写的所述服务的输入参数。

主权项:1.一种由处理器执行的方法,包括:响应于从虚拟机上的宾客软件接收到第一指令,将所述第一指令解码成经解码的第一指令;响应于所述经解码的第一指令,检查是否为所述虚拟机启用或禁用所述第一指令;响应于所述经解码的第一指令,检查是否启用或禁用由所述宾客软件请求的服务以使所述处理器在不退出所述虚拟机的情况下执行;以及响应于所述经解码的第一指令并且响应于所述第一指令且为所述虚拟机启用所述服务,执行所述服务以在不退出所述虚拟机的情况下通过加载扩展页表EPT指针的新值来改变EPT分页结构层次。

全文数据:在没有VMM介入的情况下对调用VMM配置的服务的指令集支持本申请是国际申请日为2012928,国际申请号为PCTUS2012058079,进入中国国家阶段的申请号为201280057792.5,题为“在没有VMM介入的情况下对调用VMM配置的服务的指令集支持”的发明专利申请的分案申请。优先权要求本申请涉及2011年10月28日提交的题为“Instruction-SetSupportforInvocationofVMM-ConfiguredServiceswithoutVMMIntervention在没有VMM介入的情况下对调用VMM配置的服务的指令集支持”的美国临时专利申请No.61553,108,并要求其权益,该申请通过引用整体结合于此。技术领域本发明的领域一般涉及虚拟化,且更具体地涉及对VM宾客软件的CPU支持服务。背景技术很多当前的计算系统实现“虚拟化”。典型的实现在图1中示出。如图1所示,软件层102被施加在操作系统101软件和CPU103之间。该软件层102通常包括在虚拟机监视器VMM102b“上运行的”一个或多个虚拟机VM102a_1–102a_N。尽管不是严格的要求,但图1示出常见的配置,其中不同的软件应用实例100_1–100_N各自具有其自身的运行在专用虚拟机102a_1–102a_N之上的操作系统实例101_1–101_N。VM将CPU的出现呈现给其上运行的软件;该软件通常被称为“宾客”软件。结果,至少作为第一近似,运行在虚拟机上的软件可“认为”它自己具有整个计算机系统的资源。VMM102b负责支持下层CPU103上的多个VM。这样,VMM102b协调CPU103上的多个VM的并发请求要求。这包括将下层计算系统的实际资源例如,CPU线程、系统存储器空间、盘驱动存储空间的分配与运行在VM上的软件所引用的“虚拟”计算系统资源相关联。尽管宾客软件通常“认为”它运行在其自身的计算机系统中且没有VMM,但这种软件也可被设计成知晓何时它运行在VMM所支持的VM中。这种软件有时被称为“半虚拟化paravirtualization”或“启发的enlightened”。“知晓”其运行在VMM例如在VM102a_1–102a_N之一中上的软件可被设计成直接调用由VMM102b提供的某些“服务”。然而,目前,为了调用VMM服务,CPU的控制必须首先从其中进行调用的应用OS实例正运行的VM传送到VMM;这种控制传递有时被称为“VM退出”。VM退出的一个可能的结果是CPU必须将其活动背景或状态从VM进程“切换”到VMM进程。在已经完成服务之后,CPU必须再次将其活动背景状态从VMM进程切换回VM进程;这种返回控制传递有时被称为“VM进入VMentry”。图2示出用于调用VMM服务的现有技术过程。如图2所示,应用OS实例认识到调用VMM服务的需要,201。在调用之前,应用OS实例可用标识特定服务被调用的值和服务的输入参数来填充寄存器和或存储器,202。然后为了调用VMM服务,应用OS实例执行用于调用VMM服务的指令,203。例如,在具有VT-x技术的当今因特尔处理器的情况下,应用OS实例执行VMCALL指令,该指令被设计成用于从正在VM上运行的进程明确地去调用VMM。应用OS实例可替代地使用导致VM退出且为此目的VMM已经启用的另一个指令,诸如CPUID或WRMSR。响应于VMCALL指令被执行,CPU的控制从VM传递到VMMVM退出,203。在操作中,CPU内的微代码通过将VM的背景状态信息从软件可见的CPU寄存器空间移动到已经由VMM配置的虚拟机控制结构VMCS并且用来自VMCS中的其它位置的VMM进程的背景状态信息重新加载同样这些软件可见寄存器中的大部分,来实现上述背景状态切换。VMM进程查看referto由调用应用OS实例建立的存储器或寄存器值,以理解正在请求什么服务,并访问服务的输入参数。VMM进程然后执行服务,204。这通过执行被写入以执行服务的VMM程序代码来完成。在完成服务之后,控制经由VM进入VMentry从VMM传递回到VM,205。此处,CPU微代码将VM背景状态从NMCS加载到软件可见的寄存器空间。VMM服务的示例是“宾客地址空间切换”服务。该服务可用于运行在虚拟机中的宾客软件,对于该虚拟机,VMM支持多个地址空间,如以下所解释的。VMM通常对于其VM中的每一个支持“宾客地址空间”。这是从宾客“认为”的物理地址宾客-物理地址至可用于访问存储器的真实物理地址的映射,该映射还可为每个宾客-物理地址指定访问权例如,读写、只读等。在具有VT-x技术的当今英特尔处理器的情况下,宾客地址空间可利用扩展页表EPT实现。在没有半虚拟化的情况下,VMM通常将支持每个VM单个宾客地址空间。如果宾客软件是半虚拟化的,则VMM可为单个VM建立多个宾客地址空间,尽管一次仅有一个是活动的。在一个实例中,这些地址空间可在如何保护不同存储器区域方面彼此不同。对于运行在VM中的每个应用模块可能有不同的宾客地址空间;用于模块的宾客地址空间可允许该模块访问其自身的存储器,但不允许访问属于其它模块的存储器。对于多个宾客地址空间支持的VM,VMM将需要在适当时改变哪些宾客地址空间是活动的。一种有效的机制是宾客软件通知VMM何时要改变宾客地址空间例如,何时宾客OS从一个应用模块改变至另一个。宾客软件可经由“宾客地址空间切换”服务通知VMM。如前面指出的,可执行VMCALL或其它指令以调用用于宾客地址空间切换服务的VMM。在指令执行之前,宾客软件可将值放置在寄存器例如,EAX寄存器或存储器中以标识“宾客地址空间切换”服务。可在附加寄存器例如,EBX寄存器或存储器中指定要切换到的地址空间的标识符。指令导致VM退出,且服务如上所述地由VMM履行。附图简述本发明是作为示例说明的,而不仅限制于各个附图的图形,在附图中,类似的参考编号表示类似的元件,其中:图1示出虚拟化方案现有技术;图2示出用于从宾客软件调用VMM服务的进程现有技术;图3示出用于从宾客软件调用CPU所提供服务的进程;图4示出CPU所提供的宾客地址切换服务;图5示出处理器的实施例;图6示出计算系统的实施例。详细描述每次宾客软件调用VMM服务都发生VM退出的事实对应于一种形式的低效率。具体地,如上所述,大量的寄存器内容移动需要在软件可见的寄存器空间和VMCS之间发生,以便将程序流的背景状态从VM切换到VMM。避免VM退出的一种方式是将服务功能嵌入CPU而不是VMM中。此处,因为CPU而不是VMM正履行所请求的服务,所以不需要控制传递或CPU内的背景切换。在各实施例中,尽管VMM不再执行服务,然而服务由VMM来配置。在实施例中,宾客软件经由特定指令调用服务。这可以是被重新定义以通过CPU调用服务的一定数量的现有指令之一,或者它可以是被特别定义以支持VMM配置的服务的一定数量的新指令之一。以下图3的论述讨论以构造到CPU的指令集中的单个新指令VMFUNC实现该新方法的实施例。图3示出VMFUNC指令的配置和使用的进程流。如图3的进程所示,在宾客软件或VM的特定实例的最初配置期间,VMM指示例如,通过写入VM的VMCSVMFUNC是否被启用用于宾客软件VM,如果是,则哪个特定CPU所提供的服务被启用用于宾客软件实例VM,301。下一次VM进入将该配置信息从VMCS加载到CPU的私有控制寄存器空间即对宾客软件不可见的空间,302。为了简化讨论,给出以下内容,似乎保持在VMCS中的配置信息专用于宾客软件的特定实例,然而,读者应理解该信息也可能专用于宾客软件在其上运行的VM。在该实施例中,想要调用VMM配置的服务的宾客软件首先用标识其想要调用的服务的值加载EAX寄存器。如果合适,宾客软件可用属于该服务的相关信息例如,输入参数加载其它寄存器例如EBX或ECX寄存器。在这些寄存器已经被加载之后,宾客软件执行VMFUNC指令以调用服务,303。尽管以上的讨论描述了一种进程,通过该进程,在VMCS中指定用于VM的每个服务的启用,且宾客软件通过写入管芯上的处理器寄存器来标识所期望的服务,然而读者将理解可通过存储器选择性地或组合地进行任意此类配置信息和或宾客软件服务调用。响应于VMFUNC指令的执行,CPU内的指令执行逻辑检查EAX寄存器中的信息以理解哪些特定的服务正被请求,且如果合适则检查其它寄存器中的信息以获得可应用的输入信息,304。CPU的指令执行资源然后查看305私有控制寄存器,该私有控制寄存器之前在VM进入之时利用VMCS信息予以加载302,以查看VMFUNC是否被启用用于宾客软件,如果是,则宾客软件已经请求的特定服务是否已经被启用。如果VMFUNC还未被启用用于宾客软件,或者如果VMFUNC已经被启用但特定的所请求的服务还未被启用,则CPU硬件引起异常,307。如果VMFUNC和所请求的服务已经被启用,则CPU的指令执行资源执行服务,306。一些实施例可将一些或全部服务限制到特定特权等级或操作模式。这些实施例可在检查到VMFUNC和所请求的服务已经被启用之前或之后检查特权等级和操作模式。如果CPU未操作在适当的特权等级和操作模式,则CPU可生成异常或VM退出。当VMFUNC指令执行所调用的VMM配置的服务时,所有的处理发生而不在VM进程和VMM进程之间切换背景;这与利用VMCALL指令导致VMM退出或导致VM退出的其它指令的现有技术方案是不同的。在实施例中,用于宾客软件的实例的私有寄存器空间从VMCS加载包括EPT页表指针地址,该地址指向用于要对在VM上运行的宾客软件执行的地址转换的EPT页表层次即,用于当前的宾客地址空间。此处,EPT页表层次中的转换定义从宾客软件指定的物理地址“宾客-物理地址”至与特定地址相关联的数据指令实际上所驻留的系统存储器中物理地址的可能是多步骤转换进程,以及宾客软件可访问这些物理地址的访问权。宾客软件的不同组件例如,两个不同的应用或同一应用的两个不同的软件模块可访问系统存储器的不同物理位置。VMM可通过将每个这样的组件与其自身的EPT页表层次相关联来在这些组件之间提供保护。例如,如果宾客软件对应于OS实例,则OS内核可布置成使不同的OS模块包括诸如驱动器之类的插入OS的模块从不同的存储器地址空间操作,从而保护每个模块免受同一OS实例内的其它模块影响。例如,驱动器可被配置成访问物理存储器的一部分,而诸如OS内核之类的OS实例的其它模块可被配置成访问物理存储器的第二部分。通过进一步使得OS内核的存储器空间为只读,可保护OS内核免受其它较不受信任的软件模块诸如驱动器的影响。改变保持在私有寄存器空间和VMCS中的EPT页表指针-地址会改变哪个EPT页表层次以及因此哪个转换方案用于VM的活动宾客软件。根据一个实施例,VMFUNC指令用于改变EPT页表指针地址而没有VM退出。程序流流过宾客软件的各软件模块,VMFUNC在软件模块之间的转变上执行以设置它们各自的适当地址空间。例如,当程序流从OS内核流至驱动器时,VMFUNC作为转变的一部分执行以设置驱动器的地址空间。同样,当程序流从驱动器流回OS内核时,VMFUNC再次在转变上执行以切换回OS内核的地址空间。回顾在图3的步骤302,私有寄存器空间通过VM进入从VMCS加载。在实施例中,如果宾客地址空间切换服务要被启用用于宾客软件,则标识“指针表”的VMCS中的地址也被从VMCS加载到私有寄存器空间中。指针表对应于可从宾客软件利用的不同页表层次的集合。在实施例中,指针表由VMM预先配置。图4a和4b涉及在CPU硬件中实现宾客地址切换服务的实施例。图4a是从如下角度绘制的:在此之后VM进入430已经出现,且作为VM进入进程的一部分,私有控制寄存器空间401、402、403已经由CPU利用来自VMCS404的信息加载,其指定以下内容:iVMFUNC是否已经被启用401;ii宾客地址切换是否已经被启用402;iii指针表407的地址403;iv指向最初的页表层次A410的指针409。尽管执行宾客软件,但位于私有寄存器空间409中的页表指针地址指向页表层次410,该页表层次410包括用于宾客软件的适当的地址转换信息。随后,宾客软件决定执行VMFUNC指令以调用宾客地址切换服务。在设置VMFUNC指令440的输入参数时,用标识宾客地址切换服务的值加载存储器或寄存器中的位置在实施例中,EAX寄存器411,且用标识被切换到的由页表层次B415表示地址空间的页表指针地址414所处的指针表407中的条目413的值加载存储器或寄存器中的第二位置在实施例中,ECX寄存器412。在执行指令时,CPU执行单元资源416首先读取寄存器存储器空间411以理解宾客地址切换服务正在被调用,并且读取私有寄存器空间401和402以检查是否VMFUNC已被启用用于宾客软件,且如果是则宾客地址切换是否已经被启用用于宾客软件,450。在确认VMFUNC和宾客地址空间切换已经被启用之后,CPU执行单元资源416接下来读取寄存器空间403指针表的地址和寄存器存储器空间412指示指针表中的所选条目以获取新的页表指针地址414在指针表407中的条目413处,460,将其加载470到寄存器空间409并将其存储470到分配给VMCS404的寄存器或存储器空间中。在新的页表指针地址被加载之后,现使用页表层次415而不是页表层次410转换宾客软件的转换即,宾客地址空间已经被切换。尽管以上的讨论致力于在CPU硬件中实现的宾客地址切换服务,然而由VMM提供的其它服务也可被集成到CPU中。这些包括但不限于以下:1利用某些许可映射和取消映射存储器的特定区域;2以特定方式处理虚拟中断例如,定义虚拟中断控制器的操作特性;3固定存储器以用作IO缓冲器。注意,以上的项目1和3以及宾客地址空间切换功能均改变存储器配置。图5示出一般的处理核500,该处理核500被认为描述许多不同类型的处理核架构,例如复杂指令集CISC、精简指令集RISC和超长指令字VLIW。图5的一般处理核500包括:1获取单元503,其获取指令例如,从高速缓存或存储器;2解码单元504,其解码指令;3调度单元505,其确定指令发布到执行单元506的时序和或顺序注意,调度器是任选的;4执行单元506,其执行指令;5引退单元507,其表示指令的成功完成。注意,处理核部分地或完全地可以包括或可以不包括微代码508,以控制执行单元506的微操作。在前面的讨论中提及的指令执行资源逻辑可利用执行单元506内的执行单元中的一个或多个实现。具有前述功能的处理核也可实现在各种计算系统中。图6示出计算系统例如计算机的一个实施例。图6的示例性计算系统包括:1可被设计成包括两个和三个寄存器标量整数和向量指令执行的一个或多个处理核601;2存储器控制中枢MCH602;3系统存储器603其存在不同的类型,例如DDRRAM、EDORAM等;4高速缓存604;5IO控制中枢ICH605;6图形处理器606;7显示器屏幕607其存在不同的类型,例如阴极射线管CRT、平板、薄膜晶体管TFT、液晶显示器LCD、DPL等以及一个或多个IO设备608。一个或多个处理核601执行指令以执行计算系统实现的任何软件例程。指令频繁地涉及在数据上执行的某些种类的操作。数据和指令两者被存储在系统存储器603和高速缓存604中。高速缓存604通常被设计成具有比系统存储器603更短的等待时间。例如,高速缓存604可被集成到与处理器相同的硅片上和或以较快的SRAM单元构造,而系统存储器603可以较慢的DRAM单元构造。通过往往将较频繁使用的指令和数据存储在高速缓存604而非系统存储器603中,计算机系统的总体性能效率提升。系统存储器603有意地供计算系统中的其它组件使用。例如,从计算系统的各接口例如键盘和鼠标、打印机端口、LAN端口、调制解调器端口等接收或从计算系统例如硬盘驱动器的内存元件获取的数据在软件程序执行中由一个或多个处理器601对其运行前经常被临时地排队进入系统存储器603。类似地,软件程序确定应当从计算系统通过计算系统接口之一送至外部实体或存储在内存元件中的数据经常在传输或存储之前临时地排队进入系统存储器603。ICH605负责确保该数据正确地在系统存储器603及其合适的对应计算系统接口以及内存设备,如果计算系统是如此设计的话之间传递。MCH602负责管理系统存储器603在处理器601、接口和内存元件之间的访问的各种竞争请求,这些竞争请求相对于彼此在时间上紧接地出现。一个或多个IO设备608也被实现在典型的计算系统中。IO设备一般负责将数据转移至计算系统例如联网适配器和或从计算系统转移;或者负责计算系统中的大规模非易失性存储例如硬盘驱动器。ICH605在其自身与所示IO设备608之间具有双向点对点链路。以上讨论教示的进程可利用程序代码执行,诸如机器可执行指令,其导致机器执行这些指令以实现某些功能。在这种背景下,“机器”可以是将中间形式例如抽象指令转换成处理器专用指令例如,抽象执行环境,诸如“虚拟机”例如,Java虚拟机解释器、公共语言运行时、高级语言虚拟机等和或设置在被设计成执行指令的半导体芯片中的电子电路例如以晶体管实现的“逻辑电路”,诸如通用处理器和或专用处理器。以上讨论示教的进程还可通过设计成执行进程或其一部分的电子电路来执行替换机器或与机器组合,而不执行程序代码。相信以上讨论示教的进程也可按各种软件部署框架例如微软公司的.NET、Mono、Java,甲骨文公司的Fusion等支持的各种面向对象或非面向对象的计算机编程语言例如,Java、C#、VB、Python、C、C++、J#、APL、Cobol、Fortran、Pascal、Perl等在源级程序代码中描述。源极程序代码可被转换成中间形式的程序代码诸如Java字节代码、微软中间语言等,可将其理解为抽象执行环境例如,Java虚拟机、公共语言运行时、高级语言虚拟机、解释器等,或者可直接编译成对象代码。根据各种方法,通过1编译中间形式的程序代码例如在运行时间例如JIT编译器,2解释中间形式的程序代码或3在运行时间编译中间形式的程序代码和解释中间形式的程序代码的组合,抽象执行环境可将中间形式的程序代码转换成处理器专用代码。抽象执行环境可运行在各种操作系统上诸如UNIX、LINUX、包括Windows族的微软操作系统、包括MacOSX的苹果计算机操作系统、SunSolaris、OS2、Novell等。制品可用于存储程序代码。存储程序代码的制品可体现为但不限于一个或多个存储器例如,一个或多个闪存、随机存取存储器静态、动态或其它、光盘、CD-ROM、DVDROM、EPROM、EEPROM、磁或光卡或适于存储电子指令的其它类型的机器可读介质。还可从远程计算机例如,服务器将程序代码作为体现在传播介质中的数据信号例如,经由通信链路例如,网络连接下载至请求计算机例如,客户机。在上述说明书中,已参考本发明具体示例实施例描述了本发明。然而,显然可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛精神和范围。

权利要求:1.一种由处理器执行的方法,包括:利用所述处理器的解码单元将指令解码成经解码的指令,以及利用所述处理器的执行单元执行所述经解码的指令以:检查由所述处理器的虚拟机上的宾客软件实例请求执行的所述指令是否被启用用于所述宾客软件实例,检查由所述处理器的所述虚拟机上的所述宾客软件实例所请求的服务是否是在不退出所述虚拟机的情况下所述处理器将执行的多个服务之一,其中所述多个服务包括在不退出所述虚拟机的情况下所述处理器将执行的至少一个非中断服务;以及如果所述指令被启用用于所述宾客软件实例并且所述服务是所述多个服务之一,则在不退出所述虚拟机的情况下执行所述服务。2.如权利要求1所述的方法,其特征在于,所述服务的所述检查包括检查所述处理器的私有控制寄存器空间。3.如权利要求1所述的方法,其特征在于,所述服务的所述检查包括所述宾客软件实例加载标识被请求进入所述处理器的寄存器中的服务的值。4.一种处理器,所述处理器包括:解码单元,所述解码单元用于将指令解码成经解码的指令;以及执行单元,所述执行单元用于执行所述经解码的指令以:检查由所述处理器的虚拟机上的宾客软件实例请求执行的所述指令是否被启用用于所述宾客软件实例,检查由所述处理器的所述虚拟机上的所述宾客软件实例所请求的服务是否是在不退出所述虚拟机的情况下所述处理器将执行的多个服务之一,其中所述多个服务包括在不退出所述虚拟机的情况下所述处理器将执行的至少一个非中断服务;以及如果所述指令被启用用于所述宾客软件实例并且所述服务是所述多个服务之一,则在不退出所述虚拟机的情况下执行所述服务。5.如权利要求4所述的处理器,其特征在于,所述服务的所述检查包括检查所述处理器的私有控制寄存器空间。6.如权利要求4所述的处理器,其特征在于,所述服务的所述检查包括所述宾客软件实例加载标识被请求进入所述处理器的寄存器中的服务的值。7.一种处理核,包括:指令执行逻辑电路;以及寄存器空间,与VM进入相称地,从VMCS采用指示由处理核代表VMM提供的服务是否被启用的信息来加载所述寄存器空间,其中所述指令执行逻辑电路被配置为用于响应于宾客软件执行调用VMM配置的服务的指令而用于:查看所述寄存器空间以确认所述VMM配置的服务已经被启用,以及查看第二寄存器空间或存储器空间以获取所述宾客软件编写的所述VMM配置的服务的输入参数。8.一种计算机可读存储介质,所述计算机可读存储介质包括存储在其上的指令,所述指令在被计算机执行时,使得所述计算机执行如权利要求1-3中任一项所述的方法。

百度查询: 英特尔公司 在没有VMM介入的情况下对调用VMM配置的服务的指令集支持

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。