[音乐]
[音乐]
好,同学们好,今天我们 再来介绍一下关于这个虚拟机监控器,也就是说我们前面提到的
hypervisor 具体的这个实现技术。
同学们可能了解,这个操作系统呢它有几大功能
操作系统其实要管理的是我们的硬件资源,主要管理的是我们的这个 cpu
的资源 和内存的资源和我们的输入输出设备,那么当然还有一些其它的管理了
那么对于我们的虚拟机监控器来讲,它的核心其实也是要 对我们这些底层,因为它现在是离硬件最近的一个软件
所以它的实现呢,主要就是要对底层的硬件做虚拟化,也就说要把,比如说一个 cpu
虚拟给上面 n 个虚拟机,同样 一个内存可能要虚拟给这个上面的 n
个虚拟机 所以它需要做的技术呢,主要是对这个几个资源进行这样的
向多个虚拟机做映射的这样一种技术 所以我们可以看到这个虚拟机监控器它要实现的技术呢
主要是要做这个 cpu 的虚拟化,第二个是内存的虚拟化
第三个呢就是我们所说的这个输入输出设备,就是 I/O 的这个虚拟化
因为这些技术呢,要展开的话呢,会有非常多的内容 由于我们这个课程呢,重点是针对的安全,所以我们对这几个技术呢
只是简单描述一下,它每一个技术它的实现方法 我们先看一下这个
cpu 的虚拟化 那么 cpu 的虚拟化呢,我们这里重点关注是这个
x86 的架构 那么 x86 的体系结构或者 x86
的处理机 我们都知道,它一般分成这个 4 个不同的优先级
也就是前面我们所说的这个环呢,就是从 Ring 0 到 Ring 2,到
Ring 3 那么其中呢,就是 Ring 0 ,就是 0
环它其实具有的优先级是最高的 那么通常呢这个操作系统呢是跑在这个
0 环上面 Ring 3 呢是这个特权是最低的,或优先级是最低的
那么通常呢是跑我们的这个应用程序,呃, 跑应用程序
所以大家可以看到,在这个操作系统里面 就是原来在硬件之上跑的操作系统这个上面
它事实上是分成了这个有特权指令和 非特权指令,也就是
cpu 要执行的指令里面它其实是分了 一些类型,分了两大类型啊,一种类型就是特权指令,一种类型是非特权指令
那么什么是特权指令,什么是非特权指令,我们来看一下啊 非特权指令其实就是指的那些
不能够去改变这个共享资源的值或者状态的这样的一些指令 比如说共享资源包括什么呃
共享资源包括我们的处理器,大家,上面的虚拟机都是要使用的 我们的内存,我们的计时器,还有一些我们特殊的一些寄存
器等等,这些资源都是上面所有的虚拟机都要共享的 呃,共享的。
假如某一些指令在执行的时候并不对这些资源的一些值做改变 那么这样的指令呢其实就是非特权指令
比如说我们这里提到的算数运算的指令 还有逻辑运算的指令,这种指令呢其实是属于非特权指令
它是一个计算过程,它里面不涉及到前面我们提到的这些 处理器、
内存、 计时器和特殊目的的寄存器。
那么特权指令 是指的什么呢?就是所有这个用来访问这些共享资源的
或者说改变它状态的这个指令,那么这一类指令呢其实就包括了
我们前面所,比如说开机和关机,对吧,设置计时器 设置程序计数器,改变重定位寄存器的这样的一些值和
I/O 相关的一些指令 那么关于这部分指令这一块,可能同学们如果有一些这个硬件
方面的,计算机硬件方面的一些知识的这个储备或者相关背景的话
应该更好理解,呃,那么我们这里呢,如果是你只是一个
就是具有一部分计算机基础的同学也没有关系啊,咱们只是把这两个概念做一个区分 那么
VMM 它在执行的时候呢 其实执行非特权指令的时候,可以直接去执行
而对于特权指令,它需要去仿真执行 所以这里面我们提这句话的意思就是说
cpu 的虚拟化主要是要对特权指令做虚拟化
所以我们看一下虚拟化系统下面 这个 cpu 的等级划分它是很困难的
就说一般来讲,比如说我们的,刚才我们其实这块前面也大概提到了啊,就是关于这个
hypervisor 有几种实现方式呃,就是它的实现 方式。
比如说一般来讲,这个 HostOS 操作系统 一般情况下是运行在 0
环,但是为了避免这个 GuestOS 呢去破坏这个它的宿主操作系统
那么 GuestOS 呢它必须运行在比 0 环还低的一个环上面,比如说它运行在
1 环上面 但是这样做的话呢,GuestOS 它实现的这个
功能就必须让它发出线程是 就说是
Ring 0 的,所以虚拟化软件就要不断 地去协调这个 GuestOS 和这个
HostOS 之间线程的一些优先级 那么这样一种转换肯定会导致这个系统的复杂性,降低性能
等等,所以事实上有数据表明 就是说如果通过这种方式去实现这种
cpu 的虚拟化的话,那么会使性能下降 5% 到 40%
所以的话我们这个硬件 cpu 的虚拟化 其实在实现的时候就是为了提高这个
cpu 虚拟化的性能 那么需要硬件来完成不同层级的一个切换
就是相当于我需要把这个操作系统这一环的这个指令 怎么样切换到我的这个虚拟化这个,虚拟化处理这一块来
那么这个处理呢如果完全通过软件来实现,那么带来的性能是很差的 所以的话呢,在服务器这个领域里面,那么
cpu 呢通常 要把 VMM 放在 -1 环,呃, -1
环,这也是前面我们提到的 Intel 和 AMD 要提出它的 VT 或者
VG ,呃就是这个支持虚拟化的硬件这样的技术 它的一个主要目的,主要是通过
cpu 来完成这个 VMM 与这个 GuestOS 之间的隔离
这是硬件虚拟化这一块啊 呃,那么尤其是关于这个
cpu 的虚拟化 那么它主要就是要来做这样一些工作
那么内存虚拟化这一部分 其实大家知道在操作系统里面已经采用了这个虚拟化的工作,就是说
我们有物理地址,虚拟地址这样一个映射关系,对吧
就是从这个一个进程的虚拟地址怎么样映射到这个硬件上的物理地址,这是操作系统
做内存管理的时候要实现的东西。
那么 在虚拟化的环境下面, VMM
那么它要做的时候 这个时候它就是,它所拥有的内存才是真正的物理内存
所以最终的这个物理内存的控制权应该由 VMM
来掌控 那么这样的话呢,上层的这个操作系统
它只是把用户进程的一个虚拟内存转换成了一个伪物理地址 嗯,伪物理地址。
那么这个伪物理地址,就是说客户物理地址 我们把它叫客户物理地址,那么也就是说
GuestOS 的物理地址 但是这个客户物理地址呢,只有通过 VMM
才能够把它真正映射到 这个主机的物理地址,也就说实际的这个机器上的那一块
呃,物理空间,就是内存空间 那么这个内存虚拟化技术在
VMM 里面呢,会有很多的一些实现方法,那么其中很
就是说很经典的一种做法就是通过影子页表,叫 shadow page
table 那么影子页表其实事实上就是给不同的虚拟机分配机器的内存页
就说每一个这个虚拟机都看似有自己的一个这个虚拟的内存页 呃,内存页。
那么操作系统呢对页表的这个频繁更改 当然会,就是这种影子页表这个操作呢会由于你
就说经常操作系统会由于一些进程的使用,它会频繁的去
更新自己的页表,那么这种页表更新呢,如果采用影子页表 的方式进行操作呢,会带来很多的开销,呃,很多的开销
就是相当于我们前面做的这个两级映射的话,会带来很大的开销
所以事实上呢目前这个很多虚拟化的软件,包括 Xen
其实它也支持就是直接从这个进程的这个虚拟地址
怎么样映射到我们的物理地址,这其实也是 未来的一个,主要的一个研究方向了
I/O 的虚拟化这块呢,其实有几种实现方案 我们先来看第一种,就是关于这个宿主型的 I/O 的虚拟化
那么大家知道,在宿主型的这个体系结构里面,就是说虚拟化的软件它必须跑在 一个操作系统之上,呃, 之上。
那么它需要使用这个宿主操作系统的 I/O 设备驱动 呃,I/O 设备驱动。
那么这样的话经常我们可能,同学们可能也会了解,就有这种前端后端驱动
那么它会增加这个驱动之间的一个映射,过程 所以会带来比较大的这个性能开销,呃,性能开销
另外呢就是说,现在的操作系统比如说 Windows、 Linux
,它并没有资源管理的支持 来为这个虚拟机提供性能隔离和这个服务的保证
而这呢却是我们许多这个服务器的环境下的一些基本的要求 那么硬件
I/O 的这个虚拟化的实现技术
这个其实是目前也非常主流的一种实现方法 就是
I/O 子系统的产业趋势就是朝着硬件支持的方向来发展 也就是说,
I/O 的这种映射我不通过软件来做,而是通过硬件来做,这样的话呢
我们可以提高它的性能,呃,提高性能 也就是说直接把
I/O 设备映射到这个虚拟机里面的 这个实现方法由硬件来完成,来支持
比如说大家可能了解, Intel 其实也推出过一款芯片叫 Intel VT-D
呃,VT-D,那么这个 VT-D 就是其实就是目前硬件 I/O
虚拟化的一个代表 好,这就是关于这个服务器虚拟化里面的这个
VMM 的这个三大主要的技术,就是 cpu 虚拟化
内存虚拟化和 I/O 虚拟化的主要的一些思想。
这次课就到这,谢谢