Virtualization-Cpu/Memory/IO虚拟化详解

一、定义

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

二、虚拟化的类别

虚拟化的类别有很多,定义也很宽泛;无法做到全面详述。这里将简单说明:

1、模拟:emulation(底层和模拟架构不需要一致);通过软件模拟是需要模拟环Ring0/1/2/3层;但是性能差;所以使用相对较少。

硬件-->Host-->VMM(emulation)-->Virtulization host

2、完全虚拟化(full-virtualization):只虚拟出环ring0(以CPU虚拟化来说明)

  • BT:二进制翻译技术(Binary Translate);将模拟的CPU直接翻译成特权指令;限定虚拟结构平台和底层物理架构必须保持一致。基于软件的完全虚拟化。

    • 优点:不用修改GuestOS内核可以直接使用;应用广泛。
    • 缺点:在VMM捕获特权指令和翻译过程会导致性能的下降。

  • 硬件辅助虚拟化:5个指令环;在环0的底层加了环-1;环0的特权指令给了环-1;HVM(hardware virtulization machine);属于硬件的完全虚拟化。

3、半虚拟化(para-virtulization):Guest明确知道自己运行在虚拟机上;;在执行特权指令时直接向hyper call调用;省去了特权指令的翻译过程。

  • 优点:相对完全虚拟化;性能高;省去了特权指令的翻译过程。
  • 缺点:需要对GuestOS内核的修改;应用有限制。

4、OS级别的虚拟化:硬件-->OS kernel-->多个用户空间

5、库虚拟化:wine

6、应用程序虚拟化:jvm

虚拟化的实现方式:

两种类型:

  • Type-I:Hypervisor;在虚拟机的管理上更加的彻底和可靠。
  • Type-II:宿主机运行在硬件上;可以依赖宿主机的各种管理软件进行虚拟机管理。

三、内存(Memory)虚拟化

内存虚拟化是虚拟机实现中的重要部分。在虚拟机中,虚拟出来的Guest OS和Host OS用的是相同的物理内存,却不能让它们相互影响到。如果OS在物理机上运行,只要OS提供页表,MMU会在访存时自动做虚拟地址(Virtual address, VA)到物理地址(Physical address, PA)的转化。而如果虚拟机上运行时,Guest OS经过地址转化到的“物理地址”并不是真实物理内存上的地址(GVA-->GPA),因此还需要使用软件将其转化为真实物理内存地址(HPA)。也就是说Guest OS要访问VA需要经过GVA-->GPA-->HPA的转化。

  • MMU Virtualization:

    Guest完成GVA-->GPA第一层转化,硬件同时完成GPA到HPA这第二层转化。第二层转化对于Guest OS来说是透明的。Guest OS访问内存时和在物理机运行时是相同的,所以可以实现全虚拟化。这种特性Intel和AMD都有支持。Intel称之为Extended Page Tables (EPT),AMD称之为Nested Page Tables (NPT)。其优点是hypervisor节省了工作,缺点是需要硬件支持。

  • TLB Virtualization:tagged TLB

    TLB:转换后援存储器;原生只存储VA-->PA的对应关系。所以在虚拟内存中的两次转换会导致TLB的命中率失效。致使性能降低。所以使用tagged TLB,它缓存了Guest对象和GVA-->HPA的对应关系。需要CPU的支持。

四、I/O虚拟化的方式

  • 模拟(完全虚拟):完全使用软件来模拟真实硬件;模拟通常硬件;例如键盘鼠标;通过焦点捕获;焦点被哪个主机捕获就被哪个主机使用。性能很差。
  • 半虚拟化:对硬件驱动由前端(IO frontend)直接转到后端(IO backend)调用;通常仅适用于硬盘和网卡。性能高。
  • IO-through:IO透传;直接分配给虚拟机物理设备;例如直接分配一个硬盘或网卡给虚拟机;需要硬件具备IO透传技术;在Xen下由Dom0分配;但是访问使用直接使用;不经过Dom0。需要硬件支持。

I/O具体工作模式:

VMM:对IO的驱动有三种模式:

  • 自主VMM:由VMM自行提供驱动和控制台;
  • 混合VMM:借助于OS提供驱动;

    依赖于外部OS实现特权域

    自我提供特权域

  • 寄宿式VMM:

五、虚拟化网络

