linux内核同步

一,内核抢占

1.容许在内核运行态发生内核切换;

2.switch_to();

3.内核抢占设置:current_thread_info()==thread_info==preempt_count>0;

二,同步

1.竞争条件和进程临界区

(1)计算结果依赖于两个或者两个以上的交叉内核控制路径的嵌套方式,出现竞争条件;

(2)临界区:一段代码,在其他内核控制路径进入临界区前,进入临界区的内核控制路径必须全部执行完这段代码。

2.同步不必须

(1)中断处理程序和tasklet不必编写成可重入的函数

(2)仅软中断和tasklet访问的每cpu变量不需要同步

(3)仅被一种tasklet访问的数据结构不需要同步

三,同步的原语

1.同步技术

(1)每cpu变量:在cpu之间复制数据结构

(2)原子操作:对每个计数器原子地“读--修改--写”的指令

(3)内存屏障:避免指令重复排序

(4) 自旋锁:加锁时忙

(5)信号量:加锁时阻塞等待(睡眠)

(6)顺序锁:基于访问计数器的锁

(7)本地中断的禁止:禁止单个cpu上的中断处理

(8)本地软中断禁止  禁止单个cpu上的可延迟函数处理

(9)读--拷贝--更新(RCPU)通过指针而不是所来访问共享数据

 

posted on 2014-06-18 10:38  Landscape-Mi  阅读(106)  评论(0)    收藏  举报

导航