驱动 (5) 并发与同步

  • 内核并发1.0

并发分为真并发和伪并发
真并发
	1.cpu(SMP)
伪并发
	2. 进程调度(进程与进程)
	3. 中断与进程
  • 内核并发2.0
归根接地就是这三种原因
中断
调度
SMP

但是

1. 解决 中断 矛盾问题引入了软中断,也就引入了 软中断 产生的竞态

2. 在 __irq_svc 返回时调度, 也就引入了内核抢占的 竞态.


也就是现在有5个原因.

中断
调度
SMP

软中断 // 也就是说 软中断基于中断,如果中断被关闭,软中断产生的并发也就不需要考虑了
内核抢占

各种问题及解决方案

  • 内核抢占
开关内核抢占
  • SMP
不可关 
用自旋锁解决 // 自旋锁 函数中关了抢占 // 自旋锁内不能休眠 (sleep及调度)


  • 中断
开关中断

  • 调度
不可关
互斥锁 //可睡眠

  • 中断底半部(包括软中断)
tasklet 
    中断上下文//但好像是调度出来的,为什么是中断上下文呢? 待验证.
软中断
    中断上下文
工作队列 (线程)
    进程上下文

并发及方案

  • 内核抢占导致的并发
preempt_disable 
preempt_enable
  • SMP导致的 并发
spinlock_t     spinlock;

spin_lock_init(&spinlock);
spin_lock(&spinlock);
spin_unlock(&spinlock);

中断中用
spinlock_t     spinlock;
spin_lock_irqsave
spin_unlock_irqrestore
  • 中断导致的并发
local_irq_disable
local_irq_enable
  • 调度导致的进程间并发
struct mutex mutex;
mutex_init(&mutex); /*定义*/
...
mutex_lock(&mutex); /*获取互斥锁*/
... /*临界资源*/
mutex_unlock(&mutex); /*释放互斥锁*/
  • 底半部导致的并发
分为两种,一种是中断,一种是进程
在上面都已经提到了.

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值