6.18 虚拟化(11)selftests(3)set_memory_region_test 内核态
看一下内核态所用函数,逐个分析
kvm_check_cap(KVM_CAP_MEMORY_ATTRIBUTES)
__vm_set_user_memory_region
__vm_set_user_memory_region2
kvm_check_cap(KVM_CAP_NR_MEMSLOTS);
kvm_mmap
kvm_munmap
1.kvm_check_cap(KVM_CAP_MEMORY_ATTRIBUTES)
老生常谈了,查看vm相关的属性
私有内存相关属性,这边直接都是写死的
2.__vm_set_user_memory_region 3.__vm_set_user_memory_region2
将hva映射到gpa,主要操作就是通过KVM_SET_USER_MEMORY_REGION
同样这里对比一下region2
多了一个关于guest_memfd的操作,但是函数调用直接把他俩置0了
这两个的ioctl混在了一起,区别就是结构体大小和检查,如果使用V1的话,是否所有的标志位都是V1支持的
4.kvm_check_cap(KVM_CAP_NR_MEMSLOTS);
本质会返回这个东西,用户可用slot = kvm slot总数 - KVM内置slot使用数量(特殊用途)
5.kvm_mmap 6.kvm_munmap
用 mmap 分配一块内存区域,然后注册到 KVM 作为 guest 的物理内存

查看15道真题和解析
曼迪匹艾公司福利 135人发布