本文话题:
IO虚拟化概述
设备发现 访问截获 设备模拟 设备共享
基于软件的IO虚拟化
基于前端后端的IO虚拟化
基于硬件的IO虚拟化

概述

从处理器的角度看,外设是通过一组I/O资源(端口I/O或者是MMIO)来进行访问的,所以设备的相关虚拟化被称为I/O虚拟化。其思想就是
VMM截获客户操作系统对设备的访问请求,然后通过软件的方式来模拟真实设备的效果。基于设备类型的多样化,I/O虚拟化的方式和特点纷繁复杂。

一个完整的系统虚拟化方案在I/O虚拟化方面需要处理以下几块

虚拟芯片组

虚拟PCI总线布局,主要是通过虚拟化PCI配置空间,为客户机操作系统呈现虚拟的或是直接分配使用的设备。

虚拟系统设备,例如PIC、IO-APIC、PIT和RTC等。

虚拟基本的输入输出设备,例如显卡、网卡和硬盘等。

I/O虚拟化主要包含以下几个方面的虚拟化

I/O端口寄存器

MMIO寄存器

中断

IO虚拟化

下面具体的描述IO虚拟化需要做的工作

设备发现

设备发现就是要让VMM提供一种方式,来让客户机操作系统发现虚拟设备,这样客户机操作系统才能加载相关的驱动程序,这是IO虚拟化的第一步。设备发现取决于被虚拟的设备类型。

模拟一个所处物理总线的设备,这其中包含如下两种类型。

1)模拟一个所处总线类型是不可枚举的物理设备,而且该设备本身所属的资源是硬编码固定下来的。比如ISA设备、PS/2键盘、鼠标、RTC及传统
IDE控制器。对于这类设备,驱动程序会通过设备特定的方式来检测设备是否存在,例如读取特定端口的状态信息。对于这类设备的发现,VMM在给定端口进行
正确的模拟就可以了,即截获客户机对该端口的访问,模拟出结果交给客户机。

2)模拟一个所处总线类型是可枚举的物理设备,而且相关设备资源是软件可配置的,比如PCI设备。由于PCI总线是通过PCI配置空间定义一套完备
的设备发现方式,并且运行系统软件通过PCI配置空间的一些字段对给定PCI设备进行资源的配置,例如允许或禁止I/O端口和MMIO,设置I/O和
MMIO的起始地址等。所以VMM仅模拟自身的逻辑是不够的,必须进一步模拟PCI总线的行为,包括拓扑关系和设备特定的配置空间内容,以便让客户机操作
系统发现这类虚拟设备。

模拟一个完全虚拟的设备

这种情况下,没有一个现实中的规范与之对应,这种虚拟设备所处的总线类型完全由VMM自行决定,VMM可以选择将虚拟设备挂在PCI总线上,也可以完全自定义一套新的虚拟总线协议,这样的话客户机操作系统必须加装新的总线驱动。

访问截获

虚拟设备被客户机操作系统发现后,客户机操作系统中的驱动会按照接口定义访问这个虚拟设备。此时VMM必须截获驱动对虚拟设备的访问,并进行模拟。

非直接分配给客户机操作系统的设备

对于端口I/O,IO指令本身是特权指令,处于低特权的客户机访问端口I/O会抛出异常,从而陷入到VMM中,交给设备模拟器进行模拟。

对于MMIO,VMM把映射到该MMIO的页表设为无效,客户机访问MMIO时会抛出缺页异常,从而陷入到VMM中,交给设备模拟器进行模拟。

对于中断,VMM需要提供一种机制,供设备模拟器在 接收到物理中断并需要触发中断时,可以通知到虚拟中断逻辑,然后由虚拟中断逻辑模拟一个虚拟中断的注入。

直接分配给客户机操作系统的设备

对于端口I/O,可以直接让客户机访问。

对于MMIO,也可以直接让客户机进行映射访问。

对于中断,VMM物理中断处理函数接收到物理中断后,辨认出中断源属于哪个客户机,直接通知该客户机的虚拟中断逻辑。

设备模拟

上一步中我们已经多次提到,下面分类介绍下设备模拟。

基于软件的全虚拟化

虚拟设备与现实设备具有完全一样的接口定义。这种情况下,VMM的设备模拟器需要仔细研究现实设备的接口定义和内部设计规范,然后以软件的方式模拟
真实逻辑电路来满足每个接口的定义和效果。现实设备具有哪些资源,设备模拟器就需要呈现出同样的资源。这种情况下,客户机操作系统原有的驱动程序无需修改
就能驱动虚拟设备。设备访问过程中,VMM通过截获驱动程序对设备的访问进行模拟。

举例:qemu    VMware Workstation

半虚拟化

给客户机操作系统提供一个特定的驱动程序(称为前端),VMM中的模拟程序称为后端,前端将请求通过VMM提供的通信机制直接发送给后端,后端处理
完请求后再发回通知给前者。与传统设备驱动程序流程(前一种方式)比较,传统设备程序为了完成一次操作要涉及到多个寄存器的操作,使得VMM要截获每个寄
存器访问并进行相应的模拟,就会导致多次上下文切换。这种方式能很大程度的减少上下文切换的频率,提供更大的优化空间。

举例:xen   virtio (virtio接下来我会继续研究,主要包括virtio框架、virtio前端驱动、后端实现方式及原理、前端后端共享内存的方式)

 基于硬件的直接分配(实际上已经不是设备模拟了)

