易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux设备驱动中的并发控制

并发与竞态
解决竞态问题的途径是保证对共享资源的互斥访问。
访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采用的互斥途径。
中断屏蔽
中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于Linux内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。但是,需要注意是的是长时间的中断是危险的,有可能导致数据丢失或着系统崩溃。
local_irq_disable()和local_irq_enable()都只能禁止和使能本CPU内的中断,不能解决SMP多CPU引发的竞态。
local_irq_save(flags)除了进行禁止中断操作以外,还保存目前CPU的中断位信息,local_irq_restore(flags)进行相反的操作。
如果只想禁止中断的底半部,应使用local_bh_disable(),使能底半部使用local_bh_enable()。
原子操作
原子操作指的是在执行过程中不会被别的代码路径所中断的操作。
Linux内核提供了一系列函数来实现内核中的原子操作,这些函数又分为两类,分别针对位和整型变量进行原子操作。
 整型原子操作
 1. 设置值 void atomic_set(atomic_t *v,int i); Atomic_t v = ATOMIC_INT(0);
2. 获取值 atomic_read(atomic_t *v);
3. 加减 void atomic_add(int i,atomic_t *v); void atomic_sub(int i,atomic_t *v);
4. 自增自减 void atomic_inc(atomic_t *v); void atomic_dec(atomic_t *v);
5. 操作测试 int atomic_inc_and_test(atomic_t *v); int atomic_dec_and_test(atomic_t *v); int atomic_sub_and_test(int i, atomic_t *v);
操作后测试其值是否为0,为0返回true,否则返回false。
6. 操作返回int atomic_inc_and_return(atomic_t *v); int atomic_dec_and_return(atomic_t *v); int atomic_sub_and_return(int i, atomic_t *v); int atomic_add_and_return(int i, atomic_t *v);
操作后返回新值。
 位原子操作
 1. 设置位 void set_bit(nr,void *addr); 设置addr地址的第nr位,即将位写1。
2. 清除位 void clear_bit(nr,void *addr); 将位写为0。
3. 改变位 void change_bit(nr,void *addr); 将位进行反置。
4. 测试位test_bit(nr,void *addr); 返回第nr位。
5. 测试操作int test_and_set_bit(nr,void *addr); int test_and_clear_bit(nr,void *addr); int test_and_change_bit(nr,void *a


相关文档:

Linux操作系统主机名(hostname)简说(v0.1b)


作者:北南南北
来自:LinuxSir.Org
摘要:本文是关于Linux操作系统主机名(hostname)的文档,对主要配置文件/etc/hosts进行简要的说明 ;另外对基配具工具hostname也进行了举例说明; 欢迎高手斧正,谢谢;
目录
 
2.1 主机名配置文件 /etc/hosts解说;
2.2 主机名(hostname)和域名(Domain)的区别;
......

基于Linux的便携嵌入式设备电源管理解决方案

 前 言
 
  随着各种便携嵌入式设备性能的日益提高,功能日益丰富,其电源紧张的问题也日益突出,国内新推出的某些具有PDA等多种功能的智能电话在密集使用下只能维持半天,多数摄像机
和数码相机

一次充电后都只有一个小时左右的累积工作时间。Linux作为一个开放源代码的操作系统,拥有非常丰富的软件 ......

《Linux性能及调优指南》第一章:了解Linux操作系统


翻译:飞哥 (
http://hi.baidu.com/imlidapeng
)
版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明。
原文名称:《Linux Performance and Tuning Guidelines》
原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html
----------------------------------------------------------------- ......

Linux 内核启动分析(转)

Linux 内核启动分析
1.       内核启动地址
1.1.   名词解释
ZTEXTADDR
解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。
Start address of decompressor. here's no point ......

GNU/Linux 开发环境 (2)


继续谈谈其它语言的开发。
3.2) 动态语言
这里指的是包括脚本语言,解释型语言在内的编程语言,例如Java,Perl,Python,PHP,JavaScript,Ruby,Shell Script,等等。
从开发环境角度看,动态语言都有自己的运行环境,而且通常都是跨平台的。因此,编写代码,调试运行则完全可以在自己的环境中完成,只是大多是命令行 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号