首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释kvm_userspace_memory_region结构?

解释kvm_userspace_memory_region结构?
EN

Unix & Linux用户
提问于 2020-02-07 05:46:24
回答 1查看 819关注 0票数 1

在链接KVM api中,我可以跨以下结构为客户分配内存。

代码语言:javascript
复制
struct kvm_userspace_memory_region region = {
    .slot = 0,
    .guest_phys_addr = 0x1000,
    .memory_size = 0x1000,
    .userspace_addr = (uint64_t)mem,
    };
    ioctl(vmfd, KVM_SET_USER_MEMORY_REGION, ®ion);

是的,上面的链接解释了每个变量,但我很难理解。以下是我目前的理解,如有任何误解,请指正。

  • 来宾物理内存也是虚拟内存,但对来宾来说,它看起来像物理内存。
  • 用户空间地址是用户代码启动内存地址的地址。

下面是我的怀疑

  • 这个插槽的目的是什么,我是否可以假设它类似于实际的内存物理插槽,我们可以看到,如果我们打开CPU。
  • 一个插槽是否有任何最大内存限制,如果不是,有多个插槽的用例是什么?
  • 内存大小是表示用户空间代码的大小还是我们请求的来宾物理地址的大小?
  • 为什么在这个例子中,来宾物理内存是从4094 (0x1000)开始的,为什么它不是从0开始的。如果有任何内存布局或过程,请解释或提供一个工作链接,我将通过该链接。
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-02-10 10:20:26

这个插槽的目的是什么,我是否可以假设它类似于实际的内存物理插槽,我们可以看到,如果我们打开CPU。

这是一个内存映射。与物理内存插槽没有任何关系。

一个插槽是否有任何最大内存限制,如果不是,有多个插槽的用例是什么?

除了主机可用的内容之外,没有任何限制。多个插槽很有用,因为KVM中的每个内存“槽”可能有不同的属性;目前,与插槽相关联的映射可以是-is(透明),也可以是日志写入,或者是只读的。

此外,以这种方式映射的内存槽从来宾的角度来看是用于“物理”内存的;内存映射I/O的地址空间不映射到内存插槽。这意味着具有不连续物理内存和交错MMIO区域的典型地址空间需要多个时隙来表示。

内存大小是表示用户空间代码的大小还是我们请求的来宾物理地址的大小?

这是内存映射的大小:memory_size字节被映射到客户机内存中,从物理地址guest_phys_addr开始(从来宾的角度),使用线性地址userspace_addr的内存(从主机的角度)。

为什么在这个例子中,来宾物理内存是从4094 (0x1000)开始的,为什么它不是从0开始的。如果有任何内存布局或过程,请解释或提供一个工作链接,我将通过该链接。

在示例中解释了这一点:

对于初始状态,我们将预加载此代码到来宾“物理”内存的第二页(以避免与地址0处不存在的实模式中断描述符表冲突)。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/566243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档