【问题标题】:a question about function arch_get_unmapped_area in memory management(linux)关于内存管理(linux)中函数arch_get_unmapped_area的问题
【发布时间】: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


    【解决方案1】:

    看find_vma源码中的注释就知道答案了:

    /* 查找满足 addr

    因此,find_vma() 可能会返回一个实际上并未映射地址的 vma,因此需要进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      相关资源
      最近更新 更多