Linux sbrk(2)或mmap(2)可以阻止吗?

Linux sbrk(2)或mmap(2)可以阻止吗?,linux,linux-kernel,scheduler,Linux,Linux Kernel,Scheduler,正如标题所说,sbrk(2)或mmap(2)可以阻止吗?在中,他们可以睡眠,或做任何其他事情,让调度程序 是的,他们可以 现代系统上的sbrk()与mmap()非常相似,因此它们可以作为一个实体进行讨论 而mmap()可能会阻塞,因为设置用户可见的虚拟内存映射需要在内核端设置一个相对复杂的数据结构,这涉及到内核从其内部分配器分配内存(如kmem_cache_alloc(),除非请求,否则可以阻塞) 内核中的代码支持非阻塞内存映射,但它仅在特殊情况下使用,因为不可能确保这种映射始终成功。在最近的l

正如标题所说,sbrk(2)或mmap(2)可以阻止吗?在中,他们可以睡眠,或做任何其他事情,让调度程序

是的,他们可以

现代系统上的sbrk()与mmap()非常相似,因此它们可以作为一个实体进行讨论

而mmap()可能会阻塞,因为设置用户可见的虚拟内存映射需要在内核端设置一个相对复杂的数据结构,这涉及到内核从其内部分配器分配内存(如kmem_cache_alloc(),除非请求,否则可以阻塞)


内核中的代码支持非阻塞内存映射,但它仅在特殊情况下使用,因为不可能确保这种映射始终成功。在最近的linux系统上,可以使用MAP_NONBLOCK flag向mmap()调用(准备处理映射失败)从用户空间显式请求此行为。

任何系统调用都可以阻止,否则
EINTR
将不存在,对吗?我相信它们可以阻止,例如,如果它们需要内存,并且需要进行页面交换以提供一些内存。我可以问你为什么问这个吗?这是出于好奇还是你会依赖这种行为?在后一种情况下,你会做一些非常错误的事情@弗雷德·里查米迪,但是,这个人没有提到或的
EINTR
,而对像沙巴兹这样的人来说,这主要是出于好奇。看看我的想法是否正确。