Linux设备驱动中的并发控制:中断屏蔽
发布时间
阅读量:
阅读量
3 中断屏蔽
在单核心处理器范围内实施竞态条件规避的方法是提前阻止系统的中断进入可执行区域,在驱动开发中并不推荐这种方法建议采用更为灵活的方式
中断屏蔽的使用方法为:
<linux/irqflags.h>
local_irq_disable() /* 屏蔽中断 /
. . .
critical section / 临界区 */
. . .
local_irq_enable() /* 开中断 */
该机制通过阻止CPU直接处理中断来实现;在ARM处理器架构中,请注意这一点:具体来说,在这种情况下,默认情况下会屏蔽ARM CPSR的状态寄存器I位的变化以避免中断触发。
arch/arm/include/asm/irqflags.h
静态内联函数禁用arch_local_irq_disable
}
由于Linux系统中的许多关键操作如异步I/O以及进程调度机制均高度依赖于中断机制,在实际应用中若发生长时间未响应的操作当处于被屏蔽状态时将导致所有等待处理的任务无法及时响应。这种持续未响应的操作若长时间未被处理将严重影响系统的稳定性与可靠性因此必须确保在完成当前任务后立即进入并完成相关临界区的操作以避免出现因未及时处理而引发的问题
本地中断禁用与启用函数仅能控制本处理器内部的中断机制,并不能有效解决对称多处理器环境下的竞态问题。单独依赖于中断禁用
全部评论 (0)
还没有任何评论哟~
