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 static/image/common/back.gif
书上的抢占关于抢占时机的解释,有一条是“重新变为可抢占的时候” 这个该怎么理解,我理解就是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 static/image/common/back.gif
哪关中断和preempt_disable有关系?我想你说的preempt_enable的时候的抢占时机就是改变preempt_count的值吧 ...
关中断,即没有了抢占的时机。关抢占即禁止抢占。没有直接关系。
页: [1] 2
查看完整版本: 中断与抢占的问题