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

回到顶部