1. 并发和竞态: 并发:多个执行单元同时、并行被执行
竞态:当并发的执行单元对共享资源访问时会引起静态
还有一个概念:
临界区:访问的共享资源的代码区域
如何判断是不是会有竞态记住这句话:
只要并发的多个执行单元存在对共享资源的访问,竞态就有可能发生
2. 在linux中,主要的竞态发生在如下的3种情况:SMP(对称多处理器) 的多个 CPU
SMP 的特点就是多个 CPU,系统总线只有一套。单 CPU 内进程和抢占它的进程
linux 2.6 内核之后支持抢占调度。
抢占调度指的是 一个进程在内核执行的时候可能被另一高优先级进程打断,
进程与抢占它的进程访问共享资源的情况类似于 SMP 的多个 CPU中断(硬中断、软中断、Tasklet、底半部) 与进程之间
中断可以打断正在执行的进程,如果中断处理程序访问进程正在访问的资源,则竞态也会发生。
解决竞态问题的途径是保证对共享资源的互斥访问。
在Linux驱动中可采取的互斥途径:
中断屏蔽原子操作自旋锁信号量
3. 优缺点:项\类型等待方式控制区域请求资源速度常用在的函数
自旋锁忙等待(在内核的运行态)不能调用可能引起进程调度的函数不能调用睡眠函数要求短平快相对较快中断处理函数
信号量睡眠等待(在睡眠态)无限制 |