KVM架构及模块简介
1.简介
2.架构
3.KVM模块及QEMU
一、简介
KVM(Kernel Virtual Machine)基于内核的虚拟机。阿维·齐维迪(Avi Kivity)在一家名为Qumranet的初创企业开始了KVM的研发工作,开发人员基于Linux Kernel通过加载新的模块使Linux Kernel本身变成一个Hypervisor(管理程序),后KVM模块源代码成为Linux内核源代码的一部分。随后此公司于2008年被红帽公司收购,于是redhat在自己的产品中用KVM替换了Xen。
KVM目前的设计为:通过可加载的内核模块支持客户机操作系统(Linux、Solaris、Windows等等)。
KVM的架构中,虚拟机的实现为常规的Linux进程,由标准的调度程序进行调度。
二、架构
从虚拟机的基本架构上来区分,一般分为两种。
类型一:可以视为特别为虚拟机优化裁剪的操作系统内核。虚拟机监控程序运行在底层软件层,实现系统的初始化、物理资源的管理等操作系统的职能。这一类型的虚拟机监控程序一般会提供一个具有一定特定权限的特殊虚拟机,这个特殊虚拟机运行用户日常操作系统和管理使用的操作系统环境。如:Xen、VMware ESXI和Hyper-V。
类型二:虚拟机监控程序依赖操作系统来实现管理和调度,也会受到宿主操作系统的一些限制。无法为了虚拟机的优化而改变操作系统。如:VMware Workstation、VirtualBox。
而KVM是基于宿主操作系统的类型二的虚拟机。(如果说在windows下使用VMware Workstation,这个就可以类比为在Linux下的VMware Workstation。只不过KVM是通过内核模块的形式实现,充分利用Linux内核既有的实现,最大限度的重用代码。)

左侧是标准的Linux操作系统,KVM内核模块在运行时按需加载进入内核空间运行。KVM本身并不进行任何模拟。相反,它暴露出一个/dev/kvm接口,需要用户空间程序通过借口设置一个客户机虚拟服务器的地址空间,向他提供模拟的I/O,并将它的视频显示映射回宿主的显示屏,目前这个应用程序就是QEMU。
三、KVM模块及QEMU
KVM模块
KVM模块是KVM虚拟机的核心部分。KVM仅支持硬件虚拟化。其主要功能是初始化cpu硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
以KVM在Intel的CPU上运行为例,在被内核加载的时候,KVM模块会先初始化内部的数据结构;之后KVM模块检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关,并通过执行VMXON指令将宿主操作系统置于虚拟化模式的根模式;最后KVM模块创建特殊设备文件/dev/kvm并等待来自用户空间的命令。接下来虚拟机的创建和运行是一个用户空间程序(QEMU)和KVM模块互相配合的过程。
QEMU
QEMU是一个开源的虚拟机纯软件的实现,性能低下。但是其优点是支持本身编译运行的平台上就可以实现虚拟机的功能,甚至虚拟机可以与宿主机不同架构。QEMU代码中有着整套虚拟机的实现,包括处理器、内存虚拟化以及虚拟设备模拟(比如网卡、显卡、存储控制器及硬盘等。)
虚拟机运行期间,QEMU会通过KVM模块提供的系统接口调用进入内核,由KVM模块将虚拟机至于处理器的特殊模式运行。遇到虚拟机输入输出操作,KVM模块会从上次系统调用的接口返回给QEMU,由QEMU来负责解析和处理这些设备。从QEMU角度看,可以说QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的加速,极大提高虚拟机的性能。虚拟机的配置和创建,运行依赖的虚拟设备,用户操作环境和交互,以及一些特殊功能(如动态迁移),都是由QEMU自己实现的。QEMU和KVM模块两者的结合无疑是最合适的选择。而qemu-kvm是为了KVM专门做了修改和优化的QEMU分支。
KVM架构及模块简介的更多相关文章
- Qt5模块简介
原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...
- Qt 学习之路 2(6):Qt 模块简介
Home / Qt 学习之路 2 / Qt 学习之路 2(6):Qt 模块简介 豆子 2012年8月26日 Qt 学习之路 2 20条评论 Qt 5 与 Qt 4 最大的一个区别之一是底层架构 ...
- 常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介
各种系统架构图及其简介 转载请保留出处,不胜人生一场醉汇总. 以下文字和架构图均在本人相关系统设计和架构方案中有所应用. 原文出处:http://space.itpub.net/6517/viewsp ...
- XEN与VMware ESXi、Hyper-V 以及 KVM 架构与特点比较【非原创】
XEN与VMware ESXi.Hyper-V 以及 KVM 架构与特点比较 2018年06月03日 12:47:15 Kim_Weir 阅读数 9402收起 分类专栏: 云计算 版权声明:本文为 ...
- Python::OS 模块 -- 简介
OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...
- 简述KVM架构和Xen架构
暑假最后一篇更新,因为,,,明天我就回学校了. 以下均为个人理解,如果有不对的地方还望各位dalao不吝赐教. 虚拟化 虚拟化是通过Hypervisor程序实现的,Hypervisor的作用是将硬件虚 ...
- Python 的 six模块简介
Python 的 six模块简介 six : Six is a Python 2 and 3 compatibility library Six没有托管在Github上,而是托管在了Bitbucket ...
- signal模块简介
signal模块简介 最近在看Linux signal 相关内容,signal可以被用来进程间通信和异步处理.Python标准库提供了signal包可以用来处理信号相关.这里讨论的是Unix系统中Py ...
- socketserver模块简介
1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其 它的模块是可以的,例如select模块,在这里见到的介绍下 ...
随机推荐
- DNS生产系统架构
主机名控制者: DNS 服务器地址:http://vbird.dic.ksu.edu.tw/linux_server/0350dns_1.php 安装博客:http://www.linuxidc.co ...
- .NetCore2.1 WebAPI新增Swagger插件
说明 Swagger是一个WebAPI在线注解.调试插件,过去我们主要通过手工撰写WebAPI接口的交互文档供前端开发人员或外部开发者, 官网地址:https://swagger.io/. 但是在实际 ...
- shell编程练习(二): 笔试11-20
笔试练习(二): 11.写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. [root@VM_0_5_centos test]# vi 11.sh [root@VM_0_5_cento ...
- ORA-01940 无法删除当前已连接的用户之解决方案
在执行drop user的时候,提示报错信息:ORA-01940: cannot drop a user that is currently connected SQL> drop user l ...
- JAVA_接口_默认方法&静态方法
1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...
- 如何优雅的使用 Python 实现文件递归遍历
今天有个脚本需要遍历获取某指定文件夹下面的所有文件,我记得很早前也实现过文件遍历和目录遍历的功能,于是找来看一看,嘿,不看不知道,看了吓一跳,原来之前我竟然用了这么搓的实现. 先发出来看看: def ...
- 【学习笔记】非监督学习-k-means
目录 k-means k-means API k-means对Instacart Market用户聚类 Kmeans性能评估指标 Kmeans性能评估指标API Kmeans总结 无监督学习,顾名思义 ...
- 【代码笔记】Web-CSS-CSS 语法
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 在angular 6中使用 less
在angular 6中使用 less 新项目 ng new [appname] --style less 已有的项目 修改 *.css 文件及引用处后缀名为 less并在 angular.json 文 ...
- python读取txt文件最后一行(文件大+文件小)
txt文件小 #coding:utf-8 ''' fname为所读xx.txt文件 输出为:文件第一行和最后一行 ''' fname = 'test.txt' with open(fname, 'r' ...