管理程序的三个基本特征:

  1. 保真度。软件在虚拟机管理程序上执行与在硬件上执行“一样”。
  2. 性能。绝大多数Guest指令可以而且由 CPU 直接执行,无需管理程序的干预。性能的关键是 Guest 内核执行的特权指令的处理。
  3. 安全性。管理程序管理所有硬件资源。

特权指令是每个指令集架构 (ISA) 的一部分,操作系统内核使用它们在执行的应用程序之间复用 CPU,并管理硬件。特权指令可以修改控制每个应用程序的 CPU 寄存器和标志。因此,在正常情况下,特权指令不应被执行,除非是在运行操作系统内核时。例如,指向进程页表的寄存器只能由特权指令修改。这些指令具有特权,可确保操作系统内核保持对 CPU 的控制并防止任何应用程序破坏操作系统内核或其他应用程序。

硬件虚拟化的挑战在于正确处理 Guest 内核中的特权指令。 因为 Guest 以非特权模式运行,以便 Host 操作系统或管理程序可以保持对硬件资源的控制。如果 Guest 内核没有在非特权模式下运行,那么多个 Guest 操作系统内核可以通过运行特权指令来更改 CPU 状态(彼此不知道),从而可能破坏彼此或 Host 操作系统。

只有 Host 操作系统具有执行特权指令的必要权限。 当任何应用程序执行特权指令时,Host 操作系统都会收到通知(例如来自称为陷阱的机制)。陷阱会停止正在执行的程序并将控制权切换到内核,这可能会杀死试图执行特权指令的程序。当在 CPU 上运行 Guest 内核时,由于 Guest 在非特权模式下运行,因此执行的任何特权指令都会类似地对 Host 操作系统或虚拟机管理程序产生陷阱。

处理 Guest 虚拟机的特权指令是虚拟化操作系统的一个基本挑战。历史上在管理程序中用于处理特权指令的一种技术称为陷阱和仿真。使用陷阱和模拟的管理程序通过让 Host 操作系统代表 Guest 操作系统模拟特权指令的行为并允许 Guest 继续执行下一条指令来响应 Guest 操作系统尝试执行特权指令。 通过模拟特权指令的效果,比如更新页表指针,Guest 操作系统可以继续执行,并且管理程序保持控制。虽然陷阱和模拟方法相当简单,但它的缺点是每条被捕获的指令都会付出性能损失,幸运的是,特权指令相对较少,只要大多数指令仍然可以由 CPU 直接执行,性能仍然可以接受。

x86 体系结构对陷阱和仿真设计提出了挑战,一些特权指令在非特权模式下执行时不会产生陷阱,而是简单地忽略这些指令,因此,trap-and-emulate 模型不能用于 x86。

随着时间的推移,二进制翻译和半虚拟化成为陷阱和模拟的替代方案,二进制翻译通过重写正在执行的 Guest 操作系统的二进制代码并将特权指令替换为对管理程序的调用来解决陷阱问题。 VMware 和 VirtualBox 是两个使用二进制转换的成熟的管理程序。二进制翻译的优势在于它几乎可以虚拟化任何与 x86 兼容的操作系统,因为特权指令是在运行时即时翻译的。二进制翻译确实会产生开销,因为必须扫描 Guest 操作系统的可执行文件以获取特权指令。尽管存在一些缺点,但二进制翻译是一种成功的方法,它允许 x86 架构被虚拟化。

半虚拟化需要更改 Guest 内核的源代码,以将任何特权指令替换为对管理程序的调用。半虚拟化与二进制翻译有不同的权衡。例如,半虚拟化需要对每个 Guest 操作系统进行不同的修改。 此外,Windows 等闭源操作系统需要操作系统所有者的合作才能进行必要的修改,半虚拟化的优点包括避免像二进制翻译那样即时翻译 Guest 指令的开销, 以及避免使用陷阱和模拟方法进行陷阱的开销,因为需要陷阱的指令是提前翻译的。

2003 年 Xen 项目的发布是半虚拟化领域的一项重大成就。Xen 证明了半虚拟化可以在 x86 架构上实现接近原生的性能。鉴于 Xen 是开源的,它还为大规模使用虚拟化提供了一种经济高效的高性能解决方案。Xen 发布后,半虚拟化一词的范围扩大,超出了修改操作系统以删除特权指令的含义。该术语已扩展到不仅包括修改后的操作系统,还包括专门为虚拟环境修改或设计的 VM 中的任何虚拟硬件或软件(例如总线或设备)。 半虚拟化设备不必在真实的物理硬件中具有等效的实现,因为它被设计为仅在 VM 中运行。Xen 的拆分驱动模型将被视为半虚拟化设计,因为它的设计仅适用于 Xen 管理程序。

