作家
登录

Linux设备驱动中的并发控制

作者: 来源: 2017-11-07 09:07:06 阅读 我要评论


并发指的是多个履行单位同时、并行被履行,而并发的履行单位对共享资本的拜访则很轻易导致竞态。

linux内核中重要竞态

1.多对称处理器的多个CPU

2.单CPU内过程与抢占它的过程

3.中断(硬中断、软中断、Tasklet、下半部)与过程之间

拜访共享内存资本的代码区称为“临界区”,临界区须要被以某种互斥机制加以保护,中断樊篱、原子操作、自旋锁和旌旗灯号量等,是linux设备驱动中可采取的互斥门路。

1.中断樊篱,这个重要用于单CPU,中断樊篱将使得中断和过程之间的并发不再产生。

2).初始化自旋锁

应用办法:

  1. local_irq_disable();//樊篱中断 
  2. ... 
  3. ... 
  4. 临界区 
  5. ... 
  6. local_irq_enable();//开中断 

因为linux的异步IO、过程调剂等很多重要的操作都依附于中断,中断对于内核的运行异常重要,在樊篱中断时代所有的中断都无法处理,是以长时光的樊篱中断很危险,有可能导致数据损掉甚至体系崩溃。所以这个不作为重点评论辩论。

**********************************************************************************************************************************************************

2.原子操作,原子操作是一系列的不克不及被打断的操作

linux内核供给了一系列的函数来实现内核中的原子操作,这些函数分为2类,分别针对位和整型变量进行原子操作。

4.旌旗灯号量

实现原子操作的步调:

1).定义原子变量并设置变量值

  1. void atomic_set(atomic_t *v , int i); //设置原子变量值为i 
  2.  
  3. atomic_t v = ATOMIC_INIT(0); //定义原子变量v,初始化为0 

2).获取原子变量的值

  1. atomic_read(atomic_t *v); 

3).原子变量加减操作

  1. void atomic_add(int i,atomic_t *v);//原子变量加i 
  2.  
  3. void atomic_sub(int i ,atomic_t *v);//原子变量减i 

4).原子变量自增/自减

  1. void atomic_inc(atomic_t *v);//自增1 
  2.  
  3. void atomic_dec(atomic_t *v);//自减1 

5).操作并测试:对原子变量履行自增、自减后(没有加)测试其是否为0,如不雅为0返回true,不然返回false。

自旋锁是一个忙锁,它在一个小的轮回内赓续的反复测试并设置的操作。

  1. int atomic_inc_and_test(atomic_t *v); 
  2.  
  3. int atomic_dec_and_test(atomic_t *v); 
  4.  
  5. int atomic_sub_and_test(int i ,atomic_t *v); 

6).操作并返回

  1. int atomic_add_return(int i , atomic_t *v); 
  2.  
  3. int atomic_sub_return(int i , atomic_t *v); 
  4.  
  5. int atomic_inc_return(atomic_t * v); 
  6.  
  7. int atomic_dec_return(atomic_t * v); 

**********************************************************************************************************************************************************

3.自旋锁

与膳绫擎的两个配对应用。

自旋锁保护临界区的特点:临界区要小,并且临界区内不克不及有导致睡眠的操作,不然可能引起体系崩溃。自旋锁可能导致体系逝世锁,激发这个问题最常见的情况是递归应用一个自旋锁。

自旋锁的操作步调:

1).定义自旋锁

  1. spinlock_t lock; 
  1. spin_lock_init(lock); //这是个宏,它用于动态初始化自旋锁lock; 
     1/7    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      看看60万码农怎么评论:这世界上还有没有月薪低于3万的程序员?

    IT界一位大年夜神早已下过定论:“对于那些月薪三万以下,自称法度榜样员的码农们,其实我们大年夜来没有把他们归为我们法度榜样员的部队。他们固然老是以法度榜样员自居,但只是他们>>>详细阅读


    本文标题:Linux设备驱动中的并发控制

    地址:http://www.17bianji.com/lsqh/38523.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)