KVM 虚拟化架构和实现原理
2016-07-07 18:42
232 查看
目录
目录KVM虚拟化架构
devkvm
QEMU
KVM的虚拟化实现
KVM虚拟化架构
KVM是嵌入在Linux操作系统标准内核中的一个虚拟化模块,它能够将一个Linux标准内核转换成为一个VMM,嵌有KVM模块的Linux标准内核可以支持通过kvm tools来进行加载的GuestOS。所以在这样的操作系统平台下,计算机物理硬件层上直接就是VMM虚拟化层,而没有独立出来的HostOS操作系统层。在这样的环境中HostOS就是一个VMM。
每个由KVM创建的GuestOS都是HostOS(或VMM)上的一个单个进程。而在GuestOS上的User-space中运行的Applications可以理解为就是进程中的线程。
需要注意的是:KVM只是虚拟化解决方案的一部分,想要实现全虚拟化,还需要其他的条件:
1. CPU处理器提供的虚拟化支持(VT-x 硬件辅助虚拟化,可以为GuestOS创建虚拟化处理器,本质是对寄存器的隔离模拟和对指令集的划分)。
2. 内存可以通过kvm虚拟化成独立的虚拟化地址(/dev/kvm)
3. I/O虚拟化(QEMU)
==> KVM虚拟化 = KVM内核模块 + /dev/kvm + QEMU
/dev/kvm
Linux操作系统标准内核中的KVM内核模块生成了一个名为/dev/kvm的设备,有了
/dev/kvm设备,使得GuestOS的地址空间(内存地址、磁盘地址)能够独立于标准内核或其他任何GuestOS的地址空间。Linux操作系统目录结构包含的
/dev目录树下的设备对于所有User-space进程或线程(无论是在GuestOS上,还是在VMM上)来说都是通用的,但是每个打开
/dev/kvm设备的不同的进程或线程,所能使用的都是唯一且各不相同的地址映射(为了支持GuestOS间的隔离)。
KVM内核模块通过
/dev/kvm设备提供了内存虚拟化,给予GuestOS与内核或者其他GuestOS相对独立的地址空间。每个GuestOS都有自己的地址空间,并且这些地址空间是在实例化GuestOS时创建映射的。映射给GuestOS的物理内存实际上是映射给这个GuestOS在VMM中相应进程的虚拟内存。
有两种支持Guest地址到Host(VMM)地址的转换方法:
应用LinuxOS维护的一组影子页表(shadow page table)
CPU也可以通过在访问未经映射的内存位置时使用VMM(主机内核)来支持内存转换进程。
所以总的来说,
/dev/kvm设备的作用就是:将不同的GuestOS之间的地址隔离,或将GuestOS和HostOS(VMM)之间的地址隔离
QEMU
QEMU是一个I/O虚拟化解决方案,能够对一个完整的计算机物理层环境进行虚拟化(EG. 磁盘、图形适配器、网络设备)。在GuestOS中生成的所有I/O请求都会被QEMU中途截获,并重新发送到QEMU进程模拟的User Mode中。
KVM的虚拟化实现
KVM内核模块为Linux标准内核引入了一种除现有的Kernel Mode和User Mode之外的新进程模式。这种新模式就称为Guest Mode模式,顾名思义,它用来执行GuestOS的代码。
Linux标准内核的执行模式可以针对不同的运行内容和目的进行定义。Guest Mode的存在就是为了执行GuestOS的代码,但是只针对那些非I/O的代码。I/O代码还需要QEMU来作为支持。
GuestOS可以在两种模式下运行:
在Guest Mode中运行的GuestOS可以支持标准的内核。
在User Mode下运行的GuestOS则支持自己的内核和User-space(Applications)。
相同的是,GuestOS只能够在User Mode下执行I/O操作,而且这是单独使用QEMU-KVM进行管理的。
相关文章推荐
- dubbo+zookeeper构建高可用分布式集群
- 1:wamp如何更改网站根目录DocumentRoot 2:php的error_log文件(txt)会每秒几十K增大
- 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化
- 总线机制+细粒度接口容器架构
- BaaS云架构核心模式之Serverless架构 - 用服务代替服务器(Martin Fowler)
- 原备案在阿里云新增网站图文引导
- 基于scrapy框架的关于58同城招聘网站信息的爬取
- 网站开发常用辅助工具
- 我又回来啦!
- 网站制作如何防御DDOS攻击
- 如何让标题自带头条属性,请看过来!
- Express架构
- 开源网站
- 集群、分布式、负载均衡区别与联系
- 移动芯片主要架构技术特性及产业化应用分析
- 解读x86、ARM和MIPS三种主流芯片架构
- shiro整体架构
- 快的打车架构实践
- Android控件架构与自定义控件
- 基于Dubbo的分布式系统架构(二)-消息中间件在分布式系统中的作用及介绍