linux mmu: vma->vm_start против mm->vm_start

Я не могу понять отношения mm_struct.start_data и vm_area_struct.vm_start

vma = find_vma(mm, mm->start_data);
DBG("mm->start_data(%p) vma->vm_start(%p) mm->end_data(%p) vma->vm_end(%p)\n", (uvp_t)mm->start_data, (uvp_t)vma->vm_start, (uvp_t)mm->end_data, (uvp_t)vma->vm_end);
ASSERT(mm->start_data >= vma->vm_start);

Я нахожу соответствующую vm_area_struct для адреса, представленного mm-> start_data, и не могу понять, почему данные не выровнены по границам vm_start и vm_end. У меня есть следующее: |vma->vm_start|----------|mm->start_data|---------|vma->vm_end|------|mm->end_data|

 mm->start_data(08049f00) vma->vm_start(08049000) mm->end_data(0804a07a) vma->vm_end(0804a000)

1 ответ

vma->vm_start(08049000), vma->vm_end(0804a000) - указывает используемую страницу памяти.
mm-> start_data (08049f00), mm-> end_data (0804a07a) - указывает фактическое расположение данных.
Подробнее: Драйверы устройств Linux, третье издание - Глава 15: Отображение памяти и DMA.

Другие вопросы по тегам