Происходит ли переключение контекста в системе, очередь готовности которой содержит только один процесс и которая использует циклическое планирование?
Предположим, что текущий пакет ЦП одиночного процесса охватывает более одного временного интервала алгоритма циклического перебора.
Мои рассуждения следующие
Действия, которые могут иметь место при возникновении прерывания таймера в типичном случае:
- Возникает прерывание. Перейти в режим ядра
- ОС сохраняет текущий контекст на плате (сохраняет регистры, состояние процесса и информацию об управлении памятью текущего процесса)
- Выполнять множество архитектурно-зависимых операций, включая очистку кэшей данных и инструкций, а также TLB.
- Поместите текущий процесс в очередь готовности
- Выберите новый процесс для выполнения
- Загрузить контекст из платы этого процесса
- Перейти в пользовательский режим. Начать выполнение нового процесса
Теперь я думаю, что ОС может сначала проверить очередь готовности и проверить, есть ли другие процессы. Если их нет, переключение контекста не требуется. Таким образом, обработка прерывания таймера повлечет за собой переключение между пользовательским режимом и режимом ядра, проверку готовности Q и переключение обратно в пользовательский режим для возобновления выполнения процесса.
Это то, что происходит? Или происходит правильное переключение контекста, включающее ненужное сохранение текущего состояния одиночного процесса и его восстановление?
Если позже все же произойдет, есть ли особая причина?
Эта путаница возникла из-за вопроса в экзаменационной работе относительно расчета времени, затрачиваемого на переключение контекста в такой ситуации. Данный ответ подразумевает, что переключение контекста действительно происходит.
Я надеюсь, что люди, изучавшие код ядра, смогут пролить свет на это. Таким образом, этот вопрос о stackoverflow.