linux mmu:vma-> vm_start vs mm-> vm_start

时间:2015-05-14 13:08:12

标签: linux-kernel mmu

我无法理解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)

1 个答案:

答案 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