[MIT 6.S081] Lec 19: Virtual Machines 笔记

Lec 19: Virtual Machines

虚拟机概述

虚拟机: 对计算机的一种模拟, 使得模拟足够运行一个操作系统.
在硬件之上的最底层, 存在一个 VMM(Virtual Machine Monitor, 虚拟机监视器) 用于为客户操作系统模拟一组计算机, 或多或少取代了标准操作系统内核.
原本的用户空间现在有了上层的客户空间(Guest Space), 用于运行一个或多个客户操作系统内核; 下层是主机空间(Host Space), 用于运行虚拟机监视器 VMM.
客户空间又分为客户监管模式(Guest Supervisor Mode)和客户用户模式(Guest User Mode). VMM 模拟实际硬件的工作, 并对着两种模式进行模拟.
在这里插入图片描述

为什么使用虚拟机

  • 在一个计算机上运行多个相互独立的操作系统
  • 开发内核, 更容易调试
  • 新增的 VMM 提供的抽象可以实现更多功能. 如快照, 镜像等

虚拟机的目标

提供一种对于物理服务的完全准确的模拟
不希望客户软件意识到其运行在虚拟机中
客户软件无法从虚拟机中逃逸

实现虚拟机

纯软件解析指令的方法

通过软件读取每条指令并模拟硬件状态.
概念上简单直观, 运行速度很慢.

Trap and Emulate

在 CPU 运行客户指令, 该方案使用更广泛, 速度更快.
将客户应用程序的指令加载到内存, 并使用宿主机硬件直接运行.
对于特权指令, 由于虚拟机运行在用户模式, 会触发 trap 进入到 VMM 中, 由 VMM 模拟这些指令 – Trap and Emulate.

  • 注: 此处 VMM 运行在 Supervisor mode, 代替原本的操作系统作为宿主机内核, 拥有硬件的完整控制权.
虚拟状态信息

VMM 为每个客户操作系统维护一套虚拟状态信息: 包括特权寄存器(STVEC, SEPC 等), (虚拟机)运行的模式(supervisor mode, user mode), hartid(CPU 核编号)
在这里插入图片描述

页表

客户操作系统中的页表: 将客户虚拟内存地址(gva)映射到客户物理内存地址(gpa). 客户物理地址是由 VMM 给虚拟机分配的地址空间.
VMM 为每个虚拟机维护一个映射表: 将客户物理内存地址(gpa)映射到真实物理地址(hpa).
当客户操作系统向 SATP 寄存器写入新的页表时, 在 trap handler 中, VMM 会创建一个影子页表(Shadow Page Table), 将 gva 映射到 hpa, 并且将该影子页表的地址写入 SATP.
客户操作系统内核认为自己使用的是一个正常的页表, 而硬件实际使用的即该影子页表.
在这里插入图片描述

外部设备
  • 策略 1: 模拟真实的设备. 客户操作系统使用硬件时触发 trap, 由 VMM 进行真实外设的模拟. 每次与外设交互都会触发 trap, 低效, 但是让客户操作系统无法识别自身运行在虚拟机上的唯一方法.
  • 策略 2: 提供虚拟设备. 在 VMM 中构建特殊的设备接口使得客户操作系统中的设备驱动与 VMM 内支持的设备高效交互. (客户操作系统中设计了一个专门对接 VMM 实现的虚拟设备的设备驱动, 这样客户操作系统也意识到自己是在与虚拟设备交互且在虚拟机上运行)
  • 策略 3: 对于真实设备的 Pass-Through. 即硬件设备支持与 VMM 上运行的客户操作系统进行交互.

硬件对虚拟机的支持

原因

  • 虚拟机应用广泛
  • 使用 trap 的虚拟机方案性能不好
  • Intel 的 x86 处理器的许多功能很难虚拟化

具体实现

  • VMM 为每个客户操作系统保存的虚拟状态信息保存在硬件中而非软件中.
  • 客户程序可以在不触发 trap 的情况下执行特权指令. 客户操作系统的软件可以直接执行特权指令来修改保存在硬件中的虚拟寄存器, 而非通过 trap 由 VMM 修改 VMM 保存的虚拟寄存器.
  • 硬件通过对客户操作系统做额外操作防止其滥用寄存器并从虚拟机中逃逸.
    Intel 将 Guest mode 称之为 non-root mode, Host mode 称之为 root mode. 虚拟寄存器在 non-root mode 下使用, 而真实寄存器在 root mode 下使用.
  • VMM 内存中, 通过结构体 VMCS(Virtual Machine Control Structure, 虚拟机控制结构) 与 VT-x 硬件交互. 将虚拟机的初始状态存于 VMCS 中.
  • 对于页表的支持: 客户操作系统可以加载任何值到 CR3 寄存器(用于存放页表地址), 但需要配合 EPT(Extend Page Table, 扩展页表)来将客户操作系统物理地址(gpa)转换为主机物理地址(hpa). 硬件会为客户操作系统中的每个地址完成两次地址的翻译(gva->gpa, gpa->hpa). 同时 EPT 也限制了客户操作系统能够访问的主机物理地址空间.
  • 每个 CPU 核都有独立的 VT-x 硬件(以支持虚拟机), 每个 CPU 核都有用于客户模式的虚拟寄存器和 EPT.

在这里插入图片描述

Dune 的应用

  • Dune 是 Linux 中的一个可加载模块, 作为内核的一部分运行在内核模式(supervisor mode).
  • Dune 使用 VT-x 机制可以运行一个进程切换到 Dune 模式.
  • Dune 能够在硬件层面支持进程同时拥有 Guest Supervisor mode 和 Guest User mode 两种模式, 进程可以在 User mode 中运行未被信任的插件代码(相当于沙箱).
    在这里插入图片描述
  • 通过 Dune, 进程的垃圾回收速度可以变得更快. 通过虚拟 CR3 寄存器指向自己的页面来获取 PTE 的脏位(dirty flag).
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 定义   虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 编辑本段用途   通过虚拟机软件,你可以在一台物理计算机上模拟出一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。对于你而言,它只是运行在你物理计算机上的一个应用程序,但是对于在虚拟机中运行的应用程序而言,它就是一台真正的计算机。因此,当我在虚拟机中进行软件评测时,可能系统一样会崩溃,但是,崩溃的只是虚拟机上的操作系统,而不是物理计算机上的操作系统,并且,使用虚拟机的“Undo”(恢复)功能,我可以马上恢复虚拟机到安装软件之前的状态。 编辑本段虚拟系统与虚拟机区别   虚拟系统其实以Prayaya迅影V3虚拟系统为代表的,通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Vmware,VirtualBox,Virtual pc)不同,虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值