读书笔记(11)—— kernel 全局开关中断
全局开关中断特点:通过结合使用本地开关中断和自旋锁来实现主要API全局关中断:cli()全局开中断:sti()大读者锁是对读者自旋锁的改进,它将读者所使用的数据结构分开放到不同的cache上面,避免缓存颠簸。(缓存颠簸:)主要API读者加锁操作:br_read_lock()读者解锁操作:br_read_unlock()写者加锁操作:br_write_lock()写着解锁操作:br_write_un
·
全局开关中断
特点:通过结合使用本地开关中断和自旋锁来实现
主要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()
更多推荐
已为社区贡献1条内容
所有评论(0)