QEMU/KVM源码解析与应用(第一章)

第一章 QEMU与KVM概述

1.1虚拟化简介

1.1.1 虚拟化思想

虚拟化的主要思想:通过分层将底层的复杂、难用的资源虚拟抽象成简单、易用的资源,提供给上层使用。其本质是一个不断虚拟的过程,将底层复杂的接口转换成上层容易使用的接口。

虚拟化思想的内核:底层的资源或者通过空间的分割,或者通过时间的分割,将下层的资源通过一种简单易用的方式转换为另一种资源,提供给上层使用。

汇编语言 C语言
使程序员能够比较简单地实现CPU的执行和内存访问 进一步方便了程序员,使得程序员可以从具体CPU架构指令脱离出来,大部分情况下只需考虑业务即可

1.1.2 虚拟机简介

虚拟机从理论上提供一个执行环境,完成用户指定任务的对象都可以叫做机器。

虚拟机种类 具体
最简单的额虚拟机——进程 进程可以看做是一组资源的集合,有自己独立的进程地址空间以及独立的CPU和寄存器,执行程序员编写的指令,完成一定的任务。操作系统可以创建很多个进程,每一个进程都可以看做是一个独立的虚拟机。
另一种形式的虚拟机——模拟器 可以使为一种硬件指令集编译的程序运行在另一种硬件指令集上。应用程序在源ISA上被编译出来,在模拟器的帮助下,运行在不同的目标ISA上,完全由软件实现。典型的模拟器有QEMU的用户态模拟。
高级语言虚拟机 将源ISA和目标ISA完全分离开。任何需要运行这种虚拟ISA指令的物理ISA平台都需要实现一个虚拟机,该虚拟机能够执行虚拟机ISA指令到物理ISA指令的转化。

1.1.3 系统虚拟化的历史

典型的系统虚拟化解决方案包括VMware Workstation、QEMU、VirtualBox和HyperV。

1.2 QEMU和KVM架构介绍

1.2.1 QEMU与KVM历史

早期的QEMU都是软件模拟的,很明显其在性能上是不能满足要求的。
以色列公司Qumranet基于新的虚拟化指令集实现了KVM,并推广到Linux内核社区。KVM本身是一个内核模块,导出一系列的接口到用户空间,用户空间可以使用这些接口创建虚拟机。

1.2.2 QEMU与KVM架构

KVM本身基于硬件辅助虚拟化,仅仅实现CPU和内存的虚拟化,但一台计算机不仅仅有CPU和内存,还需要各种各样的I/O设备,不过KVM不负责这些。这个时候,QEMU就和KVM搭上了线,经过改造后的QEMU,负责外部设备的虚拟,KVM负责底层执行引擎和内存的虚拟,两者彼此互补,成为新一代云计算虚拟化方案的宠儿。相关引用.

VMX root 宿主机模式
VMX non-root 虚拟机模式
VT-x 支持硬件虚拟化的指令集

CPU虚拟化
内存虚拟化
外设虚拟化
中断虚拟化

1.3 KVM API使用实力

KVM导出了一系列接口供用户态创建、配置、启动虚拟机,典型的用户态软件是QEMU。

ASCII码对应表
QEMU/KVM源码解析与应用(第一章)_第1张图片
KVM通过一组ioctl向用户空间导出接口,这些接口能够用于虚拟机的创建、虚拟机内存的设置、虚拟机VCPU的创建和运行等。可分为以下三类:

类别 功能
系统全局的ioctl 作用对象是KVM模块本身,比如全局的配置项,创建虚拟机的ioctl也在此例
虚拟机相关的ioctl 作用对象是一台虚拟机,比如设置虚拟机的内存布局、创建虚拟机VCPU也在此例
虚拟机VCPU相关的ioctl 作用对象是一个虚拟机的VCPU,比如说开始虚拟机VCPU的运行

你可能感兴趣的:(云,云安全,虚拟机)