2024年6月3日发(作者:)

KVM 介绍(2):CPU 和内存虚拟化

学习 KVM 的系列文章:

(1)介绍和安装

(2)CPU 和 内存虚拟化

(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)

(4)I/O PCI/PCIe设备直接分配和 SR-IOV

(5)libvirt 介绍

(6)Nova 通过 libvirt 管理 QEMU/KVM 虚机

(7)快照 (snapshot)

(8)迁移 (migration)

1. 为什么需要 CPU 虚拟化

X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序

来访问硬件。

Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之…… 就 Linux+x86 来说,

操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。

应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的

运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用

户态和内核态的切换。