Что происходит, когда операция context_switch прерывается в CFS? - PullRequest
0 голосов
/ 27 ноября 2018

В 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 собирается выделить этот процесс).

У меня следующие сомнения

  1. Когда происходит переключение context_s между P1 и P2, он закончится в любой ситуации или его можно прервать?
  2. В случае, если во время описанного выше процесса context_switch генерируется прерывание таймера, которое пытается разбудить P3 (чье vruntime меньше, чем vruntime для P2), (a) ONGOING CURRENT context_switch отбрасывает / игнорирует прерывание таймера и продолжает завершать context_switch?(б) Или он будет обрабатывать прерывание по таймеру немедленно?(c) Или он сохранит это прерывание таймера для последующего обслуживания.
...