Linux内核提供解决竞态进行互斥访问的方法?
产生竞态的条件:
- 要有并发
- 要有共享资源
- 并发的执行单元要同时对共享资源进行访问
- 共享资源:软件上的全局变量和硬件资源(小到一个bit,大到一个设备)
- 互斥访问:多个执行单元对共享资源进行访问,只有一个执行单元在同一时刻能够访问
产生竞态的资源情形:
- 对称多处理器(SMP):多个CPU之间共享内存,外存,系统IO,例如多个CPU同时访问同一个内存区域,必然会产生竞态。
- 单个CPU的进程与进程之间的抢占,支持任务的抢占调度,如果一个进程的优先级高于另一个进程,进程间形成抢占调度,如果他们对共享资源进行访问,必然会产生竞态。
- 进程在对共享资源进行访问的期间,可能被硬件中断或者软中断或者tasklet打断,所以如果这些硬中断的处理函数,软中断和tasklet的延后执行函数也对共享资源进行访问,也必然产生竞态。
- 内核没有支持硬件中断的优先级,硬件中断和软中断,tasklet之间是存在优先级的,如果各自之间访问共享资源,也一定会产生竞态。
中断屏蔽:
- 中断屏蔽可以解决以下场合的竞态问题:
- 中断和中断
- 中断和进程
- 进程和进程之间的抢占
- 适用于单CPU的竞态问题!
- 使用的方法:
- 在进入临界区之前关闭中断;
- 执行临界区的代码;
- 恢复关闭中断;
- 内核提供关闭和打开中断的方法。

最低0.47元/天 解锁文章
1617

被折叠的 条评论
为什么被折叠?



