在一个非常高级的视图中,Linux内核将进程可见的内存跟踪为几个“内存区域”(
structvm_area_struct)。还有一个结构(再次以非常高的层次表示)表示进程的整个地址空间(
structmm_struct)。每个进程(某些内核线程除外)都只有一个
struct mm_struct,它依次指向
structvm_area_struct它可以访问的所有内存。
该
sys_brk系统调用(中发现的
mm/mmap.c)简单地调整某些内存区域。(
sbrk是glibc包装器
brk)。通过比较
brk地址的旧值(位于内部
structmm_struct)和请求的值来做到这一点。
首先看一下
mmap功能族会比较简单,因为这
brk是一个特殊情况。



