码迷,mamicode.com
首页 > 其他好文 > 详细

虚拟化技术原理

时间:2016-08-20 23:13:37      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

每一个I/O设备的组成由两部分组成:
  设备控制器和设备本身

    控制器:集成在主板上的一块芯片或一组芯片

        真正的硬件操作都是由驱动完成

    驱动程序:通常由设备生产商制作的,一般位于内核中

         每个控制器都有少量的用于通信的寄存器,每个一寄存器表现为一个I/O端口,所有寄存器组合成为设备的IO地址空间

         IO端口是在开机时,向主机的I/O端口空间注册使用的(0-65535),是cup通过总线跟设备打交道的地址


实现输入、输出:
  三种方式:
    1、轮训:cpu处于忙等待状态
    2、中断:网卡收到数据时,立即向中断控制器发起中断请求,让cpu中断正在执行的任务,并且激活内核,内核从网卡的接收缓冲区中将数据复制到内核接收缓冲区(内存中的一小段地址)中,然后让内核处理接收到的数据报文。
  内核处理中断分为两步:
    1、中断的上半部:将请求的数据从网卡接收缓冲区中接收就内核接收缓冲区。
    2、中断的下半部:处理内核接收缓冲区中的数据。
    3、DMA:直接内存访问。自动将接收缓冲区中的数据直接接收进特定的内存中,当接收完毕之后,通知cpu接收完毕。减少cpu的中断频率,提高cpu的利用率

 

OS:
  在OS角度,将计算机组成部件抽象化:
    cpu:时间片
    memory:虚拟地址空间
    I/O:文件


  进程:
    资源集:
      cpu时间
      memory:抽象为虚拟地址空间
  I/O:打开的多个文件。由文件描述符来标示(输入0,标准输出1,错误输出2)
     普通文件
     设备文件
     管道文件

 

x86架构提供了四种特权级别:ring0,1,2,3
cpu可分为四个环:用户空间运行在环3,内核空间运行在环0

内核在设定的时候,都自认为是运行在环0上

 

 

虚拟化:
  cpu虚拟化:
    1、模拟:纯软件方式实现,性能很差。虚拟机运行在模拟出来的cpu上。(模拟出环1,2,3,4)
    2、虚拟
      完全虚拟化:full-virtulization,不知道自己运行在虚拟环境中,需要调用特权命令时直接调用。虚拟出来的架构与地参架构要保持一致
        BT技术:二进制翻译(软件),边翻译边执行。上层架构和底层架构要保持一致(即虚拟机系统架构和物理机的系统架构保持一致)。虚拟机用户空之间可直接运行在物理cpu的环3,只需要虚拟出ring0

        HVM技术:硬件辅助虚拟化,此cpu为特制cpu,比普通cpu多了一个环(环-1,0,1,2,3),物理机的内核运行在环-1上,虚拟机的内核运行在环0上,用户空间都运行在环3上(性能优秀)

       半虚拟化:para-virtulization,知道自己运行在虚拟环境中,需要调用特权指令时,向物理机的内核发起请求,由物理内核进行调用(性能优秀,切需要对虚拟机的内核进行修改)。虚拟出来的架构与底层架构要保持一致

 

  memory:
    进程:线性地址空间
    内核:物理空间

  

  内存虚拟:
    shadow page table技术(影子页表):需要经过两次的内存地址转换。cpu在不同虚拟机之间切换时,需要清空MMU中的缓存,所以TLB中的缓存很难命中,效率低下。
      虚拟机是进程,进程运行时需要申请内存,虚拟机把自己看作是运行在申请来的内存上(虚拟内存),实际上是运行在物理内存上。当虚拟机中的进程需要调用内存时,先将进程所需的线性地址空间地址发送给MMU,由MMU映射到虚拟机申请来的虚拟内存地址,在由shadow page table技术将虚拟内存地址转换到物理内存地址中。

  硬件虚拟化
    MMU Virtulization:MMU虚拟化(硬件虚拟化,需要特定cpu支持)
    Intel:EPT,ExtendedPage Table
    AMD:NTP,Nested Page Table

    TLB virtulization
      tagged TLB

 

