当前位置:正文

基于针脚的虚构机扩充物化中国

发布日期:2024-05-29 15:36    点击次数:78

[[317685]]中国

现在主要有Intel的VT-x和AMD的AMD-V这两种技艺。其中枢想想都是通过引入新的辅导和运行方法,使VMM和Guest OS永诀运行在不同方法(ROOT方法和非ROOT方法)下,且Guest OS运行在Ring 0下。泛泛情况下,Guest OS的中枢辅导不错成功下达到贪图机系统硬件扩充,而不需要经过VMM。当Guest OS扩充到稀疏辅导的时期,系统会切换到VMM,让VMM来处理稀疏辅导。

1、Intel VT-x技艺

为弥补x86处理器的虚构化过错,市集的驱动催生了VT-x,Intel推出了基于x86架构的硬件援救虚构化技艺Intel VT(Intel Virtualization Technology)。

现在,Intel VT技艺包含CPU、内存和I/O三方面的虚构化技艺。CPU硬件援救虚构化技艺,分为对应安腾架构的VT-i(Intel Virtualization Technology for ltanium)和对应x86架构的VT-x(Intel Virtualization Technologyfor x86)两个版块。内存硬件援救虚构化技艺包括EPT(Extended Page Table)技艺。I/0硬件援救虚构化技艺的代表hatelVY-d(Intel Virtualization Technology for Directed I/0)。

IntelVT-x技艺解决了早期x86架构在虚构化方面存在的过错,可使未经修改的GuestOS运行在特权级0,同期减少VMM对Guest OS的遏止。Intel VT-d技艺通过使VMM将特定I/O开采成功分派给特定的Guest OS,减少VMM对I/O处理的不断,不但加快数据传输,且放置了大部分性能支拨。如下图所示。CPU硬件援救虚构化技艺简要证明经过图:

CPU硬件援救虚构化技艺

师法IBM 大型机,VT-x提供了2 个运行环境:根(Root)环境和非根(Non-root)环境。根环境挑升为VMM准备,很像正本莫得VT-x 的x86,仅仅多了对VT-x 复旧的几条辅导。非根环境行为一个受限环境用来运行多个虚构机。

CPU硬件援救虚构化技艺

如上图所示,根操作方法与非根操作方法都有相应的特权级0至特权级3。VMM运行在根方法的特权级0,GuestOS的内核运行在非根方法的特权级0,GuestOS的哄骗方法运行在非根方法的特权级3。运行环境之间相互滚动,从根环境到非根环境叫VMEntry;从非根环境到根环境叫VMExit。VT-x界说了VMEntry操作,使CPU由根方法切换到非根方法,运行客户机操作系统辅导。若在非根方法扩充了明锐辅导或发生了中断等,会扩充VMExit操作,切换回根方法运行VMM。

根方法与非根方法之问的相互更动是通过VMX操作兑现的。VMM 不错通过VMXON 和VMXOFF绽放或关闭VT-x。如下图所示:

CPU硬件援救虚构化技艺

VMX操作方法经过:

1)、VMM扩充VMXON辅导投入VMX操作方法。

2)、VMM可扩充VMLAUNCH辅导或VMRESUME辅导产生VM Entry操作,投入到Guest OS,此时CPU处于非根方法。

3)、Guest 0S扩充特权辅导等情况导致VMExit的发生中国,此时将堕入VMM,CPU切换为根方法。VMM确认VMExit的原因作出相应处理,处理完成后将转到2),不竭运行GuestOS。

4)、VMM可决定是否退出VMX操作方法,通过扩充VMXOFF辅导来完成。

为更好地复旧CPU虚构化,VMX新界说了虚构机物化结构VMCS(Virtual Machine ControlStructure)。VMCS是保存在内存中的数据结构,其包括虚构CPU的关联寄存器的内容及关联的物化信息。CPU在发生VM Entry或VMExit时,都会查询和更新VMCS。VMM也可通过辅导来建树VMCS,达到对虚构处理器的不断。VMCS架构图如下图所示:

