当进程访问刚刚分配给 brk/sbrk 的地址时,内核会发生什么?

What happens in the kernel when the process accesses an address just allocated with brk/sbrk?

这其实是一道内存管理的理论题。由于不同的操作系统以不同的方式实现事物,我将不得不减轻对知识的渴望,只询问其中一个操作系统是如何工作的:(最好是开源和广泛使用的操作系统:Linux.

这是我在整个谜题中所知道的事情列表:

好吧,在终于找到一个优秀的指南 (http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/) 并花了几个小时挖掘 Linux 内核之后,我找到了答案...

  • 的确,brk只是压入了虚拟内存区域
  • 当用户应用程序点击 *allocated_integer = 5; 时,发生页面错误。
  • page fault routine will search for the virtual memory area responsible for the address and then call 页面 table 处理程序。
  • page table handler goes through each level (2 levels in x86 and 4 levels in x86_64), allocating entries if they're not present (2nd, 3rd and 4th), and then finally calls 真正的处理者。
  • 负责分配页框的real handler actually calls the function