虚拟化2.0

系统虚拟化

1.       系统虚拟化的概念

系统虚拟化是指一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。每个虚拟计算机系统(简称为虚拟机)都拥有自己的虚拟硬件(如CPU、内存和设备等),来提供一个独立的虚拟机执行环境。

2.       虚拟机的特征及每个特征的含义

虚拟机的三个特征:同质、高效、资源受控;

同质:虚拟机的运行环境和物理机的环境在本质上需要是相同的;

高效:虚拟机中运行的软件需要有接近在物理机上直接运行的性能;

资源受控:VMM需要对系统资源有完全控制能力和管理权限;

3.       可虚拟化的条件(从指令的角度)

可虚拟化的条件:所有的敏感指令都是特权指令

不可虚拟化的结构称为:虚拟化漏洞。

4.       什么是特权指令,敏感指令

特权指令指系统中有一些操作和管理关键系统资源的指令,这些指令只有在最高特权级上能够运行。

敏感指令指操作特权资源的指令。

5.       VMM的分类(按虚拟平台分类)

完全虚拟化(软件辅助,硬件辅助)、类虚拟化

6.       完全虚拟化特点、类虚拟化特点

①  完全虚拟化

虚拟平台和现实平台是一样的,客户机操作系统无须做任何修改就可以运行。

两个阶段:软件辅助的完全虚拟化、硬件辅助的完全虚拟化。

(1)软件辅助的完全虚拟化

做法:优先级压缩、二进制代码翻译

(2)硬件辅助的完全虚拟化

技术:VT-x

②  类虚拟化

通过在源代码级别修改指令以回避虚拟化漏洞的方式来使VMM能够对物理资源实现虚拟化。

所虚拟的平台是现实中不存在的

7.       VMM的分类(技术架构分类)

Hypervisor(原生)模型、宿主模型、混合模型

各模型的优缺点

Hypervisor(原生)模型

优点:①物理资源虚拟化的效率比较高;②安全性高;

缺点:①设备驱动的工作量大;②很多功能必须在VMM中重新实现;

宿主模型(Hosted)

优点:①充分利用现有操作系统的设备驱动程序;②可直接使用宿主机操作系统的其他功能;

缺点:①VMM的效率和功能受宿主机影响;②安全性相对较低;

混合模型

优点:①开发工作量减小,虚拟化效率较高;⑤安全性高

缺点:①上下文切换的开销会造成虚拟化性能的下降;②很多功能必须在VMM中实现无法借助操作系统

X86基础

1.      X86发展历程

1993年,第一款奔腾处理器发布

1995年-1999年,Intel发布了一系列基于x86架构的奔腾处理器;

2002年-2006年,奔腾4家族处理器占据主导地位;

2006年-  ,处理器进入多核时代 CoreDuo,Core 2 Duo,Intel Core i3,Intel Core i5,Intel Core i7;

最早的X86处理器8086和8088是16位的处理器

Intel研发的第一个微处理器是4位的

x86处理器架构存在虚拟化漏洞

2.     最早的8086的特点

16位(位数指CPU GPR[通用寄存器])

16位寄存器和16位外部数据总线

20位地址寻址(拥有1MB地址空间)

3.      X86内存架构:

①  地址空间

物理地址空间:由CPU实现的物理地址位数所决定

线性地址空间:取决于CPU实现的线性地址位数(外地址总线位数)。

②  地址

逻辑地址(X86特有)

线性地址(虚拟地址):分页:线→物;不分页:线=物

物理地址(总线地址)①有分段,无分页:逻辑→线性=物理;②有分页分段:逻辑→线性→物理;

4.     X86内存管理机制:分段机制、分页机制

分段机制:

①  4个基本构成:逻辑地址、段选择寄存器、段描述符、段描述符表

②  段选择符:16位。逻辑地址的组成部分。

Index(段描述符表索引)

TI(0-GFT、1-LDT)

RPL(权限级别)

③  段寄存器:CS代码段,DS数据段,SS栈段,FS,ES,GS

④  段描述符:基地址、长度等

⑤  线性地址=段描述符32位基地址+逻辑地址偏移量

⑥  段描述符表:GDT(全局)、LDT(本地)

至少一个GDT,可以一个或多个LDT

LDT的段描述符放在GDT中

⑦  寄存器(为GDT/LDT提供基地址):GDTR(32BASE,16LIMIT)、LDTR(结构同段寄存器)

