1

Мы знаем, что блокировка спин-блокировки отключает превенцию на соответствующем процессоре. Итак, предположим, что выполняемый код ядра вызывает функцию, которая спит в процессе. Несмотря на деактивацию preemption, ядро ​​Linux даст процессору другой поток?Предотвращение и спящий режим во время атомного контекста спин-спина

ответ

2

зависит от цели. Есть ряд из cond_resched() функций, проверка, если выгрузить биты установлены и, таким образом, выводя из строя перепланировать:

/* 
* Returns true when we need to resched and can (barring IRQ state). 
*/ 
static __always_inline bool should_resched(void) 
{ 
    return unlikely(!preempt_count() && tif_need_resched()); 
} 

int __sched _cond_resched(void) 
{ 
    if (should_resched()) { 
     __cond_resched(); 
     return 1; 
    } 
    return 0; 
} 

Но не все процедуры ядра сделать это. То есть мьютексы напрямую вызывают schedule_preempt_disabled(), который игнорирует проверки целостности. В этом случае schedule() попытается дать процессору другую задачу, но будет жаловаться на «планирование в режиме атома».

Смежные вопросы