I/O:
外存:
硬盘、光盘、U盘
网络设备:
网卡
显示设备:
VGA:frame buffer机制
键盘鼠标:
ps/2,usb

  I/O虚拟化的方式
    模拟(性能较差):完全使用软件来模拟真实硬件

    半虚拟化(性能优秀):只能运用在网卡和硬盘设备上。如果虚拟机向外发一个包,直接由虚拟机中的IO前端驱动(IO frontend)直接转发到物理机中的IO站(IO stack),然后又由物理机的内核直接将IO站中的包通过IO后端驱动(IO backend)来驱动网卡将包发送出去。此方法与模拟的方法比较,减少了在虚拟机中通过软件模拟网卡,然后由虚拟机中的驱动来驱动网卡,再由模拟的网卡将包转发进物理机中的步骤,性能大大提升。

    IO-through:IO透传
多个硬件设备,每台虚拟机通过物理机上内核中的IO管理器(IO Manager)调度到自己专属的硬件设备上。如:有五块硬盘,物理机使用了两块硬盘,剩下的三块硬盘分配到3台虚拟机上,每个虚拟机有自己的专属硬盘。

      需要主板支持透传技术
      Intel:VT-d 在虚拟技术中,实现IO的可靠性,灵活性,和性能的提升。基于北桥的硬件辅助的虚拟化技术。

 

虚拟化类型:
  Type-I型:xen,vmware ESX/ESXi
    在硬件上不安装操作系统,直接安装一个虚拟化软件,此软件直接接管cpu和内存,所有运行在当前硬件上的主机都是虚拟机

  Type-II型:kvm,vmware workstation,virtul box
    在操作系统上,装上一个虚拟化软件,然后通过虚拟化软件创建并管理多个虚拟机

 

虚拟化技术的分类:
  模拟:IO,CPU,Memory全都是用软件模拟出来。著名的模拟器有PearPC,Bochs,QEMU。
    在硬件上运行着一台主机,主机上运行一个虚拟化模拟软件,此软件可以模拟出一个或多个硬件环境。模拟出的硬件环境就是虚拟机。

  完全虚拟化:也称为native virtulization
    cpu不做模拟,只对其做相应的分配和管理,IO需要做模拟,Memory也不需要做模拟。虚拟的cpu架构和底层的cpu架构要保持一致。

      两种加速方式:
        BT
        HVM
        著名产品:VMware Workstation,VMware Server,Parallels Desktop,KVM,Xen(HVM)

    半虚拟化:xen,uml(user-mode linux)。虚拟出来的架构与物理架构也必须完全一致
      通常需要修改虚拟机的内核,然后实现就请求转发给物理机内核(hypervisor),让物理机内核执行之后再返回(hyper call)给虚拟机

    OS级别的虚拟化:Openvz,lxc,Solaris Containers
      多个用户空间共用一个内核空间,每个用户空间就是一个虚拟机,由一个虚拟机管理器分别多所有虚拟机进行管理。

    库虚拟化:
      wine

    应用程序虚拟化:
      jvm

 

网络的虚拟化:
  桥接(bridge mode):
    物理机上有虚拟机,把物理机上的物理网卡当做交换机,然后再在物理机上虚拟出一个网卡当做物理机的网卡,所有到达此主机的数据都由虚拟出来的交换机根据MAC地址转发

  仅主机模式(host-only mode,开启路由转发功能之后为路由模式(route mode)):需要在宿主机上用软件模拟一个交换机和一个网卡,然后使虚拟机和模拟出来的网卡在同一个网络中。
    虚拟机只能和宿主机通信,不能和宿主机以为的其他主机通信。如果要和外部主机通信,需要将网关直接指向宿主机中模拟出来的网卡上的地址,然后再宿主机上开启路由转发功能,然后再所需与其建立通信关系的外部主机上配置静态路由,网关指向宿主机地址

  nat模式(nat mode)

  自定义虚拟网络(isolation mode)

 

TUN与TAP

  在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。

操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。

虚拟化技术原理

标签:

原文地址:http://www.cnblogs.com/daixiang/p/5791424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!