全局开关中断

特点:通过结合使用本地开关中断和自旋锁来实现
主要API
全局关中断:cli()
全局开中断:sti()

大读者锁

是对读者自旋锁的改进,它将读者所使用的数据结构分开放到不同的cache上面,避免缓存颠簸。(缓存颠簸:)
主要API

读者加锁操作:br_read_lock()
读者解锁操作:br_read_unlock()
写者加锁操作:br_write_lock()
写着解锁操作:br_write_unlock()
与中断开关结合使用的:
br_read_lock_bh()/br_read_unlock_bh()
br_read_lock_irq()/br_read_unlock_irq()
br_read_lock_irqsave()/br_read_unlock_irqrestore()
br_write_lock_bh()/br_write_unlock_bh()
br_write_lock_irq()/br_write_unlock_irq()
br_write_lock_irqsave()/br_write_unlock_irqrestore()

内核锁(BLK)

特点:大内核锁(BLK)是一种特殊的自旋锁/信号量,可以将整个内核锁定,任何内核执行路径(进程)都必须停下来等待,直到解锁为止。注意:全局开关中断和大内核锁都严重的影响性能,因此Linux内核不断的进行优化设计避免使用这两种同步操作,大读者锁虽然在性能上没什么问题,但是它只是静态的预定义了一些锁,不能很方便的使用,因此常常被更先进的RCU锁替代,于是linux-2.5.28开始淘汰了全局开关中断,Linux-2.5.70开始淘汰了大读者锁,Linux-2.6.39开始淘汰了大内核锁。
主要API:
大内核加锁操作:lock_kernel()
大内核解锁操作:unlock_kernel()

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