九鼎创展论坛

标题: x4412&ibox项目实战30-Linux设备驱动的并发机制 [打印本页]

作者: armeasy    时间: 2014-10-4 22:10
标题: x4412&ibox项目实战30-Linux设备驱动的并发机制
并发指多个执行单元同时并行的执行,并发的执行单元对共享资源,如硬件资源,软件上的全局变量,静态变量等的访问则很容易导致竞态。
例如,对于前面的globalmem驱动设备,如果执行单元A对其写入3000个A,执行单元B对其写入3000个B,执行单元C则读取globalmem所有的字符。这时,执行单元C所读取的值是3000个A?或是3000个B?又或是存在一些A,也存在一些B?
当然这里只是一个简单的例子,在linux内核中实际存在的并发现象比这个要复杂得多。以下几种情况是竞态产生的主要原因:
一:对称多处理器(SMP)的多个CPU
exynos4412就是一个典型的对称多处理器,它具有4个独立的CPU。这些CPU共同使用系统总线,可以访问共同的外设和存储器。
二:单CPU的多个进程
当一个进程在执行的时候,很有可能被优先级更高的进程所打断,这时将涉及到多个进程间的抢占与调度问题。
三:中断
中断允许打断正在执行的进程,如果中断处理程序访问了正在执行的进程,则会引起竞态问题。中断本身也有可能被更高优先级的中断所打断,多个中断之间也可能引起竞态。
解决竞态问题的途径是保证对共享资源的互斥访问。即一个执行单元在访问共享资源的时候,其他执行单元被禁止访问。访问共享资源的代码区域叫做临界区,它需要使用某种互斥机制加以保护。中断屏蔽,原子操作,自旋锁,信号量等是linux设备驱动经常采用的互斥途径。






欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) Powered by Discuz! X3.2