直接将物理设备分配给客户机操作系统,由客户机操作系统直接访问目标设备。这种情况下实际上不存在设备模拟,客户机直接通过原有的驱动操作真实硬件。这种方式从性能上说是最优的,但这种方式需要比较多的硬件资源。

基于硬件的直接分配还有一种方式,硬件本身支持虚拟化,本身可以向不同的虚拟机提供独立的硬件支持,设备本身支持多个虚拟机同时访问。比如SR-IOV。(这种方式接下来我会继续研究)

举例:intel vt-d      SR-IOV

一个VMM中,常常是多种虚拟化方式并存。

不同的IO虚拟化方式对比

设备共享

设备虚拟化中,有些设备可以被软件模拟器完全用软件的方式模拟而不用接触实际物理设备,比如CMOS,而有些设备需要设备模拟进一步请求物理硬件的帮助。一般输入输出类设备,如鼠标、键盘、显卡、硬盘、网卡。这些设备都涉及到从真实设备上获取输入或者输出到真实设备上。

对于多个客户机,每个客户机拥有自己的设备模拟器,多个设备模拟器需要共享同一个物理设备,这种情况下,VMM中的真实设备的驱动程序需要同时接收并处理多个客户或进程的请求,达到物理资源的复用。

点击下面的链接可以进入我自己搭建的博客,查看更多关于虚拟化的文章。

原文链接:http://itblogs.ga/blog/20150111003133/  转载请注明出处

虚拟化--IO虚拟化基本原理的更多相关文章

  1. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  2. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  3. 四种主要网络IO虚拟化模型

    本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation.para-virtualization.pass- ...

  4. 基于SR-IOV的IO虚拟化技术

    服务器配置要求 x86服务器内存不能低于32GB 服务器CPU需要支持虚拟化和设备虚拟化 VT-x VT-d,SR-IOV 功能,并且在BIOS中能启用了SR-IOV 网卡配置最起码为千兆配置 支持 ...

  5. CPU、内存、IO虚拟化关键技术及其优化探索

    https://yq.aliyun.com/articles/71295?spm=5176.8091938.0.0.3LQ7NM

  6. CentOS 7下KVM支持虚拟化/嵌套虚拟化配置

    开启虚拟化: cat << EOF > /etc/modprobe.d/kvm-nested.conf options kvm-intel nested=1 options kvm- ...

  7. KVM上如何让虚拟机支持虚拟化(kvm虚拟化的嵌套)

    http://blog.csdn.net/swimming_in_it_/article/details/53320141http://blog.csdn.net/wickedglory/articl ...

  8. dpdk对虚拟化的支持调研

    目录: 虚拟化 dpdk的实现研究 virtio vhost SR-IOV 热迁移相关 研究拓展 本文记录近期对dpdk在虚拟化和云计算领域应用的研究成果,内容梳理如下. 虚拟化 虚拟化,抽象来说,就 ...

  9. 网络IO的虚拟化模型小结

    网络IO的虚拟化模型随着技术发展,出现了多种方式,例如emulation.para-virtualization.pass-through和SR-IOV等,本文试图对其做一个简单的总结. Emulat ...

随机推荐

  1. ios 使用AFN上传图片到服务器

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSe ...

  2. 解析和风天气API的json(objective-C实现)

    暑假在家闲着没事干,心血来潮想做个天气预报APP玩玩,听说和风天气API很好,于是注册并试了下,结果它的JSON是这样的(拿我的家乡武义为例子) {"}},"status" ...

  3. 关于AJAX 的交互模型、交互流程及代码示范

    AJAX  = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...

  4. 【前端】从输入URL到页面加载完成的过程中都发生了什么事情

    把URL分割成几个部分:协议(http, https).网络地址(xxx.xxx.xxx.xxx).资源路径(/xxx/xxx.xx).端口号(默认80). 如果地址不是一个IP地址,通过DNS(域名 ...

  5. 复旦大学2015--2016学年第二学期(15级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(g(\lambda)),g'(\lambda))= ...

  6. GOLANG 基本数据类型 整型

    基本数据类型-整型 种类     有符号(负号)      int8 int16 int32 int64 无符号(无符号) uint8 uint16 uint32 uint64 架构特定(取决于系统位 ...

  7. iOS全军覆没!分分钟教你徒手破解iPhone

    http://iphone.tgbus.com/news/class/201503/20150304141407.shtml 破解id密码的最新dns 218.59.181.182

  8. 浏览器中的Javascript的简单对话框

    简单对话框是指对话框不去做设计,而直接使用默认的,如alert.confirm.prompt: <html> <head> <meta http-equiv=" ...

  9. 测试oracle数据库的脱机备份和恢复

    环境:windows7.Oracle11g 一.脱机备份 脱机备份是指在数据库关闭情况下的数据备份,也称为冷备份. 在书上学到的备份步骤: 1.记录所要备份数据库文件所在的操作系统路径: 2.关闭数据 ...

  10. 空间点绕轴旋转公式&程序(C++)

    关键词:空间旋转.旋转轴 用途:相机位姿估计.无人机位姿估计.3D游戏.3D建模 文章类型:概念.公式总结(本文不带推倒过程,若想了解公式是如何推出来的请搜索文献),C++函数展示 @Author:V ...