x86 上的硬件虚拟化,由于二进制转换和半虚拟化解决方案允许在 x86 ISA 上进行硬件虚拟化,因此虚拟化的使用在桌面和服务器环境中都有所增长,由于虚拟化的日益普及,两个主要的 x86 供应商 Intel 和 AMD 都宣布扩展 x86 ISA 以使虚拟化 x86 更容易,不需要二进制转换或操作系统半虚拟化。 Intel 将其扩展命名为 Virtual Machine eXtensions (VMX),AMD 将其扩展命名为 Secure Virtual Machine (SVM)。各自的扩展在设计上彼此不同,并且不兼容。第一批带有 SVM 的 AMD CPU 于 2006 年年中出货。简而言之,新指令可以更轻松地创建和控制虚拟机。几乎所有当前的 x86 CPU 都带有硬件虚拟化支持(一些低功耗移动芯片和低成本服务器芯片除外)。通过消除对二进制转换或内核半虚拟化的需求,增加了硬件虚拟化支持使得实现 x86 管理程序变得更加简单。

Hypervisor 技术的演进相关推荐

  1. 一张图来看看.NETCore和前后端技术的演进之路

    一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和前后端分离那些事儿>上,我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core ...

  2. IOT(27)---国内物联网平台的发展、技术架构演进

    国内物联网平台的发展.技术架构演进 本文基于两年来在物联网方面的研发积累,先跟大家探讨国内物联网平台的发展和技术架构演进,再提出作者的物联网完整解决方案. 一.国内物联网平台的发展特点 1.    国 ...

  3. QCon旧金山演讲总结:阿里无线技术架构演进

    \ 编者按:美国时间11月16日,阿里无线事业部资深技术总监庄卓然(花名:南天).阿里无线高级技术专家徐昭(花名:长恭) 在QCon全球软件开发大会旧金山站发表演讲<ALIBABA MOBILE ...

  4. 移动互联网这十年,跨平台技术的演进及 Flutter 的未来

    作者 | 袁辉辉 责编 | 郭   芮 移动跨平台技术演进 1. 引言 移动互联网发展十余年,伴随着 Android.iOS 等智能手机的不断普及,移动端已逐步取代 PC 端,成为兵家必争之地.正所谓 ...

  5. 讲一下创业公司的技术架构演进

    讲一下创业公司的技术架构演进 从2015年6月百度离职后,加入创业公司到现在已经将近两年了.新系统的架构随着时间的推移做了非常多的变化以及调整,在这里对自己系统的架构的演进历程以及为什么做这种优化处理 ...

  6. python gevent async_谈谈Python协程技术的演进

    原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...

  7. 聚光灯下的熊猫TV技术架构演进

    2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的"MDCC 2016 移动开发者大会• 中国"(Mobile Developer Conference Ch ...

  8. 【熊猫TV】《程序员》:聚光灯下的熊猫TV技术架构演进

    2015年开始的百播大战,熊猫TV是其中比较特别的一员. 说熊猫TV是含着金钥匙出生的公子哥不为过.还未上线,就频频曝光,科技号,微博稿,站上风口浪尖.内测期间更是有不少淘宝店高价倒卖邀请码,光内测时 ...

  9. 音视频通讯QoS技术及其演进

    利用多种算法和策略进行网络传输控制,最大限度满足弱网场景下的音视频用户体验. 良逸|技术作者 01 什么是QoS?音视频通讯QoS是哪一类? QoS(Quality of Service)是服务质量的 ...

  10. 胡喜:蚂蚁金服十五年技术架构演进之路

    导读:5 月 6 日,蚂蚁金服副 CTO 胡喜在 2019 年 QCon 上做了<蚂蚁金服十五年技术架构演进之路>的演讲.借此机会,也和大家深入讨论了一下蚂蚁金服对金融科技未来的判断,并首 ...

最新文章

  1. UVA1103分区涂色+vc使用注意事项
  2. 【竞赛题解】Codeforces Round #710 (Div. 3)
  3. laravel 执行php命令报错PHP Parse error: syntax error, unexpected '=' in的解决方式
  4. 亚信安全“双引擎”AI技术 亮相2017华为全联接大会
  5. cad加载tiff影像插件_ENVI影像规则裁剪
  6. 0—1背包问题,回溯实现
  7. ORA-04031错误分析和解决
  8. Kinect人体扫描的多级主动配准:从低质量到高质量
  9. java网页木马代码_能够解网页木马代码的高人来看以下。谢谢!```
  10. word未保存文件关闭之后,如何恢复
  11. 二十九、非谓语动词_作定语
  12. mysql错误:Can’t create TCP/IP socket (10106) 解决方法
  13. windows10 共享视频到 Ipad
  14. 关于 Google Play 商店下载应用一直处于“等待中”的问题
  15. 解读:【阿里热线小蜜】实时语音对话场景下的算法实践
  16. java获取微信公众号二维码
  17. 过来人如何学STM32呢??
  18. 关于怎么给Date类型的数据加上一天的时间
  19. [阅读记录] How to read a paper
  20. 在Python中使用OpenCV进行直线检测

热门文章

  1. Not have a lick 没有一丁点儿
  2. 史上最全的鸿蒙学习资料——润和满天星系列Pegasus资料汇总
  3. Consul:7:Consul Connect使用示例(自动sideCar代理)
  4. 推荐一个不错的在线文档分享网站-Scribd,陆续分享我的电子藏书
  5. ECMAScript 6基础总结
  6. android 微博一键关注,新浪微博怎样一键关注多个好友
  7. 万语千言,不敌一纸情书
  8. 如何成为数据科学家_成为数据科学家
  9. 图像超分之——寻找两张图差异的区域
  10. centos下安装firefox