3
書中http://www.ecsl.cs.sunysb.edu/elibrary/linux/mm/mm.pdf 第202頁的〜203一個關於內存管理(Linux)的功能arch_get_unmapped_area
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;
}
如果地址不爲零的問題,我們將其調整到一個頁面邊界。我們調用函數 查找vma()以查看給定地址是否包含在現有VMA中。如果 它不包含在任何VMA中,並且映射的結尾位於 進程地址空間內,我們將返回地址。
我的問題是:
爲什麼我們檢查到addr + len個< =的vma-> vm_start?
怎麼可能addr + len < = vma-> vm_start?如果在vma中找到addr,那麼addr> vm_start,對吧?如果len是正數(應該是正確的),那麼addr + len < = vma-> vm_start?