Xen Memory Management

一.x86_64是怎么嵌入到Dom0的线性空间的
 
IA32是通过段保护机制做到的:高64M为Ring-0的Xen空间;
                                                          1G-64M为Kernel的Ring-1空间;
                                                          其他的3G给Application

    x86_64没有段保护机制,必须用页保护机制:2^64-2^47 --> 2^64 ==内核空间
                                                                                  0 -->2^47                == 用户空间
                                                                                  中间空的部分可以作为他用 == 被Xen用了

二.Xen采用直接模式 == Guest OS使用自己的页表直接访问HPA
方法: 页表里的内容为HPA;页表项Guest OS只可读;普通的页Guest OS可直接读写。
          一旦更新引起Page异常。如果想要更新/操作页表,可以调用相应的Hypercall。
          VMM也能保证Guest OS只能访问自己的内存。
Guest OS操作内存的流程:
        1.GuestOS访问一个新内存地址(GVA),PageFault ==> 更新GuestOS的页表
    2.Guest OS先找到页表的GPA,VMM根据GPA找到该GPA对应的HPA(通过P2M)
      ==>相当于页表更新,调用页表更新的Hypercall(GPA,HPA)
    3.如果子页表不存在,需要挂接该子页
      ==>相当于页表挂接操作,调用页表操作的Hypercall(线性地址,HPA)
    4.访问该PT表,重复以上2-3步,最终得到一个GVA==>HPA的地址

三.可写页表
  由于对页表的操作开销比较大(每次都要进行Hypercall调用),在某些情况下可以改进它()。
  方法是:先把页表(实际上只要把总表PD表)拿下来,不让别人访问,把它作为GuestOS的普通的可读写页
                Guest OS随便更改,很多次更改完成后,最后提交给Hypercall,让VMM一次完全的完成更新操作。
  前提:PAE模式。因为PDE只有一个PD页。

四.Balloon驱动(存在的Dom0和DomU中)
  为Dom0和DomU申请/释放内存
  可以查看自己和全Machine的内存状况
  Balloon驱动根据设置在XenStore的中的目标值来自动调整它的内存的大小。

五.共享页是怎么实现的
  Start InfoPage(包括里面的内容)是VMM在Domain初始化时拼成的,它的内容包括了Shared InfoPage和XenStore的连接,进入Domain的前几件事就是把本Doamin的Shared InfoPage利用页表更新上真正VMM已经分配了的存在Start Info Page。
  HVM的PV驱动(主要是)当然也要用Shared Info Page,它的Shared InfoPage是自己拼成的。

4.就算是Dom0利用VT-x不也很好吗,用了吗?

5.PAE模式是什么,有什么影响
  物理地址扩展 (PAE) 允许将最多64GB 的物理内存用作常规的4KB页面,并扩展内核能使用的位数以将物理内存地址从32扩展到36。

Dom0只有在迁移的时候才用到影子页表,其他时候都用直接访问物理内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值