2.KVM模块、QEMU设备模型

本文详细介绍了KVM模块在虚拟化中的核心功能,包括初始化CPU硬件,开启虚拟化模式,以及与用户空间QEMU的配合。KVM在内核加载时初始化,设置CPU虚拟化模式,并通过IOCTL调用与QEMU通信。QEMU在内存管理和设备模拟方面与KVM协同工作,其中内存虚拟化采用影子分页表和VMX/AMD-V扩展技术。处理器的IO指令和MMIO处理分别被KVM和QEMU负责,高性能设备由KVM直接处理,其余由QEMU模拟。
摘要由CSDN通过智能技术生成
  • KVM模块
  1. KVM模块是KVM虚拟机的核心,主要功能是初始化CPU硬件,打开虚拟化模式,将虚拟客户机运行在虚拟机模式下,并对其运行提供一定的支持
  2. KVM在Intel的CPU运行为例
    内核被加载时,KVM模块会先初始化内部的数据结构
    准备完成后,KVM模块检测系统当前的CPU,打开CPU控制寄存器CR4中的虚拟化模式开关,并通过执行VMXON指令将宿主机操作系统(含KVM模块本身)置于虚拟化模式中的根模式
    KVM模块创建特殊设备文件/dev/kvm并等待来自用户空间的命令
    用户空间的应用程序QEMU和KVM模块相互配合,进行虚拟机的创建和运行
  3. 2中的虚拟机创建,可以理解为KVM为某个特定的虚拟客户机(用户空间程序创建并初始化)创建对应的内核数据结构。同时KVM还会返回一个文件句柄来代表创建的虚拟机。针对文件句柄的IOCTL调用对虚拟机做相应的管理
  4. KVM模块与用户空间QEMU的通信接口主要是一系列针对特殊设备文件的IOCTL调用
  5. 针对虚拟处理器最重要的IOCTL调用是“执行虚拟处理器”,用户空间准备好的虚拟机在KVM模块的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。非根模式下,所有敏感的二进制指令都会被处理器捕捉到,处理器在保存后自动切换到根模式,有KVM决定下一步处理
  6. 内存的虚拟化也是由KVM模块实现的
    KVM/QEMU的内存管理
          因为KVM/QEMU在linux中作为一个进程运行,所以分配内存调用malloc()和mmap()函数。当虚拟机申请1GB的物理内存时,KVM/QEMU执行malloc(1<<30),从宿主机上分配1GB虚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值