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) 收藏 举报