Step 0: 环境准备 - equation314/RVM-Tutorial GitHub Wiki

0.1 开发环境

  • 硬件:
    • 具有 Intel CPU 的计算机
    • 支持 VT-x (一般都支持),并在 BIOS 中已起用
  • 软件:
    • 建议安装 Ubuntu 等 Linux 操作系统 (不能是虚拟机)

    • 已启用 KVM

      由于我们要在 QEMU 里运行我们的 hypervisor,相当于在虚拟机里运行虚拟机,所以需要用 KVM 提供嵌套虚拟化支持。KVM 启用方法

    • QEMU >= 7.0.0

    • Rust 工具链 (nightly-2022-11-03)

0.2 代码组织结构

  • hypervisor/: hypervisor 的代码。在本阶段建立好执行环境后,之后的阶段将逐步实现 guest OS 的加载与并运行、guest OS 内存管理、VM exit 处理等 hypervisor 的基本功能。
  • rvm/: 实现虚拟化基本功能的独立的模块。提供了 vCPU、嵌套页表等结构的抽象。
  • guest/: 在 guest 模式运行的软件。
    • bios/: 一个简易 BIOS。用于从 16 位实模式切换到 32 位 保护模式,并通过 multiboot 协议启动 guest OS。
    • nimbos/: 一个用 Rust 语言编写的 x86_64 实验操作系统 NimbOS。支持时钟中断、串口外设、调度、多线程用户程序等功能。

0.3 建立执行环境

本教程将实现一个 type-1 的 hypervisor,即 hypervisor 可以直接访问硬件,无需其他 OS 的介入。因此,为了让 hypervisor 自身能够管理硬件资源,和传统 OS 一样,我们需要执行一些通用的启动和初始化流程,包括:

  1. 基于 multiboot 协议的启动。
  2. 初始化处理器所需数据结构,如 x86 的 GDT、IDT。
  3. 初始化串口输出、Local APIC 时钟,设置中断与异常处理程序。
  4. 初始化内存分配器,包括内核堆分配器和物理页帧分配器。

这些功能已在 step0 实现。本教程将侧重 hypervisor 功能的实现,因此不对以上的 OS 基本功能进行过多介绍。