我无法理解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);
我为mm-> start_data表示的地址找到了相应的vm_area_struct,我无法理解数据未被vm_start和vm_end边界对齐的原因。我有以下内容: |的vma-> vm_start | ---------- | MM-> start_data | --------- |的vma-> vm_end | ------ | MM-&GT ; end_data |
mm->start_data(08049f00) vma->vm_start(08049000) mm->end_data(0804a07a) vma->vm_end(0804a000)
答案 0 :(得分:1)
vma-> vm_start(08049000),vma-> vm_end(0804a000) - 表示已用内存页面。
mm-> start_data(08049f00),mm-> end_data(0804a07a) - 表示数据的实际位置。
阅读更多:Linux Device Drivers, Third Edition - Chapter 15: Memory Mapping and DMA。