首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统虚拟化:了解IO虚拟化和虚拟机管理程序的角色

系统虚拟化:了解IO虚拟化和虚拟机管理程序的角色
EN

Stack Overflow用户
提问于 2012-10-21 15:12:33
回答 1查看 1.6K关注 0票数 4

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

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

让我们假设一个芯片有一个硬件定时器,该定时器将被OS内核用作滴答定时器。让我们假设有2个虚拟机(例如Windows和Linux)在虚拟机管理程序上运行。

所有虚拟机都没有修改其源代码。因此,它们继续发出直接对定时器资源进行编程的指令。

虚拟机管理程序在这里的真正作用是什么?如何真正阻止这两个OSes访问真正的内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 16:33:05

经过一些阅读,我已经达到了一定程度的理解,描述如下:

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

我在这里完整地复制了它:

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

System Virtualization : Understanding IO virtualization and role of hypervisor

虚拟化

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

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

这意味着上述机器都无法访问物理资源。唯一可以访问物理资源的实体是一个称为虚拟机监视器(也称为Hypervisor)的程序。

这一点很重要。请仔细阅读并重新阅读。

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

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

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

简而言之,Windows做了它在非虚拟化环境中应该做的所有事情。在这种情况下,它的操作不会导致实际系统资源的更新,而是虚拟资源(上面的数据结构)的更新。

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

上面描述的一切都是完全/经典的虚拟化。大多数现代CPU都不适合传统的虚拟化。陷阱/故障并不适用于所有指令。因此,在现代设备上很容易绕过虚拟机管理程序。

这就是半虚拟化的产生之处。虚拟机源代码中的敏感指令被替换为对虚拟机管理程序的调用。上面的加载/存储片段可以由调用替换,例如

代码语言:javascript
复制
Hypervisor_Service(Timer Start, Windows, 10ms); 

仿真

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12995768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档