这其实是一道关于内存管理的理论题。由于不同的操作系统以不同的方式实现事物,我将不得不减轻对知识的渴望,询问事物如何在其中一个操作系统中工作:(最好是开源和广泛使用的操作系统:Linux。
这是我在整个谜题中所知道的事情的列表:
malloc()
是用户空间。 libc 负责系统调用作业(调用 brk
/sbrk
/mmap
...)。它设法获得大块内存,由虚拟地址范围描述。该库将这些 block 切片并设法响应用户应用程序请求。brk
/sbrk
系统调用的作用。我知道“程序中断”是什么意思。这些调用基本上插入程序中断偏移量。这就是 libc 获取其虚拟内存块的方式。*allocated_integer = 5;
。行。怎么办?如果 brk
/sbrk
只更新进程表中进程条目的偏移量,或者其他什么,物理内存实际是如何分配的?free_area
数据结构被访问? (http://www.tldp.org/LDP/tlk/mm/memory.html,3.4.1 页面分配部分)最佳答案
好吧,在终于找到一个优秀的指南 (http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/) 并花了几个小时挖掘 Linux 内核之后,我找到了答案......
brk
只压入虚拟内存区域。*allocated_integer = 5;
时,发生页面错误。关于memory-management - 当进程访问刚用 brk/sbrk 分配的地址时,内核会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823211/