您的位置:首页 > 其它

Xen Memory Management

2012-10-23 15:45 337 查看
一.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只有在迁移的时候才用到影子页表,其他时候都用直接访问物理内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: