Fork Me on GitHub

源码开放学ARM

LASO - Learn ARM with Source Open

首页         目录索引         资料下载         代码下载         联系作者        
下载PDF打印版本

中断屏蔽

中断屏蔽

在单CPU范围内避免竞态的一个简单的办法就是屏蔽中断。 这种办法可以保证正在执行的内核路径不会被中断处理程序强占,防止中断与进程之间竞态条件的发生。 另外由于linux内核的进程调度和异步IO等操作都是依赖中断来实现的,所以中断屏蔽也可以避免内核强占进程之间的竞态发生。

中断屏蔽使用方法

定义在 linux/irqflags.h ,实现在 asm/irqflags.h 中

local_irq_disable()
……
critical section //临界区
……
local_irq_enable()

中断屏蔽的注意事项

1、local_irq_disable()只能禁止本地CPU的中断,所以不能解决SMP多CPU引发的竞态。

2、中断对系统正常运行很重要,所以长时间屏蔽中断很危险,有可能会造成数据丢失或系统崩溃,所以要求在中断屏蔽之后当前的内核执行路径尽可能快的执行完毕。

中断屏蔽方法

local_irq_disable(void)         
local_irq_enable(void)
	
local_irq_save(flags)
local_irq_restore(flags)
	
local_bh_disable(void)
local_bh_enable(void)

上一节 | 目录索引 | 下一节

blog comments powered by Disqus