QEMU如何实现虚拟机关机和重启

1. 概述

突然发现,QEMU的hmp命令中,只有关机(system_powerdown)和整个系统复位(system_reset,直接虚拟机硬件复位)的命令,并没有虚拟机重启的命令。那QEMU是如何区分和实现虚拟机系统的关机和重启操作的呢?如果再将操作的来源(虚拟机内、虚拟机外)考虑在内,则可以将这个问题拆分成四个问题问题:

  1. 虚拟机内关机操作的实现
  2. 虚拟机外关机操作的实现
  3. 虚拟机内重启操作的实现
  4. 虚拟机外重启操作的实现

对于计算机电源方面的操作,其实可以有多种实现方式,目前主流的操作系统,如Windows、Linux,基本上都是支持基于ACPI机制实现的,以下的介绍也都是基于ACPI机制。并且,可以通过QEMU的qmp事件来获取QEMU发生的一些事件,查看到虚拟机的行为。

2. ACPI电源管理机制

ACPI标准中,会对系统的各种电源状态定义成Sx状态,如正常工作为S0,Win10的休眠对应S4,关机对应S5等。并且在提交给OS的ACPI表中,会定义System State Package,告知OS需要往PM1a/b_CNT.SLP_TYPE控制寄存器写入什么样的数值让系统进入对应的Sx状态。

如,在虚拟机的ACPI表的DSDT子表中,找到如下S5 Package State的定义,即表示需要为PM1a/b_CNT.SLP_TYPE中写入0,让系统进入S5(Soft Off)状态,也就是咱们正常说的关机状态。

3. 虚拟机内关机操作的实现

当在Win10虚拟机内点击Windows菜单中带的关机按钮后,当Windows关闭完各种程序后,在虚拟机关闭的瞬间,QEMU会收到SHUTDOWN事件,并且geust为True表示该关机操作是由Guest OS发起的。

查看QEMU源码,可以发现,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值