虚拟化技术深入解析:从管理程序启动到动态内存管理
1. 管理程序启动
管理程序启动流程始于 HvLoader 模块。它会根据 CPU 制造商加载正确版本的管理程序二进制映像,并创建管理程序加载器块。同时,捕获管理程序启动首个虚拟处理器所需的最小处理器上下文。之后,切换到新创建的地址空间,并通过调用管理程序映像入口点 KiSystemStartup 将执行权转移给管理程序。
KiSystemStartup 仅针对引导处理器调用,它会为运行管理程序准备处理器,并初始化 CPU_PLS 数据结构。而真正的初始化工作则交由 BmpInitBootProcessor 函数完成。该函数会执行一系列复杂操作:
- 检查系统并查询 CPU 支持的所有虚拟化特性,如 EPT 和 VPID。
- 确定管理程序调度器,不同系统类型默认调度器不同,可通过 BCD 选项手动覆盖。
- 初始化嵌套优化,使管理程序能在嵌套配置中执行。
- 初始化多个组件,包括内存管理器、硬件抽象层、进程和线程子系统、VMX 虚拟化抽象层、合成中断控制器和 I/O 内存管理单元、地址管理器等。
最后,管理程序通过分配初始硬件相关的虚拟机控制结构并启用虚拟化操作,完成与引导处理器关联的 CPU_PLS 数据结构的构建,并初始化每个处理器的中断映射数据结构。
2. 连接管理程序调试器
若要分析管理程序的启动序列,可连接管理程序调试器。调试器仅支持通过串行或网络传输,且只能在物理机或启用“嵌套虚拟化”功能的虚拟机上使用。具体操作步骤如下:
1. 准备一个支持虚拟化扩展并安装启用 Hyper - V 角色的物理机作为调试系统,或设置嵌套 VM
超级会员免费看
订阅专栏 解锁全文

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



