内核同步介绍
临界区和竞争条件
临界区:访问和操作共享数据的代码段。
对于单个变量的操作,处理器提供了指令来原子地读变量,修改变量和返回变量。
加锁
造成并发执行的原因
用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度。内核造成并发执行的原因:
- 中断
- 软中断和tasklet
- 内核抢占
- 睡眠以及用户空间的同步
- 对称多处理
死锁
最简单的死锁例子是自死锁:一个执行线程试图去获得一个自己已经持有的锁。一些简单的规则可以帮助避免死锁:
- 按顺序加锁;
- 防止发送饥饿;
- 不重复请求同一个锁;
争用和扩展性
锁的争用是指当锁正被使用时,有其它线程试图获得该锁。
加锁的粒度用来描述加锁保护的数据规模,当锁争用很严重时,加锁太粗会降低可扩展性;当争用不明显时,加锁过细又会加大系统开销。