В CFS следующий процесс выбирается в зависимости от его времени работы.Для выполнения выбран процесс с минимальным временем запуска.
Предположим, у меня есть 3 процесса - P1, P2 и P3.
(vruntime of P2 - vruntime of P1 ) > sched_wakeup_granularity_ns
(vruntime of P2 - vruntime of P3 ) > sched_wakeup_granularity_ns
Предположим, что P1 работает, а P3 находится в состоянии блокировки.P2 находится в состоянии ожидания.
Теперь предположим, что происходит контекстный переключатель между P1 и P2, когда P1 выполняет планирование (освобождение CPU), а P2 планирует (CPU собирается выделить этот процесс).
У меня следующие сомнения
- Когда происходит переключение context_s между P1 и P2, он закончится в любой ситуации или его можно прервать?
- В случае, если во время описанного выше процесса context_switch генерируется прерывание таймера, которое пытается разбудить P3 (чье vruntime меньше, чем vruntime для P2), (a) ONGOING CURRENT context_switch отбрасывает / игнорирует прерывание таймера и продолжает завершать context_switch?(б) Или он будет обрабатывать прерывание по таймеру немедленно?(c) Или он сохранит это прерывание таймера для последующего обслуживания.