![VirtualBox Guest Additions 之类的东西如何与主机通信?](https://linux22.com/image/1520751/VirtualBox%20Guest%20Additions%20%E4%B9%8B%E7%B1%BB%E7%9A%84%E4%B8%9C%E8%A5%BF%E5%A6%82%E4%BD%95%E4%B8%8E%E4%B8%BB%E6%9C%BA%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
我想象这个过程包括观察虚拟化内存中的某些特定模式并进行更改,但我想知道它究竟是如何工作的。也许是某种新的 bios 调用?(类似于操作系统从 RTC 查询时间。)我感兴趣是因为我想知道我是否可以自己接入它以在主机和客户端之间进行任意数据通信。
答案1
首先要明白,Virtualbox 是安装在主机操作系统上的程序,因此它会附带可执行文件、库和其他资源。其中许多库会调用主机操作系统函数和服务来完成其工作。
Virtualbox 还会将驱动程序安装到操作系统内核中。这些驱动程序定义内核如何为 Virtualbox 的虚拟硬件层提供硬件接口。
虚拟硬件层位于主机操作系统和客户机之间。对于主机来说,它只是另一个程序,但对于客户机来说,它似乎是真实的硬件。
重要的是要理解 Virtualbox 作为一个程序在执行,而客户机也在执行,但两者做的事情完全不同。Virtualbox 与主机合作,向客户机呈现一台假计算机,而客户机只是作为操作系统在假硬件上运行。
操作系统驱动程序通常不适合客户机,或者提供的功能极其有限。客户机不知道它是虚拟机,也无法向主机提问。这就是我们需要客户机工具的原因。
Guest Tools 使用适合虚拟化硬件的驱动程序升级系统驱动程序,并与虚拟硬件通信以询问诸如“我的最大分辨率是多少”之类的问题。VBox 依次询问操作系统,并向客户机报告。
通过在客户机中安装可与 VBox 通信的软件,Guest Tools 还支持其他功能,例如共享文件夹映射。然后,VBox 使用命名管道或 OLE(在 Windows 中)或网络 IPC(Linux)等操作系统技术在其自身和主机操作系统之间来回传递数据。
这里最重要的一点是,客户机不知道它是虚拟机,主机也不知道它正在运行虚拟机。Vbox 位于两者之间,负责所有通信。对物理 BIOS 的依赖并不大。
让您想到 BIOS 的可能是虚拟化扩展。请理解 VT 是一组 CPU 指令,与 BIOS 无关。VBox 运行已编译为 VT 指令调用的代码(在适当的情况下),以便它可以执行与虚拟操作相关的优化指令。再说一次,主机操作系统与此几乎没有关系。