Hypervisor介绍(二)
Hypervisor如何工作
在Hypervisor内部,和OS类似的一系列事件将会发生,只不过是在更高一级的层面上。此时我们讨论的不是OS和多线程,而是VMM和多个OS。VMM调度OS的运行,然后让出CPU的使用权。类似线程和OS的模型,一个OS不会永远下去,下面一些时间将会发生。
– OS遇到了某些问题
– 某个HW事件发生
就像OS为了定义线程的HW资源沙箱会给每个线程分配特定的内存区域一样,VMM也会给每个OS分配特定的内存区域,我们暂且把这些资源分配成为资源沙箱。当一个OS访问了它的沙箱之外的资源时,VMM将会介入并决定下一步做什么。VMM会给每个OS设置特定的资源沙箱,以至于OS会有拥有自己的机器的错觉 - 沙箱内的一切资源都可以被OS所使用,沙箱以外的任何资源的使用都需要VMM的调解。
VMM介入执行的另一个原因是硬件事件的发生。为了防止某个OC一直运行下去,VMM从硬件捕获中断,比如定时器产生的中断。基于定时器中断,VMM可以管理对OS的调度。
硬件沙箱
一个很自然的问题是:VMM怎么处理多个OS和相同硬件外设的对话。在设计和实现VMM时这是一个基本的考虑。正如你能想象的,大多数硬件不能被不同的、不相关的线程同时访问 - 这是OS需要设备驱动的基本原因。设备驱动负责调解来自不同的、不相关线程的访问,并把自己(设备驱动)当做硬件的单个的、统一的用户。在VMM世界中,需要某种模式来允许不同的、不相关的操作系统设备驱动程序来并发地访问硬件设备。实际上,有三种主要的方法(为了减少开支):
- 虚拟化
- 准虚拟化
- 物理的(也称作"直通" 或 “原生的”)
物理/直通设备
最容易的模式是物理模式,有时也称为直通模式,因为OS对硬件的访问直接被允许。这些请求直通硬件,不受VMM的干涉。这对那些不被共享且没有安全风险的设备是理想的。比如,一个简单的串行控制端口是某个OS专用的。在这种情况下,hypervisor允许该OS对此端口的直通访问,禁止任何其他OS对此端口的访问(实际上,其他OS根本看不到这个设备 - 除非它们试图自动启动该设备的驱动)。
在更复杂的设备中,比如提供DMA的设备,由于安全原因直通访问是禁止的。这是因为某个OS里的恶意程序(甚至是故障)可以第一DMA设备进行编程,使其读写该OS沙箱之外的内存。
所以,对于共享的设备将会发生什么?例如多个OS通过一个以太网端口连接到互联网上。但是不是所有OS都可以访问该硬件;它们的驱动程序假设它们拥有该设备的独占访问权。这就是其他两种方案发挥作用的地方。
虚拟化设备
在虚拟化模式中,设备完全是被模拟的。方法是VMM被配置为硬件设备地址范围内的任何访问都会被捕获(设备被放在任何OS的沙箱之外 - 没有OS可以直接访问设备)。给每个捕获设置一个处理程序,VMM提供模拟设备的代码。这意味着当一个OS访问设备的配置寄存器时硬件会产生一个捕获。VMM的捕获处理程序检查OS的请求,根据模拟设备的状态确定该请求的含义,然后把模拟设备的结果返回给OS使OS继续运行。正如你能想象的,有多种类型的设备依赖许多这样的操作去配置并访问这些硬件 - 这将导致吞吐量急剧下降。
准虚拟化设备
准虚拟化模式可以解决上面的问题。通过从设备的物理属性抽象出的逻辑操作,我们可以显著减少对设备操作的请求数量。准虚拟化模式通过创建一个逻辑的理想设备来达成这个目标,然后邀请OS来访问这个虚拟设备,而不是真实的物理设备。
想象一个磁盘的驱动程序。在通常情况下驱动程序会呈现对该类设备几十到几百个寄存器的操作从而实现时序、缓存、SATA总线控制、命令请求、响应队列、数据队列、中断操作、内存管理、块大小、电源管理等等。访问磁盘并实现概念上简单的操作(如读取第七块的内容)要求许多基于寄存器的操作。在虚拟化模型中这很慢(每一个独立的寄存器访问都会引起OS进入捕获,VMM负责模拟操作,然后OS被重新启动)。而且模拟软件本身将会非常复杂 - 毕竟,它需要跟踪每一个模拟寄存器操作的所有状态,还需要共享一个模拟设备并且该设备在设计之初其底层硬件实现不是用来共享的。额外的复杂性意味着额外的成本和bug。
试想一个理想的磁盘设备(由软件人员而不是硬件人员实现),它有一个寄存器包含我们读操作的起始Block号,领一个寄存器指定读取多少个Block。这种情况下OS只需要在第一个寄存器里写入7,在第二个寄存器里写入1。然后OS的设备驱动就可以期待在一个缓存里得到Block 7的内容。这种实现方式要做的模拟操作只是对该理想设备的模拟,而不是更加复杂的真实的设备。
准虚拟化有一个小的、额外的成本 - 每一个OS必须提供一个原生的可以和准虚拟化设备交互的设备驱动。由于准虚拟化设备是理想化的,这要比写一个真实世界的硬件驱动要简单得多。另外,这些理想的硬件设备提供的接口都是标准化的,所以只有很少数量的驱动程序需要写就。一个流行的框架叫做VirtIO,它为磁盘存储、终端访问、网络接口提供理想化硬件设备。VirtIO得到了开源和商业OS的支持。
结论
虚拟机管理器(VMM)或Hypervisor从20世纪60年代中期的大型机时代发展而来,就像OS调度线程一样,VMM调度OS,每个OS都有一个沙箱。如前所述,外设的管理可能对总体吞吐量产生巨大的影响。
关注微信公众号“汽车软件后花园”,获得更多汽车软件技术知识,以及AUTOSAR等学习资料。
Hypervisor介绍(二)相关推荐
- 蒙特卡罗方法介绍( 二)
蒙特卡罗方法介绍( 二) 一.蒙特卡罗求解定积分 蒙特卡洛方法求解定积分有两种方法,一种是上一节中讲的投点法,另外一种是期望法(也称平均值法). 1.1 投点法 给出如下曲线f(x)f(x)f(x), ...
- Python Pillow(PIL)库的用法介绍(二)
Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...
- abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)
abp(net core)+easyui+efcore实现仓储管理系统--解决方案介绍(二) 参考文章: (1)abp(net core)+easyui+efcore实现仓储管理系统--解决方案介绍( ...
- 尼康d850相机参数测试软件,新功能介绍二:景深合成与自动调焦_尼康 D850_数码影像评测-中关村在线...
·新功能介绍二:景深合成与自动调焦 对于D850来说,机身也加入了非常多的新功能,这里还逐一介绍一下.首先我们要说的机身的景深合成功能.什么是景深合成?相信很多朋友都了解,相机在很多环境下,景深太浅是 ...
- 企业级360°全方位用户画像:项目介绍[二]
絮叨两句: 博主是一名软件工程系的在校生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们 人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战 少年 ...
- 《C#零基础入门之百识百例》(五十二)封装介绍 -- 二维多项式求值
C#零基础入门 面向对象 -- 封装介绍 -- 二维多项式求值 前言 一,封装概念 二,封装属性 三,实例练习 -- 二维多项式求值 3.1 题目描述 3.2 问题分析 3.3 参考代码 前言 本文属 ...
- C语言生成midi文件,介绍二个wave 转 midi的开源项目
//lihaoyxj@gmail.com 在进行音频处理时,往往需要把wav数据转成其它格式,而作为音乐编辑类的软件,更多则是要以midi格式去处理. 在这里简单介绍二款开源的有关音频中和midi相关 ...
- 高通 虚拟化 linux android,RAITE Hypervisor介绍
RAITE Hypervisor介绍 Raite Hypervisr 软件架构 中瓴智行自主开发的RAITE Hypervisor是基于微内核的高性能.强实时Type-1型嵌入式Hypervisor, ...
最新文章
- .NET Core 下使用 Kafka
- hazelcast入门教程_Hazelcast入门指南第5部分
- sql GROUP BY子句使用实例
- batchplot放到哪个文件夹_Batchplot使用技巧,转换CAD图纸格式并实现批量打印
- Django运行服务报NameError: name ‘os‘ is not defined-已解决
- python后台架构Django教程——admin管理员站点
- JS 生成英文字母 A-Z
- C语言打印ASCII码
- 微软Windows聚焦锁屏壁纸存放目录
- 计算机保存的快捷方式,保存快捷键ctrl加什么
- 一些相似单词的区别之处
- Linux GDB的实现原理
- 工作之余,你是怎么提高技术的?
- matlab相关值计算公式,相关系数计算公式(Correlation coefficient calculation formula).doc...
- 解救MacBook Pro老电脑显卡
- 国密SM4,layui前端 和.net core后台 加密解密 .net加密解密
- Impala优化基本方案
- 统计相关总结(AWK等)
- 第三篇 考研这一年
- [读书笔记]Core Java: Volume I - Fundamentals Chapter 8
热门文章
- JSP与JavaBeans
- 成功中标 荣联为中国检科院打造一站式生信服务平台
- Python之路 34:并发与并行、锁(GIL、同步锁、死锁与递归锁)、信号量、线程队列、生消模型、进程(基础使用、进程通信、进程池、回调函数)、协程
- 前端学HTTP之web攻击技术
- android drawtext 方法,8.2.13 drawText方法:绘制字符串
- 计算机键盘键盘一个按键坏了,我的世界:如果键盘坏掉一个键,六种情况,哪个会影响你玩MC?...
- 【你好,windows】Win10 x64 1709 X64企业G纯净版2019.7.28
- (数字通信)星座图 平均功率 峰值功率 峰均比 练习题;16-QAM 星座图 格雷编码
- ij社区版如何创建spring项目
- hdu1201 18岁生日(java版本)