九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 3821|回复: 0
打印 上一主题 下一主题

x4412&ibox项目实战30-Linux设备驱动的并发机制

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-4 22:10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
并发指多个执行单元同时并行的执行,并发的执行单元对共享资源,如硬件资源,软件上的全局变量,静态变量等的访问则很容易导致竞态。
例如,对于前面的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设备驱动经常采用的互斥途径。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-6-23 11:38 , Processed in 0.022967 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表