【问题标题】:Does OpenBSD support parallel Kernel accessOpenBSD 是否支持并行内核访问
【发布时间】:2021-07-14 12:33:06
【问题描述】:

我试图弄清楚多个进程或线程是否可以执行并发系统调用,而其中一个不休眠。 也就是说:OpenBSD 是否使用类似Big Kernel Lock 的东西。

可以预期,并行内核访问是可能的。我试图查看系统调用接口(代码阅读和内核调试),但没有发现任何让我印象深刻的BKL。 但是,当我查看fork syscall implementation 时,在我看来,某些全局数据是在没有锁定的情况下访问的(例如 nprocesses)。我想知道,调度程序(?)是否以某种方式阻止了并行系统调用,或者我是否忽略了某些东西。

那么:OpenBSD 是否支持并行内核访问?其他 BSD 呢?

【问题讨论】:

    标签: multithreading kernel system-calls bsd openbsd


    【解决方案1】:

    确实,OpenBSD 有一个相当古老的模型,它使用优先级,每个子系统都不同。见spl(9)

    该机制最初允许一些抢占,但仅限于更高优先级的中断。当然,在现代实现中,优先级是由互斥锁实现的。

    调度器使用splsched

    因此,有几个锁,系统调用是并行发生的(跨不同的 CPU),但由于这些锁在某些点上会序列化,具体取决于它们跨越的子系统边界。换句话说,永远不会有两个线程同时运行来自同一个子系统的代码。当然,如果锁被拆分或更换,这可能会随时改变。

    其他系统:

    • 这是继承自 NetBSD,所以大致相同。
    • FreeBSD 已过渡到更精细的方法,其中一些部分是无锁的,就像 Linux。
    • DragonflyBSD 通过提供用于同步的序列化令牌以及对关键机制(如内存分配(用户空间和内核))的固有无锁方法,对 FreeBSD 进行了改进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2019-12-08
      • 2020-10-14
      • 2017-01-27
      • 1970-01-01
      相关资源
      最近更新 更多