в книге 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 <= vma-> vm_start?
как это возможно addr + len <= vma-> vm_start? если в vma найден addr, то addr> vm_start, верно? если len положительно (должно быть, верно), как же addr + len <= vma-> vm_start?