assembly - 以下代码如何制作大内核锁?
问题描述
MPgetlock_edx:
1:
movl (%edx), %eax
movl %eax, %ecx
andl $CPU_FIELD,%ecx
cmpl _cpu_lockid, %ecx
jne 2f
incl %eax
movl %eax, (%edx)
ret
2:
movl $FREE_LOCK, %eax
movl _cpu_lockid, %ecx
incl %ecx
lock
cmpxchg %ecx, (%edx)
jne 1b
GRAB_HWI
ret
- 为什么上层函数可以实现大内核锁(BKL)?
- 'cmpxchg' 是原子的吗?为什么在它之前需要“锁定”?(这部分是Is x86 CMPXCHG atomic 的副本,如果是,为什么需要 LOCK?)
- 为什么不直接 'movl (%edx), %ecx' 呢?
解决方案
推荐阅读
- html - 如何在 flexbox 列项中赋予 div 100% 的高度?
- ios - 从自定义 UIViewController 导航到 TabBarController 而不使用 segue
- php - 在 PHP 中正确地对 FLOAT 数进行算术运算
- google-cloud-platform - 为什么我在谷歌云注册期间不能使用我现有的付款资料?
- ios - 在构建短语中处理不同的配置后找不到有效的 GoogleService-Info.plist
- visual-studio-code - 尝试使用参数运行 PowerShell 时出现 Visual Studio Code 错误
- encryption - 对于给定的盐,OpenBSD bcrypt 强散列函数是数学注入吗?
- typescript - 如何在 jest / apollo 客户端中捕获被拒绝的 graphql 订阅?
- python - 如何获得keras中的渐变?
- javascript - Vue路由器将道具传递给动态加载的孩子