QEMU的AddrRange地址空间对象模型算法总结(QEMU2.0.0)
2015-09-28 09:56
357 查看
QEMU负责对分配给GUEST物理内存,需要一套数据结构对GUEST物理地址空间进行管理。AddrRange 是用来管理地址空间计算的一个对象。QEMU通常使用 AddrRange 表示GUEST物理地址空间范围,所以需要注意的是通过AddrRange计算出来的值,一般代表了GUEST的物理地址空间,其中start代表了该段物理地址空间的其实地址,尤其注意的是,它是GPA
算法总结如下
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相交的地址空间部分,如下图黄色部分所示
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相交的地址空间部分,如下图黄色部分所示
相关文章推荐
- QEMU的128位算法集合(基于QEMU2.0.0)
- QEMU中VCPU线程间的IPI发送核间中断(基于QEMU2.0.0)
- 通过KVM_SET_USER_MEMORY_REGION操作虚拟机内存(Kernel 3.10.0 & qemu 2.0.0)
- Samba服务器的配置
- ARM SERVER 虚拟机挂载多块磁盘问题的解决方法
- eclipse 如何将maven target目录排除在搜索结果之外?
- QEMU VCPU线程同步机制之QemuCond(基于QEMU2.0.0)
- Linux 新api eventfd
- KVM源代码分析1:基本工作原理
- select(poll)实现代码实现分析(基于kernel 3.10.0)
- select(poll)实现代码实现分析(基于kernel 3.10.0)
- 安卓优化
- Vhost Architecture(基于kernel3.10.0 & qemu2.0.0)
- [个人推荐]理解poll_wait
- linux内核的等待队列使用方法,wait_queue_head_t,进程休眠
- [个人推荐] Linux poll机制分析(基于内核3.10.0)
- linux poll 和 等待队列休眠的关系(基于kernel 3.10.0)
- VI VIM 在行首行尾添加文字字符串
- 新手对Bash环境变量解析漏洞的理解 http://www.linuxidc.com/Linux/2014-10/107984.htm
- Android sendevent/getevent 用法