gpt4 book ai didi

系统虚拟化 : Understanding IO virtualization and role of hypervisor

转载 作者:行者123 更新时间:2023-12-01 02:30:57 25 4
gpt4 key购买 nike

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我想获得对 I/O 虚拟化的正确理解。上下文是纯/完全虚拟化而不是半虚拟化。

我的理解是管理程序虚拟化硬件并为每个沙盒应用程序提供虚拟资源。每个沙箱都认为它可以访问底层硬件,但实际上并非如此。相反,它是执行所有访问的管理程序。正是这方面我需要更好地理解。

假设一个芯片有一个硬件定时器,供操作系统内核用作滴答定时器。假设有 2 个虚拟机(例如 Windows 和 Linux)运行在虚拟机管理程序之上。

所有虚拟机均未修改其源代码。所以他们继续吐出直接对定时器资源进行编程的指令。

管理程序在这里的真正作用是什么?这两个操作系统是如何真正阻止访问真实内容的?

最佳答案

经过一番阅读,我已经达到了一定的理解水平:

https://stackoverflow.com/a/13045437/1163200

我在这里完全复制它:

这是试图回答我自己的问题。

System Virtualization : Understanding IO virtualization and role of hypervisor

虚拟化

虚拟化作为一个概念使多个/不同的应用程序能够在相同的底层硬件上共存,而无需相互了解。

例如,Windows、Linux、Symbian 等成熟的操作系统及其应用程序可以在同一平台上共存。所有计算资源均已虚拟化。

这意味着上述机器都无法访问物理资源。唯一可以访问物理资源的实体是称为 Virtual Machine Monitor(又名 Hypervisor)的程序。

现在这很重要。请仔细阅读并重新阅读。

管理程序为上述每台机器提供了一个虚拟化环境。由于这些机器访问的不是物理硬件而是虚拟硬件,因此它们被称为虚拟机。

例如,Windows 内核可能想要启动一个物理计时器(系统资源)。假设定时器是内存映射 IO。 Windows 内核在定时器地址上发出一系列加载/存储指令。在非虚拟化环境中,这些加载/存储会导致对定时器硬件进行编程。

然而,在虚拟化环境中,这些基于加载/存储的物理资源访问将导致陷阱/故障。陷阱由管理程序处理。管理程序知道 Windows 试图对计时器进行编程。管理程序为每个虚拟机维护计时器数据结构。在这种情况下,管理程序更新它为 Windows 创建的计时器数据结构。然后它对实时定时器进行编程。定时器产生的任何中断首先由管理程序处理。更新虚拟机的数据结构并调用后者的中断服务例程。

长话短说,Windows 完成了它在非虚拟化环境中所做的一切。在这种情况下,它的操作导致更新的不是真实系统资源,而是虚拟资源(上面的数据结构)。

因此,所有虚拟机都认为它们正在访问底层硬件;实际上,他们并不知道,对物理硬件的所有访问都是通过管理程序进行调解的。

上面描述的一切都是完整/经典的虚拟化。大多数现代 CPU 不适合经典虚拟化。陷阱/故障不适用于所有指令。因此,在现代设备上可以轻松绕过管理程序。

这就是半虚拟化应运而生的地方。虚拟机源代码中的敏感指令被对管理程序的调用所取代。上面的加载/存储片段可以被一个调用替换,例如

Hypervisor_Service(Timer Start, Windows, 10ms); 

仿真

仿真是与虚拟化相关的主题。想象一个最初为 ARM 编译的程序在 ATMEL CPU 上运行的场景。 ATMEL CPU 运行一个仿真器程序,该程序解释每个 ARM 指令并在 ATMEL 平台上模拟必要的操作。因此,模拟器提供了一个虚拟化环境。

在这种情况下,系统资源的虚拟化不是通过陷阱和执行模型执行的。

关于系统虚拟化 : Understanding IO virtualization and role of hypervisor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com