Linux内核学习——内核同步介绍

内核同步介绍

临界区和竞争条件

临界区:访问和操作共享数据的代码段。

对于单个变量的操作,处理器提供了指令来原子地读变量,修改变量和返回变量。

加锁

造成并发执行的原因

用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度。内核造成并发执行的原因:

  • 中断
  • 软中断和tasklet
  • 内核抢占
  • 睡眠以及用户空间的同步
  • 对称多处理

死锁

最简单的死锁例子是自死锁:一个执行线程试图去获得一个自己已经持有的锁。一些简单的规则可以帮助避免死锁:

  • 按顺序加锁;
  • 防止发送饥饿;
  • 不重复请求同一个锁;

争用和扩展性

锁的争用是指当锁正被使用时,有其它线程试图获得该锁。

加锁的粒度用来描述加锁保护的数据规模,当锁争用很严重时,加锁太粗会降低可扩展性;当争用不明显时,加锁过细又会加大系统开销。