读取/存储:LGDT/SGDT;LLDT/SLDT

分页机制

①  X86一个页的大小是4KB

4GB的虚拟地址空间可划分为1024*1024个页面

②  核心思想:通过页表将线性地址转换为物理地址,并配合旁路转换缓存区(TLB)来加速地址转换过程。

③  三个部件:页表、CR3寄存器、TLB

④  页目录项与页表项中的P(present)字段

P=1:物理页面存在物理内存中;

P=0:页面不存在物理内存中,产生缺页错误。

⑤  CR3

称为页目录基地址寄存器

存放页目录所在的物理地址

⑥  TLB

作用:对最近用到的页面映射进行缓存

实现:VFN到PFN的转换

非直接从TLB中获取物理地址

5.     分段机制地址转换过程(GDT和LDT两种)

实例1   访问GDT

当TI=0时表示段描述符在GDT中:

①先从GDTR寄存器中获得GDT基址。

②然后使用段选择符的高13位地址索引GDT表得到段描述符。

③段描述符包含段的基址、限长、优先级等各种属性,这就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的线性地址。

实例2     访问LDT

当TI=1时表示段描述符在LDT中:

①还是先从GDTR寄存器中获得GDT基址。

②从LDTR寄存器中的高13位在GDT表中索引获取LDT段描述符,从而得到LDT段基址。

③用段选择符的高13位地址在LDT表中索引得到要访问段的描述符。

④段描述符包含段的基址、限长、优先级等各种属性,这就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的线性地址。

6.     分页机制地址转换过程

①CPU访问一个线性地址,在TLB中进行匹配,如果地址映射在TLB中,则跳转到步骤6;否则,发生一次TLB缺失,继续步骤2

②查找页表,如果页面在物理内存中,则跳转到步骤4

③产生缺页错误,由操作系统的缺页错误处理程序进行处理

④页面已在内存中,并且页表已经包含了这个映射继续步骤5

⑤把对应的映射插入到TLB中

⑥ TLB中包含了页面映射,将PFN和线性地址中的偏移量相加,得到物理地址

7.     X86-64的基本模式:

传统模式、长模式

8.     IA-32模式:实模式,保护模式,虚拟8086模式

9.     X86-64的寄存器组

①  通用寄存器

②  内存管理寄存器

③  指令寄存器

④  控制寄存器

⑤  其他寄存器

10.  中断与异常

中断:

中断是一个过程

概念:指当系统出现某种意外,CPU暂停当前程序的执行转而处理意外情况的程序和执行过程。

四个步骤:中断请求-中断响应-中断处理-中断返回

现代计算机架构是由大量的中断事件驱动的

两个阶段:PIC(可编程中断控制器)和APIC(高级可编程中断控制器)

中断分为内部和外部

PIC

共8个中断管脚。优先级高IR0,低IR7

三个重要寄存器:IRR(中断请求寄存器)

                ISR(服务中寄存器)

                IMR(中断屏蔽寄存器)

PIC向CPU提交中断的过程

①  一个或多个IR管脚上产生电平信号,若对应的中断没有被屏蔽,IRR中相应的位被置1.

②  PIC拉高INT管脚通知CPU中断发生

③  CPU通过INTA管脚应答PIC,表示中断请求被收到

④  PIC收到INTA应答后,将IRR中具有最高优先级的位清0并设置ISR中对应的位

⑤  CPU通过INTA管脚第二次发出脉冲,PIC收到后计算最高优先级中断的vector,并将它提交到数据线上

⑥  等待CPU写EOI。收到EOI后,ISR中最高优先级位被清0.

中断屏蔽位:禁止响应某个中断(保证一些重要的程序不被打断)

不能屏蔽的中断:电源故障,重启,内存错误

APIC

产生原因:PIC可以在UP(单处理器)平台上工作,但无法用于MP(多处理器)平台。

两半部分构成:CPU中的本地高级可编程中断控制器(APIC)、南桥中的I/O高级可编程中断控制器(IOAPIC)

IOAPIC通常有24个不具优先级的管脚

IDT表

存放“门”

“门”是中断和异常通往各自处理函数的入口。

IDT表的基地址存放在IDTR寄存器中,IDTR寄存器由一个基地址字段和长度字段构成。

寻找中断函数入口地址的过程

①  中断vector索引号+IDT基地址→中断门

②  中断门中断选择符+GDT基地址→中断段描述符