CPU硬件援救虚构化技艺

每个虚构处理器都需将VMCS与内存中的一块区域联接起来,此区域称为VMCS区域。对VMCS区域的掌握是通过VMCS指针来兑现的,这个指针是一个指向VMCS的64位的地址值。VMCS区域是一个最大不突出4KB的内存块,且需4KB对皆。

VMCS区域分为三个部分:偏移0起是VMCS版块象征,通过不同的版块号,CPU可人护不同的VMCS数据神气;偏移4起是VMX中止迷惑器,在VMX中止发生时,CPU会在此处存入中止的原因;偏移8起是VMCS数据区,这一部分物化VMX非根操作及VMX切换。

VMCS 的数据区包含了VMX建树信息:VMM在启动虚构机前建树其哪些操作会触发VMExit。VMExit 产生后,处理器把扩充权交给VMM 以完成物化,然后VMM 通过辅导触发VMEntry 复返正本的虚构机或退换到另一个虚构机。

VMCS 的数据结构中,每个虚构机一个,加上虚构机的多样情状信息,共由3个部分构成,如之前的VMCS架构图所示:

1)、Gueststate:该区域保存了虚构机运行时的情状,在VMEntry 时由处理器装载;在VMExit时由处理器保存。它又由两部分构成:

Guest OS寄存器情状。它包括物化寄存器、调试寄存器、段寄存器等各种寄存器的值。 Guest OS非寄存器情状。用它不错纪录现时处理器所处情状,是活跃、停机(HLT)、关机(Shutdown)照旧恭候启动处理器间中断(Startup-IPI)。

2)、Hoststate:该区域保存了VMM 运行时的情状,主如若一些寄存器值,在VMExit 时由处理器装载。

3)、Control data:该区域包含几部分数据信息,永诀是:

虚构机扩充物化域(VM-Execution control fields)。VMM 主要通过建树该区域来物化虚构机在非根环境中的扩充步履。基于针脚的虚构机扩充物化。它决定在发生外部中断或不能屏蔽中断(NMI)要不要发生VMExit。基于处理器的虚构机扩充物化。它决定虚构机扩充RDTSC、HLT、INVLPG 等辅导时要不要发生VMExit。 VMExit 物化域(VMExit control fields)。该区域物化VMExit 时的步履。当VMExit 发生后处理器是否处于64 位方法;当因为外部中断发生VMExit 时,处理器是否反应中断物化器况兼得到中断向量号。VMM 不错用它来定制当VMExit 发生时要保存哪些MSR 况兼装载哪些MSR。MSR是CPU的方法寄存器,树立CPU的责任环境和象征cpu的责任情状。 VMEntry 物化域(VMEntry control fields)。该区域物化VMEntry 时的步履。它决定处理器VMEntry 后是否处于IA-32e 方法。与VMExit 的MSR物化访佛,VMM 用它来定制当VMEntry 发生时要装载哪些MSR。VMM 不错建树VMEntry 时通过虚构机的IDT向其发送一个事件。在此不错建树将使用IDT 的向量、中断类型(硬件或软件中断)、造作码等。 VMExit 信息域(VMExit information fields)。该只读区域包括最近一次发生的VMExit 信息。试图对该区域扩充写操作将产生造作。。此处存放VMExit 的原因以及针对不同原因的更多形色信息、中断或很是向量号、中断类型和造作码、通过 IDT 发送事件时产生的VMExit 信息、辅导扩充时产生的 VMExit 信息。

有了VMCS结构后,对虚构机的物化就是读写VMCS结构。背靠近vCPU树立中断,查验情状本体上都是在读写VMCS数据结构。

2、AMD-V技艺

