虚拟化技术如何关机OS?

How virtualization technology shutdown the OS?

我搜索了一些关于这个问题的东西,比如 KVM,ACPI 等
我猜 OS 实现了一些接口(比如 ACPI?),它可以接收某种信号或命令并自行关闭。
主机通过虚拟化技术发送信号或命令给实例OS。

我的理解对吗?谁能给我一个方向,thx.

大致是这样。

  1. VMM(虚拟机监视器)提供一个来宾 BIOS/UEFI 映像,当 运行 在虚拟机中时,该映像会填充内存中的 ACPI 描述。
  2. 来宾 OS 读取这些 ACPI 表,并找到与电源按钮相对应的按钮设备的描述。它读取分配给该按钮的资源,特别是按钮应该如何发出其状态信号。最常见的是,它将是一个中断,其中包含用于区分多个按钮的寄存器的特定编号和地址。
  3. 当 VMM user/admin 决定按下虚拟电源按钮时,它会使用特定于 VMM 的界面(GUI、CMD 行、脚本等)来命令 VMM 执行此操作。然后 VMM 设置寄存器并将之前协商的中断号注入 guest OS.
  4. 现在目标 OS 有责任对信号做出反应。从它的角度来看,它看起来像是按下了真正的电源按钮。来宾 OS 然后关闭各个进程,刷新磁盘缓存,最后使用特定于平台的设备访问命令虚拟硬件关闭电源(或者,进入休眠、S5 状态、HLT 状态、重启等) .) 如果没有安装来宾软件将其传播到 OS,目标 OS 可能会忽略按钮按下,即 Ubuntu 没有 acpi-tools 包。