③  中断段描述符中断基地址+中断门中的偏移→中断处理函数入口的线性地址

异常架构

与中断的区别:异常是在程序的执行过程中同步发生的,CPU当前指令有问题

(内部发生)

中断是与CPU当前指令无关(外部发生)

分为三类:错误、陷阱、终止

11.  I/O架构

按访问方式分为两类:

①Port I/O(端口I/O):通过I/O端口访问设备寄存器;I/O端口地址空间是独立的;

优点:I/O端口的地址码较短;

缺点:不能直接产生IN/OUT命令

②MMIO(内存映射I/O):通过内存访问的形式访问设备寄存器或设备RAM;

不同:MMIO要占用CPU物理地址空间

优点:不用专用I/O指令,任何对存储器数据进行操作的指令都可用I/O操作;

缺点:占用了内存空间的一部分,影响了系统内存容量。内存地址较长,访问时间增加。

12.  DMA

DMA 直接内存访问

定义:将CPU从I/O操作中解放出来,设备就可以绕开CPU直接向内存中复制(或读取)数据。

分为:同步DMA(由软件发起)、异步DMA(由设备发起)

DMA传输过程:

①  DMA请求:CPU对DMAC进行初始化;

②  DMA响应:DMAC对DMA请求进行优先级别判别和屏蔽判别;

③  DMA传输:DMAC获得总线控制权后,CPU即可挂起;

④  DMA结束:当完成规定的成批数据传送后,DMAC是释放总线控制权,并向I/O端发出结束信号。

13.  进程和程序的区别

程序是指一个静态的指令序列,

进程是一个容器,其中包含了当前执行一个程序的特定实例时所用到的各种资源。

14.  上下文

定义:程序(进程/中断)运行时所需要的寄存器的最小集合。

上下文切换

定义:指程序从一种状态切换到另一种状态(例如用户态切换到内核态),或从一个程序切换到另一个程序(例如进程切换)时,导致上下文相关寄存器值的变化行为。

变化指:旧程序(切换前的程序)上下文相关寄存器的值被保存到内存中,新程序(切换后的程序)上下文相关寄存器的值被加载到寄存器中。

三种情况:(1)用户态到内核态的切换;

         (2) 进程切换;

         (3) 到中断上下文的切换;

15.  X86虚拟化技术总结

Xen软件系统原理

1.      Xen软件体系结构组成:XenHypervisor和虚拟域(Domain或Xen虚拟机)

2.     Xen虚拟机:Domain0,IDD,DomainU,HVM

3.     Xen系统启动过程:系统引导过程,Hypervisor启动与初始化过程,Domain0启动过程,DomainU启动过程

4.     Xen产品的

CPU虚拟化(半虚拟化):修改操作系统、超级调用(Hypercall)

CPU虚拟化(硬件支持的完全虚拟化):VT-x

内存虚拟化:影子页表

I/O设备虚拟化半虚拟化I/O:Xen采用分离设备驱动模型来实现I/O虚拟化

完全虚拟化I/O:通过设备模型DM来处理设备访问

5.     Xen虚拟机的生命状态

关机状态

停止状态:占有分配的资源

运行状态

挂起状态:释放了所有的资源

崩溃状态

Xen中的关键技术

1.     超级调用(Hypercall)

含义:从客户机操作系统到VMM的系统调用。此超级调用只能够由处于Ring1的客户操作系统发起,而不能从Ring3发起。

通信对象:超级调用是用于各虚拟机与Xen VMM之间进行同步通信的,如:建立页表、管理内存等。

调用方式:超级调用页表在虚拟机启动前被初始化,在虚拟机内核启动时,这个页表被映射到客户操作系统的一个固定的虚拟地址上。一个超级调用页表被划分为128块,每块长度32字节。

初始化时,我们会为每一块超级调用页表块写入一段发起超级调用的代码。

每一块发起代码,将会以编号的形式,作为参数来发起超级调用。

2.     分离设备驱动:前端驱动、后端驱动

3.     I/O共享环:

通信对象:用于在DomU和Dom0之间传递I/O请求和响应。

通信原理:在不同Domain之间存在的一块固定的共享内存,I/O共享环利用生产者和消费者的机理来产生发送以及响应IO请求。

4.     授权表:作用

Xen系统的共享内存机制建立在域之间的授权机制上

即对共享内存的访问需要预先通过授权

5.     事件通道:

