【发布时间】:2011-08-08 15:15:18
【问题描述】:
我在一次采访中被问到这个问题。他们想知道的是,当用户调用 malloc(4) 分配 4 字节内存时,操作系统(Linux)如何响应?哪个子系统响应这个系统调用?
我告诉他 malloc() 将由内存管理子系统提供服务。 malloc() 实现会遍历空闲内存(物理内存)的列表,我们称之为空闲列表,并找到一个大于或等于 4 Bytes 的合适的块。一旦找到这样的块,它将从空闲列表中删除并添加到已使用列表中。然后该物理内存将映射到进程堆 vma 结构。他似乎对这个答案不太满意。好友系统如何适应这个?任何帮助将不胜感激。
【问题讨论】:
-
他当时很生气。 malloc() 在用户模式下实现。
-
@Chris:主要是。 malloc 最终可能会调用 sbrk。
-
@Chris:不一定。这里给出的答案意味着
malloc()从物理内存中分配是错误的。 -
另外,“操作系统”与“内核”不同;我认为,在谈论 unix 时,将“操作系统”解释为“内核、引导加载程序、libc 和基本用户模式程序,如 init、getty、login 和朋友”是公平的。取决于面试官如何表达他的问题,谈论分配器在用户模式下的作用可能是一个公平的答案。
-
猜他对你在用户调用 malloc 和内核函数 malloc 之间的混合不满意。你描述的应该是内核malloc的功能。
标签: c linux process heap-memory system