咱们在上头末节先容了 Intel 的硬件援救虚构化技艺,那么 AMD 的硬件援救虚构化技艺又有什么性格呢?AMD 从 2006 年便运行悉力于硬件援救虚构化技艺的参谋,AMD-V全称是AMD Virtualization,AMD-V从代码的角度分一名为 AMD和 SVM,AMD开发这项虚构化技艺时的里面技俩代码为Pacifica,是AMD推出的一种硬件援救虚构化技艺。

CPU硬件援救虚构化技艺

Intel VT-x 和 AMD-V 提供的特征大多功能访佛,但称号可能不通常,如 Intel VT-x 将用于存放虚构机情状和物化信息的数据结构称为 VMCS, 而 AMD-V 称之为VMCB;Intel VT-x 将 TLB 纪录顶用于象征 VM 地址空间的字段为 VPID, 而AMD-V 称之为 ASID;Intel VT-x 将二级地址翻译称之为 EPT, AMD 则称为 NPT,等等一些区别。尽管其相似性,Intel VT-x 和 AMD-V 在兑现上对 VMM 而言是不兼容的。

AMD-V 在 AMD 传统的x86-64 基础上引入了“guest”操作方法。“guest”操作方法就是 CPU 在投入客操作系统运行时所处的方法。“guest”操作方法为客操作系统设定了一个不同于 VMM 的运行环境而不需要转变客操作系统已有的 4 个特权级机制,也就是说在“guest”方法下,客操作系统的内核仍然运行在 Ring 0, 用户方法仍然在 Ring 3。裸机上的操作系统和 VMM 场所的操作方法照旧和传统的 x86 中通常,且称之为“host”操作方法。VMM 通过扩充 VMRUN 辅导使CPU 投入“guest”操作方法而扩充客操作系统的代码;客操作系统在运行时,遭逢明锐辅导或事件,硬件就扩充 VMEXIT 步履,使 CPU 回到“host”方法而扩充 VMM 的代码。VMRUN 辅导运行的参数是一个物理地址指针,其指向一个 Virtual Machine Control Block (VMCB) 的内存数据结构, 该数据结构包含了启动和物化一个虚构机的一齐信息。

CPU硬件援救虚构化技艺

“guest”方法的趣味趣味在于其让客操作系统处于悉数不同的运行环境,而不需要转变客操作系统的代码。“guest”方法确凿立在系统中建立了一个比 Ring 0 更强的特权物化,即客操作系统的 Ring 0 特权必须让位于 VMM 的 Ring 0 特权。客操作系统上运行的那些特权辅导,即等于在 Ring 0 上也变的不错被 VMM 截取的了,“Ring Deprivileging”由硬件自动惩处。此外,VMM 还不错通过 VMCB 中的多样截取物化字段遴选性的对辅导和事情进行截取,或树立有条目的截取,通盘的明锐的特权或非特权辅导都在其物化之中。

CPU硬件援救虚构化技艺

VMCB 数据结构主要包含如下内容 :

1. 用于形色需要截取的辅导或事件的字段列表。其中 :

2 个 16 位的字段用于物化对 CR 类物化寄存器读写的截取 2 个 16 位的字段用于物化对 DR 类调试寄存器的读写的截取 一个 32 位的字段用于物化 exceptions 的截取 一个 64 位的字段用于物化多样引起系统情状变化的事件或辅导的截取,如 INTR, NMI, SMI 等事 件, HLT, CPUID,INVD/WBINVD,INVLPG/INVLPGA,MWAIT 等辅导, 还包括两位永诀标志是否对 IO 辅导和 MSR 寄存器的读写进行物化 指向IO端口造访物化位图和MSR读写物化位图的物理地址指针字段。该位图用于辞别性地物化虚构机对不同的 IO 端口和 MSR 寄存器进行读写造访。 形色虚构机CPU情状的信息。包含除通用寄存器外的大部分物化寄存器,段寄存器,形色符表寄存器,代码指针等。RAX 寄存器也在其中,因为 RAX 在 VMM 扩充 VMRUN 时是用来存放VMCB 物理地址的。关于段寄存器,该信息中还包含段寄存器对应的段形色符,也就那些传统 x86 上对软件隐敝的信息。 对虚构机的扩充进行物化的字段。主如若物化虚构机中断和 NPT 的字段。 迷惑虚构机投入“guest”方法后要扩充的行径的字段。包括用来形色 VMM 向虚构机注入的中断或很是的信息的字段。注入的中断或很是在 VMRUN 投入“guest”方法后立即扩充,就象悉数发生在虚构机内通常。 提供VMEXIT信息的字段。包括导致 VMEXIT 的事件的代码,很是或中断的号码,page fault 的线性地址,被截获的辅导的编码等。 CPU硬件援救虚构化技艺