通信对象:事件通道机制用于Hypervisor与虚拟机之间,虚拟机与虚拟机之间的异步事件通知机制。

通信原理:事件通道用于实现虚拟中断

事件通道机制与超级调用机制可以共同完成Xen和Domain之间的控制和交互

KVM虚拟机监视器,VMware

1.     KVM特点

基于x86硬件虚拟化技术

2009年被合并到Linux内核

把Linux转换成一个Hypervisor

可以运行Windows,Linux客户操作系统

KVM的架构可以利用强大的Linux的力量

2.     KVM虚拟化系统运行所处的三种模式和每种模式中CPU所处的状态

①  客户模式

执行非I/O的客户代码。虚拟机运行在客户模式下。

②  内核模式

实现到客户模式的切换。处理因为I/O或者其它指令引起的从客户模式的退出。KVM Driver工作在这种模式下。

③  用户模式

代表客户执行I/O指令

3.     KVM的运行原理

KVM嵌入到Linux内核中

利用Linux内核的调度和资源管理能力管理虚拟资源;

在KVM下,每个虚拟机都是一个Linux进程

按正常进程方式调度

内存也由Linux分配

虚拟机迁移

1.     虚拟机迁移的概念

系统迁移:把整个系统的软件,包括操作系统,完全地移动到另一台机器上。

工作迁移:把某台机器上的一些工作转移到别的机器上

2.     动态迁移概念

在虚拟机运行的情况下,实时地将虚拟机1迁移到另一个虚拟机2.

3.     动态迁移的好处

①  非停机情况下进行迁移,实现在线的系统维护

②  实现不同硬件上的虚拟机动态迁移

③  通过迁移管理工具详细记录迁移,保持追踪

虚拟化实验

# 目的

1、在Windows系统上安装VMware,

2、在VMware上安装Ubuntu系统(虚拟机A),

3、在虚拟机A上安装KVM,

4、利用KVM再安装Ubuntu系统(虚拟机B);

简单来说:既在虚拟机上再创一个虚拟机;

# 环境

## 可能在操作上,大家不习惯,但是由于内存的关系及其他原因,建议安装Server版

Ubuntu Server版的安装教程:http://www.jianshu.com/p/9e77b3ad930a

# 网卡配置(虚拟机A)

auto lo

iface lo inet loopback

## IP地址和网卡请适实际情况修改

vim /etc/network/interfaces

auto eth0

iface eth0 inet dhcp

# 检查CPU是否支持虚拟化(虚拟机A)

egrep -o "(vmx | svm)" /proc/cpuinfo

# 检查系统是否支持KVM

## 安装软件包(虚拟机A)

apt-get install cpu-checker

## 检查(虚拟机A)

kvm-ok

# 检查网关配置(虚拟机A)

## 网关与我们设置的默认网关一致

route -n

# 安装软件包(虚拟机A)

apt-get install vlan bridge-utils

# 在网卡配置文件中追加虚拟网桥配置(虚拟机A)

## IP地址和网卡请适实际情况修改

auto br100

iface br100 inet dhcp

bridge_ports eth0

bridge_stp  off

bridge_maxwait 0

bridge_fd 0

# 启动虚拟网桥(虚拟机A)

ifup br100

# 安装与KVM相关的软件包(虚拟机A)

apt-get install qemu-kvm libvirt-bin ubuntu-vm-builderpm-utils radvd

# 验证操作(虚拟机A)

## 列表但无信息

virsh -c qemu:///system list

# 安装virt-install软件(虚拟机A)

apt-get install virtinst virt-viewer

# 创建虚拟机(B)映像文件(虚拟机A)

qemu-img create -f qcow2 ubuntu-1404-vm.img 5G

# 安装虚拟机(B)的Ubuntu系统(虚拟机A)

## 注意修改<file=?>、<cdrom ISO镜像的PATH>、<-m 内存大小>、<-vnc PORT>

## 此处成功后,终端将陷入无法输命令状态,可选择加入后台任务

kvm -drive file=ubuntu-1404-vm.img -cdrom/mnt/ubuntu-14.04.5-server-amd64.iso -boot d -m 1024 -vga std -k en-us -vnc :1

使用UltraVNC Viewer连接虚拟机B完成安装;

# <IP:PORT>,注意冒号是英文字符

examples:192.168.10.70:1


猜你喜欢

转载自blog.csdn.net/Zhou_ZiZi/article/details/80808676
今日推荐