- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是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);
关于系统虚拟化 : Understanding IO virtualization and role of hypervisor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995768/
我在使用自定义 ListView 时遇到了一些问题(滚动 ListView 时内部的复选框丢失了它们的状态)。我可以在不枚举可视化树的情况下禁用 ListView 虚拟化吗?
我有一个 ItemsControl包含我想虚拟化的数据列表,但是 VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于 ItemsControl . 真
有没有人有我可以在 WPF 应用程序中使用的功能虚拟化 WrapPanel? 我已经在 http://virtualwrappanel.codeplex.com/ 下载并尝试了实现.但是,我收到以下异
我试图弄清楚这个虚拟化功能,我不确定我是否理解错误或发生了什么,但我正在使用 ANTS 内存分析器来检查虚拟化 TreeView 中的项目数,它只是不断增加。我有一个包含 1,001 个项目(1 个根
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
我们正在尝试想出一种虚拟化 TreeView 的好方法,数据并不是真正的问题,因为它非常轻(每个项目大约 16 字节),问题是我们可能有数万个,虽然实际数据只占用 160 kb 内存,但 TreeVi
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
WPF 4 是否还包含一个虚拟化的 WrapPanel,或者从现有面板派生一个是否容易。我想制作一个地址 View ,例如 outlook。 最佳答案 我认为不可能实现具有完全虚拟化(双向)的 Wra
我有一个 VB6 应用程序,我已经销售了 12 年多。有时我的用户很难让应用程序运行。数据写入将进入/My Documents,因此除了安装文件(EXE 等)之外什么都没有进入 C:\Program
我试图将一个新环境的要求放在一起,以包含运行 Sql Server 的 TeamCity、几个构建代理(目前)和一个 SVN 存储库。 目前有 6 个开发人员,将有 5 个活跃的解决方案参与 CI 过
关注 this question和 this question ,现在我有一个带有分层数据的 TreeView,如下图所示: 由于数据量大,我转了Virtualization TreeView 的属性
是否有一种简单的方法可以禁用 ListBox 控件上的 UI 虚拟化?我尝试使用“FindName()”方法在 ListBox 控件中查找控件,但如果该控件明显位于 Web 浏览器窗口之外,则无法找到
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我有一个基于 .NET 4.0 的 Winform 应用程序,我使用 Spoon Virtual Application Studio 2012 对其进行了虚拟化。 当我使用 VS 2010 构建应用
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我正在使用“react-virtualized”中的表。一切都很顺利。 我使用 rowRenderer 自定义了我的行,以添加“react-dnd”并让我的行能够被拖动。 我的问题是关于细胞的。可以定
我正在尝试弄清楚是否可以创建一个 SQL 函数,将参数行视为“鸭子类型”。也就是说,我希望能够传递来自具有某些公共(public)列名的不同表或 View 的行,并在函数内对这些列进行操作。 这里有一
我正在构建一个程序,该程序在主程序文件之外具有多个外部库和扩展。我的项目总大小为 134.2 MB。我想用 Turbo Studio 制作它的便携版本,但我面临一个明显的问题;在捕获文件并构建项目后,
这是我试图通过 WPF 实现的目标。 wrappanel 中作为标题和下方按钮的文本 block 。问题是这需要滚动等。我已经使用 ItemsControl 和每个组的绑定(bind)实现了这一点。我
今天我决定最终尝试虚拟化 TreeView。要做到这一点,绑定(bind)是必需的。所以我决定测试两件事——基于类型的 HierarchicalDataTemplate + 虚拟化。 我为一些数据创建
我是一名优秀的程序员,十分优秀!