Как на самом деле работают функции schedule () + switch_to () из ядра Linux?

Я пытаюсь понять, как на самом деле работает процесс расписания в ядре Linux. Мой вопрос не об алгоритме расписания. Речь идет о том, как работают функции schedule () и switch_to () .

Я постараюсь объяснить. Я видел, что:

Когда у процесса заканчивается временной интервал, флаг need_resched устанавливается с помощью scheduler_tick () . Ядро проверяет флаг, видит, что он установлен, и вызывает schedule () (относящийся к вопросу 1), чтобы переключиться на новый процесс. Этот флаг - сообщение о том, что расписание должно быть запущено как можно скорее, потому что другой процесс заслуживает запуска. При возврате в пространство пользователя или выходе из прерывания проверяется флаг need_resched . Если он установлен, ядро ​​вызывает планировщик перед продолжением.

Заглянув в исходный код ядра (linux-2.6.10 - версия, на которой основана книга «Разработка ядра Linux, второе издание»), я также увидел, что некоторые коды могут вызывать функцию schedule () добровольно, предоставляя другому процессу право на выполнение. Я видел, что функция switch_to () на самом деле выполняет переключение контекста. Я изучил некоторые архитектурно-зависимые коды, пытаясь понять, что на самом деле делает switch_to () .

Такое поведение вызвало некоторые вопросы, на которые я не смог найти ответы:

  1. Когда switch_to () завершается, каков текущий процесс? Процесс, вызвавший schedule () ? Или следующий процесс, выбранный для запуска?

  2. Когда schedule () вызывается прерыванием, выбранный для запуска процесс начинает выполняться, когда обработка прерывания завершается (после некоторого RTE)? Или до этого?

  3. Если функция schedule () не может быть вызвана из прерывания, когда установлен флаг- need_resched ?

  4. Когда обработчик прерывания таймера установлен работает, какой стек используется?

Не знаю, могу ли я пояснить. Если бы я не мог, я надеюсь, что смогу это сделать после некоторых ответов (или вопросы). Я уже просмотрел несколько источников, пытаясь понять этот процесс. У меня есть книга "Разработка ядра Linux, раздел", и я тоже ею пользуюсь. Я немного знаю о MIP и архитектуре H8300, если это поможет объяснить.

28
задан Cœur 18 March 2017 в 08:28
поделиться