linux设备驱动程序之并发控制

linux设备驱动程序之并发控制

ID:8921358

大小:30.50 KB

页数:3页

时间:2018-04-12

linux设备驱动程序之并发控制_第1页
linux设备驱动程序之并发控制_第2页
linux设备驱动程序之并发控制_第3页
资源描述:

《linux设备驱动程序之并发控制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、上集说到哪儿了呢?瞧这记性,什么?说到"天要下雨,娘要嫁人"那段。。这是谁在答话,废话,我当然知道讲到这里了,我是说驱动讲到哪里了。算了,不管了..话说Linux开源社区的开发者们做了什么工作呢,很简单:利用spin_lock()/spin_unlock()作为自旋锁的基础,将它们和关中断local_irq_disable()/开中断local_irq_enable(),关底半部local_bh_disable()/开底半部local_bh_enable(),关中断并保存状态字local_irq_save()/开中断并恢复状态local_irq_restore()结合就完成了整套

2、自旋锁机制。唉吆,我的天啊,不是我说你们开源社区的那些家伙们,说个东西为啥要那么费劲,就为了说完上面那些红色的破话,差点没喘过来,本来在上篇就想说你们的…好人做到低,送你送到西,嘿嘿..我把上边的关系再帮大家捋捋,免的看着费劲…spin_lock_irq()=spin_lock()+local_irq_disable()spin_unlock_irq=spin_unlock()+local_irq_enable()spin_lock_irqsave()=spin_unlock()+local_irq_save()spin_unlock_irqrestore()=spin_unlo

3、ck()+local_irq_restore()spin_lock_bh()=spin_lock()+local_bh_disable()spin_unlock_bh()=spin_unlock()+local_bh_enable()又是一口气,这是什么年头,挣点点击率,怎么就这么难呢..不过也是没办法的事,上了Linux这条贼船,就要有牺牲我一个,幸福全中国的决心,不然微软的又要嚣张了,今天黑你一次屏,明天断你一次网,就连去网吧,微软还伸手到你面前说:对不起,你的系统是盗版…好了,让他们热闹去吧,说说咱们的事。作为Linux驱动程序工程师,你要在心里刻下几条戒律:1)什么叫自旋

4、锁,就是忙等待,当锁不可用时,CPU除了在那儿拼命的执行"测试并设置"的傻瓜操作外什么都不做,才不管电影中含情脉脉的你是她的谁,她是你的谁的这些事,任你两情相约,也是执手相看泪眼,竟无语凝咽。可见,这是多么的影响系统的性能。2)what?你不懂爱情,不在乎第一条,我晕…那就给你来个狠的:处理不好自旋锁可能导致系统死锁(deadlock),系统瘫痪。呵呵怕不,等你哭着闹着要上网而不能时,就怕了。那为啥会这样了,很简单,想想:如果我们不小心在一个递归中使用一个自旋锁,说白了就是一个CPU,它已经获得了这个自旋锁,可还贪心地想第二次获得这个自旋锁,这时就死锁了呗。另外,如果一个进程获得

5、自旋锁之后再阻塞,也是很有可能导致死锁的发生。理论完了,给你来点代码,就当是程序员点的一点交代吧:intdevice_count=0;定义文件打开的次数计数staticintdevice_open(structinode*inode,structfile*filp){...spinlock(&device_count);if(device_count)//已经打开{spin_unlock(&device_count);return-EBUSY;}device_count++;//增加使用计数spin_unlock(&device_count);...return0;}static

6、intdevice_release(structinode*inode,structfile*filp){...spinlock(&device_count);device_count--;//减少使用计数spin_unlock(&device_count);return0;}出招表四:读写自旋锁(防写不防读)"找你所说,上面的那招自旋锁看似相当好啊..""那是,也不看看是谁教的..""那我就不明白了,接着你说的例子:你说我买票是吧,售票员看到一张票(读)也没错啊,错在与她把票卖出去的操作上(写),你这可好,这样一来,一旦一个锁住,别人都别想看了,这也太傻瓜了吧.."小王不屑的鄙

7、视我。"耶呵,看不出来哈,你都知道用脑袋想问题了,以前不是都是要大脚趾计算的吗..什么时候升级换代的.."我吃惊的瞪着眼,"那好,不拿出点真货你搞不定你了..请看新招之读写自旋锁"读写自旋锁:它保留了自锁的概念,但是它规定在读方面同时可以有多个读单元,在写方面,只能最多有一个写进程。当然,读和写也不能同时进行。使用方法:1)初始化读写锁的方法。rwlock_tx;//动态初始化rwlock_tx=RW_LOCK_UNLOCKED;//动态初始化rwlock_init(&x);2)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。