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等学习资料。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值