虚拟化技术相关

本文的目的是弄明白虚拟化相关的一些技术概念,KVM,QEMU, hypervisor, libvirt,virt-manager, XEN等等。

我们先整体的理解一下这些概念。

virt-manager是类似与virtual-box,vm-ware等的虚拟机软件,图形化的一个东西,通过它你可以图形话的方式来创建虚拟机,并运行虚拟机。libvirt是被virt-manager调用的一个驱动。 libvirt的作用是封装了更底层的kvm或者XEN的接口。KVM ,XEN其实都属于一种hypervisor. hypervisor的底层就是硬件了,所以hypervisor的作用是管理调用硬件。

然后自下而上,逐步理解

物理服务器或物理服务器

没什么好说的,虚拟化最底层的自然是硬件。

hypervisor

硬件之上就是hypervisor了。Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

如图所示,hypervisor下面是物理服务器,上面运行着各个虚拟机。可以理解为hypervisor可以用软件模拟出硬件如cpu,网卡内存等提供给vm使用。 目前(04302015)主流的hypervisor是VMware vSphere微软Hyper-VCitrix XenServer 、IBM PowerVM、Red Hat Enterprise Virtulization、Huawei FusionSphere、开源的KVMXenVirtualBSD等。

libvirt

hypervisor之上是libvirt。我们知道 hypervisor是一个软件中间层的统称,有着多种实现,比如KVM,XEN等。那么不同实现之间的接口也肯定不同。那么libvirt的作用就是封装这些不同 hypervisor的接口,对外提供统一的接口。libvirt是linux下c语言编写的开源库。通过这个库,你可以不必关心底层的hypervisor是什么实现,只是调用libvirt的标准接口来编程。

virt-manager, virtsh

libvirt之上就是virt-manager了。我们知道libvirt是封装不同hypervisor的一个驱动接口,那么virt-manager就是利用这个标准接口编写出来的虚拟机管理软件。通过virt-manager你可以方便的创建管理虚拟机。假设没有libvirt,virt-manager的编写者可就费劲了,需要了解不同hypervisor对外提供的接口与机制。 你可以把virt-manager理解为windows上常用的virtual-box或 vmware虚拟机管理软件。virsh是virt-manager的命令行模式。

KVM和Xen

hypervisor是一个软件层,具体的实现有kvm和xen等。那么KVM和XEN有什么区别呢?

xen是自定制的hypervisor,对硬件的资源管理和调度,对虚拟机的生命周期管理等,都是从头开始写的。  KVM全称是Kernel-based Virtual Machine, kernel代表的是Linux kernel。KVM是一个特殊的模块,Linux kernel加载此模块后,可以将Linux kernel 变成hypervisor,因为Linux kernel已经可以很好的实现对硬件资源的调度和管理,KVM只是实现了对虚拟机生命周期管理的相关工作。 KVM的初始版本只有4万行代码,相对于xen的几百万行代码显得非常简洁。简单的说,XEN是一个完整的hypervisor,KVM是linux的一个模块。加载了KVM后,可以把linux内核变成hypervisor,因为KVM自己没有实现进程调度等功能,需要使用linux自己kernal的。

KVM 和 QEMU

我们已经知道KVM是linux的一个内核模块而已,那么它就是运行在内核态的一个工具。用户没办法直接控制内核,所以它还需要一个用户态的工具集。这就是QEMU-KVM了。关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU.QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架.   运行在内核态的KVM模块通过/dev/kvm字符设备文件向外提供操作接口.KVM通过提供libkvm这个操作库,将/dev/kvm这一层面的ioctl类型的API转化成为通常意义上的函数API调用,提供给QEMU的相应适配层.    比如说在x86 的CPU上虚拟一个Power的CPU,并利用它编译出可运行在 Power上的程序.KVM使用了QEMU的基于x86的部分,并稍加改造,形成可控制KVM内核模块的用户空间工具QEMU-KVM.所以Linux发行版中分为kernel部分的KVM内核模块和QEMU-KVM工具.这就是KVM和QEMU 的关系。

用户态和内核态

内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序

用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取

为什么要有用户态和内核态

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态 和 内核态

用户态与内核态的切换

所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作.

这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令

这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)

他们的工作流程如下:

  1. 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
  2. 用户态程序执行陷阱指令
  3. CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
  4. 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
  5. 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果
时间: 2025-01-16 21:49:09

虚拟化技术相关的相关文章

学习虚拟化技术需要掌握的知识与能力(未完成版)

