linux - sbrk(2) 或 mmap(2) 可以阻塞吗?

标签 linux linux-kernel scheduler

正如标题所说,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/

相关文章:

linux - cfs调度器中使用的负载均衡器的代码在哪里?

python - ubuntu 与 windows 中通过 python 的屏幕截图

linux - 如何防止并行安装多个版本的 RPM?

linux - 实现 CPU 热插拔的系统调用

c - 在可执行内存中运行代码

python-3.x - Python Aps Scheduler 在两个工作日之间运行,并安排两个作业

Java Ubuntu Linux Swing 空白窗口

linux - 如何在ubuntu中手动选择音频输出设备?

linux - 使用 dentry inode 创建的文件与打开的系统调用 inode 之间的关系?

更改Linux 3.5.0内核任务调度程序