深入探索Linux虚拟化KVM-Qemu分析之CPU虚拟化

说明:

  1. KVM版本:5.9.1
  2. QEMU版本:5.0.0
  3. 工具:Source Insight 3.5, Visio

1. 概述

  • 本文围绕ARMv8 CPU的虚拟化展开;
  • 本文会结合Qemu + KVM的代码分析,捋清楚上层到底层的脉络;
  • 本文会提供一个Sample Code,用于类比Qemu和KVM的关系.

先来两段前戏。

1.1 CPU工作原理

AI的世界,程序的执行不再冰冷,CPU对a.out说,hello啊,world已经ok啦,下来return吧!

既然要说CPU的虚拟化,那就先简要介绍一下CPU的工作原理:

  • CPU的根本任务是执行指令,我们常说的取指-译码-执行-访存-写回,就是典型的指令Pipeline操作;
  • 从CPU的功能出发,可以简要分成三个逻辑模块:
  • Control Unit:CPU的指挥中心,协调数据的移动;
  • ALU:运算单元,执行CPU内部所有的计算;
  • Register:寄存器和Cache,都算是CPU内部的存储单元,其中寄存器可用于存储需要被译码和执行的指令、数据、地址等;
  • CPU从内存中读取指令进行译码并执行,执行的过程中需要去访问内存中的数据,CPU内部的寄存器可以暂存中间的指令和数据等信息,通常说的CPU的context指的就是CPU寄存器值;

在硬件支持虚拟化之前,Qemu纯软件虚拟化方案,是通过tcg(tiny code generator)的方式来进行指令翻译,翻译成Host处理器架构的指令来执行。硬件虚拟化技术,是让虚拟机能直接执行在Host CPU上,让Host CPU直接来执行虚拟机,结合CPU的实际工作原理,应该怎么来理解呢?来张图:

  • CPU通过pc寄存器获取下一条执行指令,进行取指译码执行等操作,因此给定CPU一个Context,自然就能控制其执行某些代码;
  • CPU的虚拟化,最终目标让虚拟机执行在CPU上,无非也是要进行CPU的Context切换,控制CPU去执行对应的代码,下文会进一步阐述;

既然都讲CPU了,那就捎带介绍下ARMv8的寄存器吧:

  1. 通用寄存器:

  • 图中描述的是EL3以下,AArch32与AArch64寄存器对应关系;
  • AArch64中,总共31个通用寄存器,64bit的为X0-X30,32bit的为W0-W30;
  1. 特殊用途寄存器:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值