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