zoukankan      html  css  js  c++  java
  • Linux设备驱动程序 之 中断和锁

     中断和锁

    1. 硬中断和软中断(包括tasklet和timer)共享数据,硬中断中使用spin_lock/spin_unlock,软中断中使用spin_lock_irq/spin_unlock_irq或者spin_lock_irqsave/spin_unlock_irqrestore;

    硬中断可以打断软中断,所以软中断中访问共享数据需要禁止中断;考虑如下情况,当软中断中获取到锁,之后被硬中断打断,硬中断此时尝试获取锁,因为锁已经被软中断持有,硬中断获取不到,产生死锁;

    2. 硬中断和进程上下文共享数据,硬中断中使用spin_lock/spin_unlock,进程上下文中使用spin_lock_irq/spin_unlock_irq或者spin_lock_irqsave/spin_unlock_irqrestore;

    硬中断可以打断进程上下文,所以进程上下文中访问共享数据需要禁止中断;考虑如下情况,当进程上下文中获取到锁,之后被硬中断打断,硬中断此时尝试获取锁,因为锁已经被进程上下文持有,硬中断获取不到,产生死锁;

    3. 多个相同硬中断共享数据,不存在这种情况;

    同一个中断处理程序同时只有一个实例,当一个中断处理程序运行时,相应中断线在所有处理器上都会屏蔽掉;

    4. 多个不同的硬中断共享数据,需要使用spin_lock_irq/spin_unlock_irq或者spin_lock_irqsave/spin_unlock_irqrestore;

    硬中断可以被一个比自己优先级高的硬中断打断,考虑如下情况,当优先级低的中断中获取到锁,之后被优先级高的中断打断,高优先级中断此时尝试获取锁,因为锁已经被低优先级中断持有,高优先级中断获取不到,产生死锁;

    5. 软中断(包括tasklet和timer)和进程上下文共享数据,软中断中需要使用spin_lock/spin_unlock,进程上下文中需要使用spin_lock_bh/spin_unlock_bh;

    软中断可以打断进程上下文,所以进程上下文中访问共享数据需要禁止中断下半部;考虑如下情况,当进程上下文中获取到锁,之后被软中断打断,软中断此时尝试获取锁,因为锁已经被进程上下文持有,软中断获取不到,产生死锁;

    6. 多个相同软中断(不包括tasklet和timer)之间共享数据,需要使用spin_lock/spin_unlock;

    多个相同的软中断可以在不同CPU上同时运行,他们之间访问共享数据需要加锁;

    7. 多个不同软中断(不包括tasklet和timer)之间共享数据,需要使用spin_lock/spin_unlock;

    多个不同的软中断可以在不同CPU上同时运行,他们之间访问共享数据需要加锁;

    8. 多个相同tasklet(timer)之间共享数据,不存在这种情况;

    tasklet(timer)同时只会有一个实例运行,在SMP环境也是如此,只有一个运行中的实例,不需要加锁;

    9. 多个不同tasklet(timer)之间共享数据,需要使用spin_lock/spin_unlock;

    多个不同的tasklet(timer)是可以在不同CPU上同时运行的,他们之间访问共享数据需要加锁;

    中断打断关系

    1. 同类型的硬中断同时只会有一个实例执行,SMP环境也是如此,同级中断会被屏蔽掉;

    2. 不同类型的硬中断可以同时在不同CPU上同时执行;

    3. 同一个CPU上的优先级高的硬中断可以打断优先级低的硬中断;

    4. 硬中断可以打断软中断,可以打断进程上下文;

    5. 相同软中断(不包括tasklet和timer)可以在不同CPU上同时执行;

    6. 同一个CPU上的软中断(不包括tasklet和timer)是串行执行的,他们不会互相抢占;

    7. 相同tasklet(timer)同时只会有一个实例执行,SMP环境也是如此;

    8. 不同的tasklet(timer)可以同时在不同的CPU上同时执行;

    9. 软中断可以打断进程上下文;

  • 相关阅读:
    单例模式
    EasyExcel的基本使用方法
    交换两个整数,要求不能用一二则运算表达式,不得使用中间变量
    IDEA的基本使用技巧
    分区表常用操作汇总
    Orion测试磁盘性能
    samba安装和简单配置使用
    oracle批量处理范例
    Oracle中绑定变量的使用
    不修改sql文本情況下,改變其執行計劃
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/11761828.html
Copyright © 2011-2022 走看看