虚拟化技术中的Hypercall与VMBus通信机制详解
1. 标志计数与中断处理
在虚拟化环境中,分区可以使用 HvCallSignalEvent 来设置目标分区中的特定标志。通过传递两个参数:与事件端口关联的连接 ID 参数和标志编号(该编号必须低于事件端口的 FlagCount ),就能实现这一操作。 BaseFlagNumber 的值会被加到标志编号上,其结果就是将在对应目标 SINTx 插槽的 HV_SYNIC_EVENT_FLAGS 位图中设置的绝对位位置。
设置标志后,如果不是处于轮询模式,管理程序会尝试向对应的 SINTx 传递边沿触发的中断。接收事件的客户机应使用原子比较和交换(CAS)指令来清除标志,然后通过 APIC 断言 EOI。
HV_X64_MSR_SIEFP 的布局如下:
| 位范围 | 说明 |
| ---- | ---- |
| 63 - 12 | GPFN,SIEFP 映射的位置 |
| 11 - 1 | 保留 |
| 0 | 启用/禁用 SIEFP |
2. Hypercall 机制
Hypercall 可以从运行在环 0(32 位保护模式或长模式)的客户机代码中通过之前描述的 Hypercall 页面机制调用。这里仅讨论 64 位调用约定。
当通过 Hypercall 页面进行调用时,该页面上的指令(如 VM
超级会员免费看
订阅专栏 解锁全文
34

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



