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模块,在这里见到的介绍下 ...
随机推荐
- 【ASP.NET Core快速入门】(十三)Individual authentication 模板、EF Core Migration
Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...
- 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计
配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...
- centos系统安装第三方源EPEL
epel没安装呗 相当于扩展型软件仓库,EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为 ...
- Java开发知识之Java的正则表达式
目录 正则表达式 一丶什么是正则表达式 1.正则表达式简介 2.无正则表达式判断代码 3.使用正则表达式代码. 二丶正则表达式API 三丶正则表达式语法格式 1.正则表达式语法 正则表达式 一丶什么是 ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- 【Java入门提高篇】Day25 史上最详细的HashMap红黑树解析
当当当当当当当,好久不见,最近又是换工作,又是换房子,忙的不可开交,断更了一小段时间,最重要的一篇迟迟出不来,每次都犹抱琵琶半遮面,想要把它用通俗易懂的方式进行说明,确实有一定的难度,可愁煞我也,但自 ...
- Android Studio 1.1.0 比较有用的快捷键
格式化代码:Ctrl + Alt + L清除无效包引用 Alt + Ctrl + O折叠展开代码块 Ctrl + Plus/Minus折叠展开全部代码块 Ctrl + Shift + Plus,Min ...
- HTML5跳转页面并传值以及localStorage的用法
1.首先,你得在那个页面把数据存入localStorage中吧.这个是必须的! localStorage.setItem("user",JSON.stringify(data.al ...
- Django---forms表单使用(1)
使用过Django的同学应该都比较清楚,Django的表单功能是十分强大的,可以完成数据的校验等功能. 下面讲下常用的表单类型.我们讲下创建表单到前台可以正常显示的步骤: 一.创建表单类(可以直接在v ...
- 如何解决angular不自动生成spec.ts文件
"schematics":{ "@schematics/angular:component": { "styleext": ...