Может ли прерывание обслуживаться, пока планировщик меняет текущую задачу на другую (я имею в виду, что планировщик выполняет переключение контекста потока)? - PullRequest
0 голосов
/ 28 мая 2020

Прерывания могут обрабатываться во время выполнения процесса в момент возникновения прерывания. Можно ли обработать прерывание, пока планировщик меняет текущую задачу на другую (я имею в виду, что планировщик выполняет переключение контекста потока)?

Я был бы благодарен за любую подсказку по этому вопросу.

1 Ответ

1 голос
/ 02 июня 2020

Это невозможно, функция schedule () отключит прерывание перед переключением контекста.

static void __sched notrace __schedule(bool preempt)
{
    struct task_struct *prev, *next;
    unsigned long *switch_count;
    struct rq_flags rf;
    struct rq *rq;
    int cpu;

    cpu = smp_processor_id();
    rq = cpu_rq(cpu);
    prev = rq->curr;

    schedule_debug(prev);
    if (sched_feat(HRTICK))
        hrtick_clear(rq);

    //look at here
    local_irq_disable();
......
};

Вот исходный код , а я пишу блог о этот может быть вам полезен.

...