IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [MIT 6.S081] Lec 19: Virtual Machines 笔记 -> 正文阅读

[系统运维][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).
    在这里插入图片描述
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:40:48  更:2021-11-29 16:41:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:45:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码