我从1993年学习计算机,有过短期的C语言开发经历,现在主要从事网络与系统集成的工作.我可以算是学习计算机比较"早"的一批人了. 1993年的时候,我是从MS-DOS 3.30开始,直到最后的MS-DOS 6.22.Windows系统是从Windows 3.1(中文版)开始,再到Windows 3.11.Windows 95.98一直到现在的Windows 10. 组建Windows网络是在1996年河北省国税局全省联网,是从Windows NT 3.51开始,到后来的Windows

虚拟化技术之虚拟化技术介绍及Xen的应用实现

虚拟化技术是什么: 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源.这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制.一般所指的虚拟化资源包括计算能力和资料存储.--转自百度百科 为什么需要虚拟化:  虚拟化技术在近几年来非常的火热, 实际上在上个世纪60年代, 就已经有了虚拟化的实现.由于

让网络更轻盈——网络功能虚拟化技术的现状和未来(中兴通讯)

让网络更轻盈--网络功能虚拟化技术的现状和未来 2014-08-19     作者:周宇翔(中兴通讯) 随着智能终端和移动互联网的发展,"通信"早已脱离传统的话音和短信,人与人广泛连接,甚至物物相连也成为可期的未来,各种OTT类新业务和商业模式不断在挑战运营商的传统优势地位.传统电信网络基于私有平台部署,采用专用设备,部署周期长.运维复杂,一些运营商意识到想要轻盈转身,必须向这些互联网运营商学习,从根本上改变电信网络的部署和运维方式.2012年10月,AT&T.英国电信.德国电

Linux桌面虚拟化技术KVM介绍及其安装

KVM的简介: KVM,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使 用Linux自身的调度器迚行管理,所以相对亍Xen,其核心源码很少.KVM目前已成为学术界的主流VMM 之一.KVM的虚拟化需要硬件支持(如Intel VT技术戒者 AMD V技术).是基亍硬件的完全虚拟化.而 Xen 早期则是基亍软件模拟的 Para-Virtualization. Linux 内核的虚拟机(Kernel-based Virtual Machine).是

KVM虚拟化技术

KVM虚拟化技术 Qemu-kvm kvm Qemu-kvm创建和管理虚拟机 1.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor.KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上. KVM在具备Intel VT或AMD-V功能的x86平台上运行.它也被移植到S

虚拟化二、Xen虚拟化技术

一.Xen简介 1.Xen简介 Xen 英国剑桥大学研发,开源的VMM,是一种类型 1 虚拟机管理程序,它创建系统资源的逻辑池,使许多虚拟机可共享相同的物理资源. Xen 是一个直接在系统硬件上运行的虚拟机管理程序.Xen 在系统硬件与虚拟机之间插入一个虚拟化层,将系统硬件转换为一个逻辑计算资源池,Xen 可将其中的资源动态地分配给任何操作系统或应用程序.在虚拟机中运行的操作系统能够与虚拟资源交互,就好象它们是物理资源一样. Xen 架构 Xen 运行 3 个虚拟机.每个虚拟机与其他虚拟机都独自

虚拟化技术及ip netns简介

虚拟化技术: Iass:infrastructure as a server 直接启动一个虚拟机,需要什么程序自己安装 Paas:platform as a servicce 启动一个虚拟机,并安装了相应的程序 linux内核: namespace  cgroups namespace: 完成特定资源的隔离,没法控制隔离出来的空间如何指派获得系统资源,比如cpu 内存 文件系统隔离:网络隔离(所有跟网络相关的都隔离):IPC隔离(对名称空间内的PID重新标号,两个不同的名称空间可以使用相同的PI

虚拟化技术之KVM安装与使用

什么是KVM虚拟化技术? KVM(Kernel-based Virtual Machine),主流虚拟化技术之一,集成与Linux2.6之后版本中,通过linux内核提供任务调度及管理. 注:此文档为2014年所写,但内容绝对实用! 安装体验下KVM吧! 操作系统:CentOS 6.5_x64 mini Desktop 一.KVM组件安装与配置网络(首先先更新系统软件:yum update) 1.检查CPU是否支持虚拟化 #KVM虚拟化基于硬件的完全虚拟化,因此需要硬件支持,目前CPU基本都支持

KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机

一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor.KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上. KVM在具备Intel VT或AMD-V功能的x86平台上运行.它也被移植到S/390,PowerPC与IA-64平台上.在Linux内核3.9版中,加入A