管理程序将在同一物理计算机上运行的不同操作系统彼此隔离。在此定义内,还存在非易失性内存(如硬盘驱动器或闪存)的分离。
考虑类型2虚拟机管理程序时,很容易理解它们如何分隔非易失性内存,因为它们仅使用基础OS的文件系统实现为每个VM分配不同的“硬盘文件”。
但是,当我开始考虑Type-1虚拟机管理程序时,问题变得更加棘手。他们可以使用IOMMU隔离不同的硬件接口,但是在系统中只有一个非易失性存储器接口的情况下,我看不出它如何提供帮助。
因此,实现它的一种方法是将一台设备分成2个“分区”,并使管理程序解释来自VM的调用并确定这些调用是否合法。我并不热衷于与非易失性接口的通信协议,但是管理程序必须要熟悉那些协议才能做出判决,这听起来(可能)有点过头了。
还有其他方法可以实现这种隔离吗?
答案 0 :(得分:2)
是的,管理程序必须熟悉那些协议才能使隔离成为可能。 开销主要取决于协议。就像基于NVMe的SSD基本上可以在PCIe上运行一样,某些NVMe设备支持SR-IOV,这大大减少了工作量,但有些却不给hyperviosr带来负担。
大多数情况下,此支持是在构建时配置的,例如将为每个来宾分配多少内存,每个来宾的命令特权等,以及当来宾发送命令时,系统管理程序会验证其边界并相应地转发它们。
那么在这种情况下为什么没有像MMU或IOMMU这样的支持呢? 这类设备具有数百种类型,它们具有不同的协议,NVMe,AHCI等,并且如果供应商开始支持这些设备以实现更好的虚拟化,那么他最终将获得一个无法容纳的巨大芯片。