虚拟化技术深入解析
1. 超调用与管理程序顶层功能规范(TLFS)
超调用为运行在根分区或子分区的操作系统提供了一种向管理程序请求服务的机制。它具有明确的输入和输出参数,而管理程序顶层功能规范(TLFS)可在线获取(https://docs.microsoft.com/en-us/virtualization/hyper - v - on - windows/reference/tlfs),它定义了指定这些参数时使用的不同调用约定,并列出了所有公开可用的管理程序功能、分区属性、管理程序和VSM接口。
超调用依赖于特定平台的操作码(如Intel系统的VMCALL、AMD的VMMCALL、ARM64的HVC),调用时会导致VM_EXIT进入管理程序。VM_EXIT是一种事件,会使管理程序以更高的特权级别重新执行其代码,此时虚拟处理器(VP)会被暂停。硬件在特定平台的VMCS(或VMCB)不透明数据结构中维护一个索引,用于指定VM_EXIT的退出原因。管理程序获取该索引,若退出是由超调用引起的,会读取调用者指定的超调用输入值(通常从CPU的通用寄存器读取,如64位Intel和AMD系统的RCX)。
超调用输入值是一个64位的值,指定了超调用代码、其属性和调用约定。有三种调用约定:
- 标准超调用 :将输入和输出参数存储在8字节对齐的来宾物理地址(GPAs)上,操作系统通过通用寄存器(如64位Intel和AMD系统的RDX和R8)传递这两个地址。
- 快速超调用 :通常不允许有输出参数,使用标准超调用中使用的两个通用寄存器仅向管理程序传递输入参数(最大16字节)。
-
超级会员免费看
订阅专栏 解锁全文
5999

被折叠的 条评论
为什么被折叠?