VMCB 以过火波及的物化位图,悉数通过物理地址进行指向,这就幸免了“guest”和“host”方法切换的过程依赖于“guest”空间的线性地址 ( 传统操作系统内用户空间到内核的切换如实依赖于 IDT 中提供的主义的线性地址 ),使得 VMM 不错禁受和客操作系悉数统不同的地址空间。

VMCB 的内容在物理上被分红了俩部分,其顶用于保存虚构机 CPU 情状的信息占据 2048 字节的后半部分,咱们可称之为 VMCB.SAVE;其他信息,占据前 1024 字节界限,咱们可称之为 VMCB.CONTROL。

VMRUN 敕令以 VMCB 为参数,使CPU 投入“guest”情状, 按 VMCB.SAVE 的内容收复虚构机的 CPU 寄存器情状,并按 VMCB.SAVE 中 CS:RIP 字段迷惑的地址运行扩充虚构机 的代码, 并将之前 VMM 的 CPU 情状保存在MSR_VM_HSAVE_PA 寄存器所指向的物理内存区域中。VMRUN 所保存的 VMM 的 CPU情状的 CS:RIP 本体上就是 VMM 的代码中 VMCB 的下一个辅导,当虚构机因某种原因而导致 #VMEXIT 时,VMM 会从 VMRUN 后的一条辅导运行扩充。CPU 扩充 #VMEXIT 步履时,会自动将虚构机的情状保存到 VMCB.SAVE 区,并从 MSR_VM_HSAVE_PA 指定的区域加载 VMM 的 CPU 情状。

VMLOAD 和 VMSAVE 辅导是对 VMRUN 的补充,他们用来加载和收复一些并不需要经常使用的 CPU 情状,如 FS, GS, TR, LDTR 寄存器以过火关联的隐含的形色符寄存器的内容,VMLOAD 和 VMSAVE 不错让 VMM 的兑现对“guest”投入和退出的过程进行优化,让遍及情况下只使用 VMRUN 进行最少的情状保存和收复。

VMMCALL 辅导是 AMD-V 为客操作系统内核提供的明确的功能调用接口,访佛于 syscall 辅导 ( 从 Ring3 到 Ring 0), VMMCALL 让客操作系统成功扩充 #VMEXIT 而投入 VMM,肯求VMM 的干事。

3、总结

记挂一下CPU虚构化技艺的兑现,纯软件的CPU虚构化使用了堕入-模拟的方法来模拟特权辅导,而在x86架构中由于只可模拟特权辅导,无法模拟某些明锐辅导而无法兑现悉数的虚构化。(在x86架构中,特权辅导一定是明锐辅导,然而明锐辅导比特权辅导多,变成某系明锐辅导不是特权辅导而无法模拟,使得CPU虚构化很是),而硬件援救虚构化引入了根方法(root operation)和非根方法(none-root operation),每种方法都有ring0-3的四级特权级别。是以,在硬件援救虚构化中,堕入的办法本体上被VM-EXIT操作取代了,它代表从非根方法退出到根方法,而从根方法切换到非根方法是VM-Entry操作。

 中国





Powered by 🏆华体汇·体育全站app官网入口(中国)官方网站IOS安卓/通用版/手机版APP下载 @2013-2022 RSS地图 HTML地图