Skip to content

Latest commit

 

History

History
37 lines (20 loc) · 2.09 KB

虚拟化作业1.md

File metadata and controls

37 lines (20 loc) · 2.09 KB

虚拟化作业1

  • 假设在Virtualizable硬件上使用Trap-and-Emulate方法实现CPU虚拟化。

    1. 请描述VM内的用户态进程执行System Call被VM内核处理并返回的全过程。

      1. 第一步是Trap,捕捉所有的系统ISA并陷入
      2. 第二步是Emulate,由具体指令实现相应虚拟化,控制虚拟处理器、虚拟内存、虚拟设备的行为
      3. 第三步回到虚拟机继续执行
    2. 进程内执行Fork Bomb是否会大量增加VMM的线程并大量消耗VMM的资源?

      不会,分配给VM的内存是一定的,Fork Bomb最多将分配给VM的内存用完

  • 假设有一台支持Intel VT-x和8个物理CPU的服务器,在其上运行1个VMM和10个VM,每个虚拟机有4个vCPU。若该VMM使用了VT-x硬件虚拟化,需要创建多少线程为这些VM服务(只考虑CPU虚拟化)?总共需要创建多少个VMCS?

    每个vCPU相当于一个线程,所以应该创建10*4=40个线程为这些VM服务

    同时每个vCPU对应于一个VMCS,所以需要创建40个VMCS

  • ARM v8.0的硬件虚拟化机制为Type-1 VMM所设计,当直接在EL2内运行Type-2 VMM(如KVM)时会存在一些问题。请具体解释会造成哪些问题?为此,KVM/ARM提出了什么样的解决方案?该方案是否存在VM Exit处理路径上的性能问题?

    A1:由于Linux在设计时被假设运行在EL1,因此它只能使用EL1下的系统寄存器,但这些系统寄存器在EL2并不存在。

    A2:在ARM v8.0中,KVM的一部分功能被从Linux中剥离出来,以LowVisor的形式运行在EL2中

    A3:存在性能上的问题,可能会造成KVM和Lowvisor见多次特权级的切换,会对虚拟机的运行性能带来一定的开销

  • 假设使用影子页表机制实现内存虚拟化。现有10个虚拟机,每个虚拟机内有10个进程,VMM总共需要创建多少个影子页表?

    影子页表机制维护了GVA->HPA的映射,需要为每一个进程维护相应的影子页表,也需要为内核维护单独的影子页表,因此需要创建10*(10+1)=110个影子页表