bridge:把原宿主机上的网卡当交换机;然后虚拟出一个桥来接收发往宿主机的数据包。

isolation mode:仅guest之间通信;不与外部网络和宿主机通信。

routed mode:与外部主机通信;依赖于静态路由指定到各Guest需经过pnet0。

host-only:不与外部主机通信。

nat:地址转换;在虚拟网卡和物理网卡之间建立一个nat转发服务器;对数据包进行源地址转换。

到此基本虚拟化基础以详解完成。

如有错误;恳请纠正。

Virtualization-Cpu/Memory/IO虚拟化详解,布布扣,bubuko.com

时间: 2024-11-10 00:13:37

Virtualization-Cpu/Memory/IO虚拟化详解的相关文章

java中的io系统详解

java中的io系统详解 分类: JAVA开发应用 笔记(读书.心得)2009-03-04 11:26 46118人阅读 评论(37) 收藏 举报 javaiostreamconstructorstringbyte 相关读书笔记.心得文章列表 Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他

win/linux 下使用 psutil 获取进程 CPU / memory / IO 占用信息

psutil - A cross-platform process and system utilities module for Python 1. 安装 pip 安装即可. windows 下需要安装 vs2008,否则报错: Unable to find vcvarsall.bat 如果已经安装 vs2010 / vs2012 则需要设置环境变量,VS90COMNTOOLS 指向已有的 vs 变量. vs2010 设置如下: VS90COMNTOOLS = %VS100COMNTOOLS%

java知识点分享,IO流详解!

Java知识IO流详解有人觉得IO知识不太重要,其实不然,IO的使用范围很广,最能体现IO价值的就是网络上的数据传递,尤其是进入互联网时代后,各种常见的分布式架构,都少不了IO的体现.并且很多大厂的面试题中都会体现出对IO的重视,包括衍生出来的NIO.序列化等等.因此学好IO,变成了一件很重要的事情.IO基本概念IO可以简单的理解成INPUT和OUT,代表输入输出的意思.输入就是读,输出就是写.IO可以读写硬盘.光盘.内存.键盘.网络等资源上的数据.流IO中的流就相当于现实生活中的水流一样,一打

KVM 虚拟化详解

一.Kvm 简介 KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术).是基于硬件的完全虚拟化.在性能上KVM继承了Linux很好的性能和伸缩性,在虚拟化性能方面,已经达到非虚拟化原生环境95%左右的性能(官方数据).KVM拓展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存,可以过载使用CPU和内存,还可借助KSM技术实现对内存的过量使用,且保证性能依旧非常不错.红帽2008年9月收购. 二.虚拟化 虚拟化:虚拟化是云计算的底层,在硬件基础上跑虚拟机 云计

基于JavaSE阶段的IO流详解

1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有输入流类都是抽象类,是InputStream或者抽象类Reader的子类:而所有输出流都是抽象类,是OutputStream或者Writer的子类.输入输出流的定义是根据流向所决定的,我们可以是本地为一个实体物质,从外界往本地输入,按照本地的状态就是读取,反之,从本地向外写入就是输出.IO流是最基本

Linux性能监控——CPU,Memory,IO,Network

版权声明:本文由刘爽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/107 来源:腾云阁 https://www.qcloud.com/community 一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是

IO模式和IO多路复用详解

网络编程里常听到阻塞IO.非阻塞IO.同步IO.异步IO等概念,总听别人装13不如自己下来钻研一下.不过,搞清楚这些概念之前,还得先回顾一些基础的概念. 1 基础知识回顾 注意:咱们下面说的都是Linux环境下,跟Windows不一样哈~~~ 1.1 用户空间和内核空间 现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址(内存的地址),再通过总线的传递,最后处理器拿到某个物理地址返回的字节. 对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作

Java IO流详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa

IO流详解之代码详解

前面呢已经发了一些理解,整理了注释,整体来说IO这里难度不是很大,代码呢没有详细敲,只写了一个大概总结的内容如下: /** 一切皆文件:文件是所有操作系统保存数据和处理逻辑的唯一方式:不管是.exe,可执行文件,.sh,rar,zip都是文件. * 数据库是文件保存数据的一种方式 * * 文件的信息: * 我们平常做的: * 先找到:文件名(全路径,包括扩展名)URI,URL * D:/akdssald/sds * 在操作:增删改查 * * File类中常用方法 * 1 文件路径信息 * 绝对路