虚拟化程序技术的概述详解

本文详细介绍了虚拟化技术的基本概念、内核态与用户态、特权指令与敏感指令,以及虚拟化的分类。通过硬件辅助的全虚拟化和类虚拟化,阐述了CPU、内存和I/O的虚拟化实现。文章还探讨了Intel的VT-x技术和VT-d在硬件层面如何支持虚拟化。
摘要由CSDN通过智能技术生成
  1. 虚拟化概述
    1.0 概述
    区别与直接调度片上资源/使用物理平台,使用虚拟化技术对于资源的调度会更加灵活和高效,而且可以达到硬隔离的目的;

我们需要 Hypervisor / VMM ( Virtual Machine Monitor) 来实现虚拟化;

虚拟化的目的可以用一句话来概述:虚拟化技术的目的是希望能够截获上层操作系统应用对硬件资源的访问,然后重定向到 VMM 的资源池中,再由 VMM 来对片上资源进行管理;

“虚拟机可以看作是物理机的一种高效隔离的复制”,有以下三个典型特征:

同质,虚拟机的运行环境和物理机的环境本质上相同,但是表现上能够有一些差异;
高效,虚拟机中运行的软件需要有接近物理机(native)中运行的性能;
资源受控,VMM 需要对系统资源有完全控制能力和管理权限,资源的分配 / 监控 / 回收;

基于这样的需求,我们有了虚拟机方案, 比如 KVM, Xen, VMware, ACRN 等等;

1.1 内核态(Kernel mode) 和 用户态(User mode)
x86 CPU 中的操作有两个特权形态:内核态 和 用户态

内核态:如果 CPU 处于内核态,执行的程序可以执行任何 CPU 指令,并且访问内存中的所有地址,包括外围设备,比如硬盘/网卡等等;
用户态:如果处于用户态,只能访问受限的资源,而且不能引用内存或者直接访问外围设备;
所有用户程序运行在用户态,但是有些程序需要做内核态的事情(比如读取硬盘数据,获取硬盘输入),所以这个应用程序 APP x 就需要进行从用户态到内核态的切换,简单来说过程如下:用户态执行 APP x 收到一个 system call,然后设置 mode bit=0 切换到内核态,当内核态中执行完,设置 mode bit=1 切换回到用户态;

1.2 特权指令与敏感指令
首先引入 特权指令(Privileged Instruction)和 敏感指令(Sensitive Instruction)的概念:

特权指令(Privileged Instruction):对于系统中一些敏感资源的管理和读写的指令被定位特权指令,只有处于 Ring 0 才能进行正确执行,否则会丢出异常;
敏感指令(Sensitive Instruction):由于虚拟化的引入,由于 OS 现在处于 Ring1 所以不能执行特权指令,所以交由 Ring 0 的 VMM 来处理执行,这部分指令称为敏感指令;可以理解为客户机中必须交由 VMM 处理的指令;
对于有虚拟化的环境,客户机处于 Ring 1 而不是 Ring 0,如果所有的敏感指令都是特权指令,那么执行任意的敏感指令都会产生 trap,这样保证了客户机中如果进行这些“敏感”操作的指令,都会交给处于 Ring 0 的 VMM 处理;

敏感指令包括:

所有 I/O 指令;
企图访问或者修改 VM mode 或者机器状态的指令;
企图访问或者修改敏感寄存器 / 存储单元的指令;
企图访问存储保护系统或内存 / 地址分配系统的指令;
但是 x86 中有些指令,必须由处于 Ring 0 状态的 VMM 处理,但是工作在 Ring 1 不会产生 Trap,这样的话如果处于 Ring 1 的客户机执行这些指令,不会产生 Trap,也不能被定义为特权指令,这与上一句中的目的相冲突,所以必须也要 Trap 这些 “非特权指令”,x86 中称之为 临界指令(Critical Instructions);

所以 x86 中,敏感指令 = 特权指令 + 非特权指令 / 临界指令,如果一个系统上 敏感指令 = 特权指令,那么为了让 VMM 完全控制硬件资源,我们让虚拟机上的 OS 处于 Ring 1,不能直接执行 敏感/特权指令,而 VMM 处于 RIng 0 ,所以 OS 上执行 敏感/特权指令 的时候,就会 引起陷入 / cause a trap 到 VMM,再由 VMM 来模拟执行引起异常的指令;

临界指令 包括 敏感指令 中的 敏感寄存器指令 和 保护系统指令;

  1. 虚拟化分类
    根据虚拟化实现的方法,我们可以大概分为 操作系统级别虚拟化(OS-level virtulization),全虚拟化(Full virtualization),类/半虚拟化(Para virtulization)和 混合虚拟化(Hybrid-Para virtualization);

操作系统级别的虚拟化技术 不需要对于底层进行改动或者考虑 OS 下面,也没有所谓的 VMM 去监管分配底层资源,而是通过 OS 共享内核的方式,为上层应用提供多个完成且隔离的环境(“the kernel allows the existence of multiple isolated user space instances”),这些 实例(instances),就被称之为 容器(container),虚拟化资源和性能开销很小,而且也不需要硬件的支持,是一种轻量化的虚拟化实现技术;

VMM 虚拟的是现实存在的平台,而且客户机不知道自己是虚拟出来的平台,以为是真实的平台,不需要对于 OS 进行修改,这是 完全虚拟化(Full virtulization);

但是有些情况 VMM 虚拟的平台是现实中不存在的(要经过 VMM 重新定义,需要对于客户机的 OS 进行修改),这是 类/半虚拟化(Para virtulization);

对于完全虚拟化,可以通过硬件/软件辅助的方式来实现;

2.1 全虚拟化(Full virt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值