当前位置: 技术问答>linux和unix
中断的问题!!1
来源: 互联网 发布时间:2016-11-01
本文导语: 使用local_irq_save或local_irq_disable把CPU的中断关了之后,会发生什么情况呢? 在单CPU非抢占式内核前提下,我的理解和问题是: 1,关CPU中断后,CPU不在响应其它中断,但是外围器件是否还响应中断不知道 2,关CPU中断的...
使用local_irq_save或local_irq_disable把CPU的中断关了之后,会发生什么情况呢?
在单CPU非抢占式内核前提下,我的理解和问题是:
1,关CPU中断后,CPU不在响应其它中断,但是外围器件是否还响应中断不知道
2,关CPU中断的时间不能太长,会影响性能
3,在delay的时候CPU和外围器件会不会响应中断呢?
举个例子:
local_irq_save(flags);
for () {
func();
msleep();
func1();
}
local_irq_restore(flags);
这种情况下,系统不会死还可以用,还响应其它中断,看代码得知在schdule()里会有开CPU中断的函数,是不是这个原因呢?
当去掉msleep之后,整个系统就相当于死了,也不响应其它中断!
不知道我的理解对不对,期望高人解答
在单CPU非抢占式内核前提下,我的理解和问题是:
1,关CPU中断后,CPU不在响应其它中断,但是外围器件是否还响应中断不知道
2,关CPU中断的时间不能太长,会影响性能
3,在delay的时候CPU和外围器件会不会响应中断呢?
举个例子:
local_irq_save(flags);
for () {
func();
msleep();
func1();
}
local_irq_restore(flags);
这种情况下,系统不会死还可以用,还响应其它中断,看代码得知在schdule()里会有开CPU中断的函数,是不是这个原因呢?
当去掉msleep之后,整个系统就相当于死了,也不响应其它中断!
不知道我的理解对不对,期望高人解答
|
最近我也在看这个,大概说说我的理解吧。
第一个问题我觉得外围器件(比如调用该函数之外的CPU)还是会相应中断的,这两个函数禁用的只是当前CUP的中断,其实就是设置终端处理器的一些掩码。
第三个应该要想应,因为delay里面没有发现关中断,但是他的延迟时间是非常断的。
至于你的例子,这样说吧,在非抢占式内核中,进程除非自己让步,否则将运行到其结束。也就是说自己调用schedule()。因此我觉得此处是否崩溃和中断没什么关系吧,只要没有类似死循环之类的东西。
第一个问题我觉得外围器件(比如调用该函数之外的CPU)还是会相应中断的,这两个函数禁用的只是当前CUP的中断,其实就是设置终端处理器的一些掩码。
第三个应该要想应,因为delay里面没有发现关中断,但是他的延迟时间是非常断的。
至于你的例子,这样说吧,在非抢占式内核中,进程除非自己让步,否则将运行到其结束。也就是说自己调用schedule()。因此我觉得此处是否崩溃和中断没什么关系吧,只要没有类似死循环之类的东西。
|
打错几个字,因该是延迟时间非常短,不过我好像连非抢占和抢占都没搞的很清楚,在linux内核设计与实现中说非抢占多任务模式下,除非进程自己主动停止运行,否则就一直执行,那么这种情况下如果其他地方产生终端,到底是如何处理的呢,求解释阿。
|
不排除CPU响应外围器件,引起中断嵌套。