正如标题所说,sbrk(2) 或 mmap(2) 可以阻塞吗?比如,他们可以 sleep ,或者做任何其他让调度程序屈服的事情吗?
最佳答案
是的,他们可以。
现代系统上的 sbrk() 与 mmap() 非常相似,因此它们可以作为一个整体来讨论。
并且 mmap() 可能会阻塞,因为设置用户可见的虚拟内存映射需要在内核端设置相对复杂的数据结构,这涉及到内核从其内部分配器(例如 kmem_cache_alloc())分配内存,它会阻塞除非要求不要这样做)。
内核代码支持非阻塞内存映射,但仅在特殊情况下使用,因为无法确保此类映射始终成功。在最近的 Linux 系统上,可以使用 MAP_NONBLOCK 标志从用户空间显式请求此行为以调用 mmap()(准备好处理映射失败)。
关于linux - sbrk(2) 或 mmap(2) 可以阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084154/