Linux内核并发和竞态(2)

一.并发和竞态相关的概念

并发: 多个执行单元同时发生;
执行单元包括进程和中断
竞态:多个执行单元对共享资源的同时访问造成的竞争状态
形成竞态条件:
1.要有多个执行单元
2.要有共享资源
3.要同时访问
共享资源:
1.软件上的全局变量属于共享资源
2.硬件资源 (寄存器都是共享资源)
避免竞态的本质目的:
一个执行单元在访问共享资源的时候,其他执行单元禁止访问共享资源;
这种访问方式又称之为互斥访问!

互斥访问的本质目的:
就是让访问共享资源的代码具有原子性;
例如: --open_cnt当某个任务在访问的时候,不能发生CPU资源的切换!

临界区:
访问共享资源的代码区域叫临界区!
if (--open_cnt != 0)
{
printk("设备已被打开!\n");
open_cnt++;
return -EBUSY; //出错,设备忙
}
3.3.产生竞态的几种情形
1.多处理器(多核, SMP),多处理器共享系统的内存,闪存和IO资源,势必形成竞态
2.单CPU的进程与进程的抢占,形成竞态 (UC中只有一种情形)
3.中断和进程(中断优先级高于进程)
4.中断和中断
高优先级的软中断抢占低优先级的软中断
硬件中断抢占软中断

二.Linux内核解决竞态的方法

中断屏蔽
自旋锁
信号量
原子操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章