Chinaunix

标题: 中断与抢占的问题 [打印本页]

作者: ykai229    时间: 2014-04-20 21:57
标题: 中断与抢占的问题
应该怎么理解中断与抢占的关系呢,书上说禁止中断就禁止抢占,这个要怎么理解啊,从内核抢占的几个时机来理解么?那关中断的时候preempt_count有没有变化,源码里面没看到呢?
作者: humjb_1983    时间: 2014-04-21 08:36
抢占的时机(具体记不住了~)应该都与中断相关,关闭中断,意味着没有了抢占时机。
作者: ykai229    时间: 2014-04-21 19:14
书上的抢占关于抢占时机的解释,有一条是“重新变为可抢占的时候” 这个该怎么理解,我理解就是preempt_count重新变为0的时候,哪关中断难道也会改变preempt_count?源码里面没看到,不是很理解啊回复 2# humjb_1983


   
作者: humjb_1983    时间: 2014-04-22 09:05
ykai229 发表于 2014-04-21 19:14
书上的抢占关于抢占时机的解释,有一条是“重新变为可抢占的时候” 这个该怎么理解,我理解就是preempt_cou ...

#define preempt_enable() \
do { \
        preempt_enable_no_resched(); \
        preempt_check_resched(); \
} while (0)
在preempt_enable的时候,会有抢占的时机。
作者: xs3c    时间: 2014-04-22 15:56
回复 1# ykai229
中断返回,以及preempt_enable的时候。


   
作者: daniel_11    时间: 2014-04-22 16:52
Linux 3.4,
asmlinkage void __sched notrace preempt_schedule(void)
{
        struct thread_info *ti = current_thread_info();

        /*
         * If there is a non-zero preempt_count or interrupts are disabled,
         * we do not want to preempt the current task. Just return..
         */
        if (likely(ti->preempt_count || irqs_disabled()))
                return;
..................
}

很怀疑在关中断的时候会调用preempt_enable? 不管怎样,关中断是无法调度的。
作者: Hugo801122    时间: 2014-04-24 01:00
看得我头晕,好复杂的概念。
作者: ykai229    时间: 2014-04-24 23:01
主动放弃CPU呢?我理解的是关中断就关闭了抢占式调度回复 6# daniel_11


   
作者: ykai229    时间: 2014-04-24 23:03
哪关中断和preempt_disable有关系?我想你说的preempt_enable的时候的抢占时机就是改变preempt_count的值吧回复 4# humjb_1983


   
作者: humjb_1983    时间: 2014-04-25 09:27
ykai229 发表于 2014-04-24 23:03
哪关中断和preempt_disable有关系?我想你说的preempt_enable的时候的抢占时机就是改变preempt_count的值吧 ...

关中断,即没有了抢占的时机。关抢占即禁止抢占。没有直接关系。
作者: daniel_11    时间: 2014-04-25 11:21
回复 8# ykai229
任务调度需要做上下文切换,在中断上下文做切换是否可行?是否有意义?关中断很有可能在操作临界区,如何保护?个人理解不是完全不能,但似乎得不偿失。
下面的讨论供参考,
http://stackoverflow.com/questio ... -interrupt-handlers
有木有大神来解惑?

   
作者: humjb_1983    时间: 2014-04-25 11:42
ykai229 发表于 2014-04-24 23:01
主动放弃CPU呢?我理解的是关中断就关闭了抢占式调度回复 6# daniel_11

关中断之后,是不能主动放弃CPU,一旦放弃,系统就挂住无法调度了。记得内核中会有这样的检测,如有这样的情况,会打印相应的错误。
作者: humjb_1983    时间: 2014-04-25 11:42
daniel_11 发表于 2014-04-25 11:21
回复 8# ykai229
任务调度需要做上下文切换,在中断上下文做切换是否可行?是否有意义?关中断很有可能在 ...

中断中是不能调度的,内核有相应的检测机制。
作者: daniel_11    时间: 2014-04-25 11:52
回复 13# humjb_1983

可不可以给出代码?谢谢!
   
作者: humjb_1983    时间: 2014-04-26 02:07
现在手上没有代码,周一找下。
作者: ykai229    时间: 2014-05-04 22:03
关中断会禁止抢占,之前看源码的时候马虎了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2