gpt4 book ai didi

linux - 测试和设置(或其他原子 RMW 操作)是任何体系结构上的特权指令吗?

转载 作者:IT王子 更新时间:2023-10-29 00:59:45 27 4
gpt4 key购买 nike

硬件提供原子指令,如测试和设置、比较和交换、加载链接存储条件。这些是特权指令吗?也就是说,只有操作系统才能执行它们(因此需要系统调用)吗?

我以为他们没有特权,可以在用户空间调用。但是http://faculty.salina.k-state.edu/tim/ossg/IPC_sync/ts.html似乎另有建议。但是,futex(7) ,在某些条件下,可以在没有系统调用的情况下实现锁定,这意味着它必须在没有特权的情况下执行指令(如测试和设置)。

矛盾?如果是这样,哪个是正确的?

最佳答案

该页面有误。它似乎声称无锁原子操作通常在 ISA 上享有特权,但事实并非如此。我从未听说过原子测试和设置或任何其他无锁操作需要内核模式。

如果是这样的话,它需要 C++11 lock-free atomic read-modify-write operations编译为系统调用,但它们不适用于 x86、ARM、AArch64、MIPS、PowerPC 或任何其他普通 CPU。 (试试 https://godbolt.org/ )。

这也会使“轻量级”锁定(试图在没有系统调用的情况下获取锁)变得不可能。 ( http://preshing.com/20111124/always-use-a-lightweight-mutex/ )

普通 ISA 允许用户空间执行原子 RMW 操作,在线程之间甚至不同进程之间共享的内存上。我不知道为用户空间禁用原子 RMW 的机制x86。即使在任何 ISA 上有这样的东西,也不是正常的操作模式。

只读或只写访问通常在所有 ISA 上的对齐位置自然是原子的,直到一定宽度(Why is integer assignment on a naturally aligned variable atomic on x86?),但原子 RMW 确实需要硬件支持。


在 x86 上,TAS 是 lock bts,它是无特权的。 (Documentation for the lock prefix)。 x86 具有范围的其他原子操作选择,例如lock add [mem]、reg/immediatelock cmpxchg [mem]、reg、甚至 lock xadd [mem], reg 在需要返回值时实现 fetch_add。 ( Can num++ be atomic for 'int num'? )

大多数 RISC 都有 LL/SC,包括 ARM、MIPS 和 PowerPC,以及所有不再常见的旧 RISC ISA。


futex(2) 是一个系统调用。如果您调用它,它所做的一切都在内核模式下。

这是轻量级锁定使用的后备机制,以防存在竞争,它提供操作系统辅助的 sleep /唤醒。因此,在用户空间中执行任何操作的不是 futex 本身,而是围绕 futex 构建的锁实现可以避免在无竞争或低竞争情况下进行系统调用。

(例如,在用户空间中旋转几次以防锁可用。)

这就是 futex(7) 手册页所描述的内容。但我觉得如果你实际上不进行系统调用,将其称为“futex 操作”有点奇怪。我猜它是在内存上运行的,内核代码可能会代表其他正在等待的线程查看内存,因此在用户空间代码中修改内存位置的必要语义取决于 futex

关于linux - 测试和设置(或其他原子 RMW 操作)是任何体系结构上的特权指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com