linux内核同步(5)--其它同步方法
2014-11-08 14:31
260 查看
其他的同步方法:
完成变量
DKL大内核锁
禁止抢占
顺序和屏障等
禁止抢占
由于内核的可抢占性,意味着一个任务与被抢占的任务可能会在同一个临界区内运行。为避免这种情况,内核抢占代码会使用自旋锁作为非抢占区域的标记。即如果一个自旋锁被持有,内核便不能进行抢占。
但是有一种情况,不需要自旋锁,但是仍需要关闭内核抢占:一般来讲,每个处理器独立的变量也会被多个进程以伪并发的方式进行访问。通常这个变量会氢气自旋锁,防止多处理器上的真并发。如果是每个CPU上独立的变量,可能就不需要锁。
禁止抢占的接口函数:preempt_disable和preempt_enable
内存屏障:
当处理多处理器之间或者硬件设备之间的同步问题时,有时需要在代码中加以指定的顺序发出读内存(读入)和写内存(存储)指令。编译器和处理器为了提高效率,可能对读和写进行重新排序。现在处理器为了优化其传送管道(pipeline),打乱了分派和提交指令的顺序。
处理器提供了机器指令来确保顺序要求
编译器不要对给定点周围的指令序列进行重新排序。这种指令叫做屏障 barrier
对处理器的操作接口:
rmb():读内存屏障,它确保跨越rmb()载入动作不会发生重排。
wmb():写内存屏障
mb():即提供了读屏障也提供了写屏障。载入和存储动作都不会跨越屏障进行重排。
对编译器的处理接口:
barrier():防止编译器跨越屏障对载入或者存储操作进行优化,编译器不会重新组织存储或载入操作而防止改变C代码的效果和现有的数据依赖关系。
内存屏障可以完成编译器屏障的功能,但是编译器屏障要比内存屏障更加轻量级。
完成变量
DKL大内核锁
禁止抢占
顺序和屏障等
禁止抢占
由于内核的可抢占性,意味着一个任务与被抢占的任务可能会在同一个临界区内运行。为避免这种情况,内核抢占代码会使用自旋锁作为非抢占区域的标记。即如果一个自旋锁被持有,内核便不能进行抢占。
但是有一种情况,不需要自旋锁,但是仍需要关闭内核抢占:一般来讲,每个处理器独立的变量也会被多个进程以伪并发的方式进行访问。通常这个变量会氢气自旋锁,防止多处理器上的真并发。如果是每个CPU上独立的变量,可能就不需要锁。
禁止抢占的接口函数:preempt_disable和preempt_enable
内存屏障:
当处理多处理器之间或者硬件设备之间的同步问题时,有时需要在代码中加以指定的顺序发出读内存(读入)和写内存(存储)指令。编译器和处理器为了提高效率,可能对读和写进行重新排序。现在处理器为了优化其传送管道(pipeline),打乱了分派和提交指令的顺序。
处理器提供了机器指令来确保顺序要求
编译器不要对给定点周围的指令序列进行重新排序。这种指令叫做屏障 barrier
对处理器的操作接口:
rmb():读内存屏障,它确保跨越rmb()载入动作不会发生重排。
wmb():写内存屏障
mb():即提供了读屏障也提供了写屏障。载入和存储动作都不会跨越屏障进行重排。
对编译器的处理接口:
barrier():防止编译器跨越屏障对载入或者存储操作进行优化,编译器不会重新组织存储或载入操作而防止改变C代码的效果和现有的数据依赖关系。
内存屏障可以完成编译器屏障的功能,但是编译器屏障要比内存屏障更加轻量级。
相关文章推荐
- linux内核同步机制中的概念介绍和方法
- Linux Kernel Development 笔记(九)内核同步方法
- Linux 同步方法剖析--内核原子,自旋锁和互斥锁
- Linux内核同步介绍和方法(2)
- Linux内核同步介绍和方法
- Linux 进程管理剖析: Linux 同步方法剖析 内核原子,自旋锁和互斥锁
- Linux 同步方法剖析--内核原子,自旋锁和互斥锁
- linux内核同步机制中的概念介绍和方法
- 学习笔记之Linux内核同步方法
- Linux Kernel Development——内核同步方法
- Linux 同步方法剖析-Linux 同步方法剖析内核原子,自旋锁和互斥锁
- linux内核设计与实现---内核同步方法(10)
- Linux内核同步方法
- Linux 内核同步方法(锁机制)(1)
- Linux内核同步介绍和方法
- [linux]内核同步的方法
- Linux 进程管理剖析: Linux 同步方法剖析 内核原子,自旋锁和互斥锁
- linux-android 中内核同步方法
- Linux内核同步介绍及方法
- Linux-2.6内核移植过程中常见问题及解决方法[转]