OpenBSD 是不是支持并行内核访问
Posted
技术标签:
【中文标题】OpenBSD 是不是支持并行内核访问【英文标题】:Does OpenBSD support parallel Kernel accessOpenBSD 是否支持并行内核访问 【发布时间】:2021-07-14 12:33:06 【问题描述】:我试图弄清楚多个进程或线程是否可以执行并发系统调用,而其中一个不休眠。 也就是说:OpenBSD 是否使用类似Big Kernel Lock 的东西。
可以预期,并行内核访问是可能的。我试图查看系统调用接口(代码阅读和内核调试),但没有发现任何让我印象深刻的BKL。 但是,当我查看fork syscall implementation 时,在我看来,某些全局数据是在没有锁定的情况下访问的(例如 nprocesses)。我想知道,调度程序(?)是否以某种方式阻止了并行系统调用,或者我是否忽略了某些东西。
那么:OpenBSD 是否支持并行内核访问?其他 BSD 呢?
【问题讨论】:
【参考方案1】:确实,OpenBSD 有一个相当古老的模型,它使用优先级,每个子系统都不同。见spl(9)
。
该机制最初允许一些抢占,但仅限于更高优先级的中断。当然,在现代实现中,优先级是由互斥锁实现的。
调度器使用splsched
。
因此,有几个锁,系统调用是并行发生的(跨不同的 CPU),但由于这些锁在某些点上会序列化,具体取决于它们跨越的子系统边界。换句话说,永远不会有两个线程同时运行来自同一个子系统的代码。当然,如果锁被拆分或更换,这可能会随时改变。
其他系统:
这是继承自 NetBSD,所以大致相同。 FreeBSD 已过渡到更精细的方法,其中一些部分是无锁的,就像 Linux。 DragonflyBSD 通过提供用于同步的序列化令牌以及对关键机制(如内存分配(用户空间和内核))的固有无锁方法,对 FreeBSD 进行了改进。【讨论】:
以上是关于OpenBSD 是不是支持并行内核访问的主要内容,如果未能解决你的问题,请参考以下文章