我在考虑Linux内核如何实现系统调用,并且想知道是否有人可以向我全面介绍sbrk / brk的工作方式?
我已经审查了内核代码,但是其中有很多,我不理解。我希望有人总结一下?
在一个非常高级的视图中,Linux内核将进程可见的内存跟踪为几个“内存区域”(struct vm_area_struct)。还有一个结构(再次以非常高的层次表示)表示进程的整个地址空间(struct mm_struct)。每个进程(某些内核线程除外)都只有一个struct mm_struct,它依次指向struct vm_area_struct它可以访问的所有内存。
struct vm_area_struct
struct mm_struct
该sys_brk系统调用(中发现的mm/mmap.c)简单地调整某些内存区域。(sbrk是glibc包装器brk)。通过比较brk地址的旧值(位于内部struct mm_struct)和请求的值来做到这一点。
sys_brk
mm/mmap.c
sbrk
brk
首先看一下mmap功能族会比较简单,因为这brk是一个特殊情况。
mmap