您的位置:首页 > 其它

QEMU的AddrRange地址空间对象模型算法总结(QEMU2.0.0)

2015-09-28 09:56 357 查看
QEMU负责对分配给GUEST物理内存,需要一套数据结构对GUEST物理地址空间进行管理。AddrRange 是用来管理地址空间计算的一个对象。QEMU通常使用 AddrRange 表示GUEST物理地址空间范围,所以需要注意的是通过AddrRange计算出来的值,一般代表了GUEST的物理地址空间,其中start代表了该段物理地址空间的其实地址,尤其注意的是,它是GPA
struct AddrRange {

    Int128 start; /*GPA*/

    Int128 size; 

};
算法总结如下
AddrRange addrrange_make(Int128 start, Int128 size): 定义一个AddrRange范围的GUEST地址空间,起始地址为start, 结束地址为size,如下图所示,黄色代表返回的range

 
bool addrrange_equal(AddrRange r1, AddrRange r2): 判断r1和r2所代表的是同一个地址空间,如下图range1 和 range2代表的是同一个物理地址空间


 
Int128 addrrange_end(AddrRange r): 返回range所代表的物理地址范围的结尾地址


 AddrRange addrrange_shift(AddrRange range, Int128 delta):将range移动delta距离,返回所代表的新的地址空间范围,delta可正可负,代表了移动的方向


 
 bool addrrange_contains(AddrRange range, Int128 addr): 判断addr是否在range所覆盖的范围内, addr在range范围内返回true,如下图所示的addr会返回true


 bool addrrange_intersects(AddrRange r1, AddrRange r2): r1和r2是否有重叠区域部分,重叠返回true,如下图所示的r1和r2就是相交的情况,返回true


 

AddrRange addrrange_intersection(AddrRange r1, AddrRange r2):返回一个range, 代表r1和r2相交的地址空间部分,如下图黄色部分所示


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: