linux设备驱动之并发控制

原创 2013年12月02日 09:26:12

一、基本概念

      并发是指多个执行单元同时、并行被执行,而并发的单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问很容易导致静态。

二、产生竞态的情况

    主要有三种情况:1.对称多处理器的多个CPU。2.单CPU内进程与抢占它的进程进程。3.中断(硬中断、软中断、Tasklet、底半部)与进程之间。

三、单CPU避免竞态的方法

   避免竞态主要有5种方法分别是中断屏蔽、原子操作、自旋锁、信号量、互斥体。

 1.中断屏蔽

   进入临界区前,屏蔽中断,可以避免因中断引起的竞态。中断可能引起竞态的原因是中断处理程序中可能会访问共享资源。其次中断处理程序也可能被更高优先级的中断打断,多个中断间也可能引起竞态。

   中断屏蔽一般不单独使用,而是配合自旋锁使用。

2.原子操作

   原子操作是指在执行过程中不会被别的代码路径所中断的操作。

   原子操作分为两类:1.整型变量原子操作。2.位原子操作。

   原子操作处理竞态是定义一个原子变量并初始化,访问临界区前先检查原子变量的值,看下是否能进行下一步操作。使用原子操作可以实现设备最多只能被一个进程打开。

3.自旋锁

   自旋锁实现对临界资源互斥访问。CPU执行一个原子操作,测试并设置某个内存变量,测试结果空闲则继续运行,测试结果表明锁被占用,程序将在一个小循环里面重复这个“测试并设置”操作,即自旋。当自旋锁持有者重置该变量释放自旋锁后,某个等待“测试并设置”操作向其调用者报告锁已释放。

    自旋锁使用中要注意的地方:1.临界区很大,或共享设备占用锁的时间长会降低系统性能。2.CPU递归使用自旋锁将导致死锁。3.自旋锁定期间不能调用可能引起进程调度的函数。

    自旋锁衍生出读写锁。读写锁允许读的并发,不允许写的并发,读写不能同时进行。

   读写锁的优化是顺序锁。顺序锁与读写锁的不同之处在于读写可以同时进行,写操作发生后,读执行单元需要重新读取数据。

   读写锁的高性能版本是RCU(读-拷贝-更新)。RCU允许多个读执行单元和写执行单元同时访问被保护的数据。

4.信号量

   信号量是保护临界区的一种常用方法。与自旋锁相同,只有获取到信号量才能执行临界区的代码。与自旋锁不同的是当获取不到信号量时,进程进入休眠等待状态而不是原地打转。

   信号量被初始化为0,可用于同步,同步意味着一个执行单元的继续执行,需等待另一执行单元完成某事,保证执行的先后顺序。

   完成量是比信号量更好的同步机制,前者释放所有等待同一完成量的执行单元,后者只能唤醒一个等待的执行单元。

  读写信号量允许多个读执行单元同时访问共享数据,而最多只有一个写执行单元。

5.互斥体

  互斥体与信号量使用的场合完全一样。



    

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux设备驱动开发详解总结(二)之并发与竞争

Linux设备驱动中必须解决一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态,在当今的Linux内核中,支持SMP与内核抢占的环境下,更是充满了并发与竞态。幸运的是,Linux 提供了多钟...
  • lwj103862095
  • lwj103862095
  • 2013年01月28日 16:53
  • 2591

《Linux4.0设备驱动开发详解》笔记--第七章:Linux设备中的并发控制

7.1 并发与竞态 并发是指多个执行单元同时、并发的被执行,而并发的执行单元对共享资源(硬件资源、软件上的的全局变量、静态变量等)的访问则很容易导致竟态 竟态发生在以下几种情况 对称多处理器(SMP...
  • z1106609486
  • z1106609486
  • 2016年05月19日 14:37
  • 3638

Linux 驱动面试题总结

1、 Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。     字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序...
  • zqixiao_09
  • zqixiao_09
  • 2016年03月20日 20:51
  • 6980

Linux 设备驱动的并发控制

Linux 设备驱动中必须要解决的一个问题是多个进程对共享的资源的并发访问,并发的访问会导致竞态,即使是经验丰富的驱动工程师也常常设计出包含并发问题bug 的驱动程序。 一、基础概念 1、Linu...
  • zqixiao_09
  • zqixiao_09
  • 2016年03月15日 19:26
  • 2586

Linux 设备驱动的并发控制

Linux 设备驱动中必须要解决的一个问题是多个进程对共享的资源的并发访问,并发的访问会导致竞态,即使是经验丰富的驱动工程师也常常设计出包含并发问题bug 的驱动程序。 一、基础概念...
  • qq_21593899
  • qq_21593899
  • 2016年06月19日 11:39
  • 172

Linux设备驱动中的并发控制

并发与竞态 解决竞态问题的途径是保证对共享资源的互斥访问。 访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采...
  • zongguo
  • zongguo
  • 2013年04月03日 20:24
  • 358

Linux设备驱动中的并发控制

并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局、静态变量)的访问则容易导致竞态(race conditions)。 SMP是一种...
  • lzc89
  • lzc89
  • 2017年04月20日 15:02
  • 109

linux设备驱动中的并发控制

在linux设备驱动中必须解决的一个问题是多个进程对互斥资源的并发访问,并发的访问会导致竞态。 1.1 并发与竟态 并发指多个执行单元同时、并发的被执行,而并发的执行单元对共享资源的访问很容易导致竟态...
  • c1194758555
  • c1194758555
  • 2017年02月03日 17:40
  • 284

linux设备驱动中的并发控制

在linux内核中,主要的竞态发生于以下几种情况:   1、对称多处理器(SMP)的多个CPU:   多个CPU共同使用系统总线,可访问共同点的外设和存储器。   2、单CPU内核进程与抢占它的进...
  • andylauren
  • andylauren
  • 2016年07月05日 13:12
  • 237

Linux驱动设备中的并发控制

一、基本概念二、中断屏蔽三、原子操作四、自旋锁五、信号量六、互斥体 七、自旋锁与信号量的比较  Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态,即使是经验...
  • sdkdlwk
  • sdkdlwk
  • 2017年03月24日 19:10
  • 93
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux设备驱动之并发控制
举报原因:
原因补充:

(最多只允许输入30个字)