【发布时间】:2011-08-04 08:50:03
【问题描述】:
在http://www.ecsl.cs.sunysb.edu/elibrary/linux/mm/mm.pdf的书中 第202~203页
if (addr) {
addr = PAGE_ALIGN(addr);
vma = find_vma(current->mm, addr);
if (TASK_SIZE - len >= addr &&
(!vma || addr + len <= vma->vm_start))
return addr;
}
如果 addr 不为零,我们将其对齐到页面边界。我们调用函数 查找 vma() 以查看给定地址是否包含在现有 VMA 中。如果 它不包含在任何 VMA 中,并且映射的结尾在 处理地址空间,我们返回地址。
我的问题是:
为什么我们检查 addr + len vm_start?
addr + len vm_start 怎么可能?如果在 vma 中找到 addr,则 addr > vm_start,对吗?如果 len 是正数(应该是正确的),那么 addr + len vm_start 怎么可能?
【问题讨论】:
标签: c linux memory operating-system linux-kernel