Переключение контекста


Переключение контекста (англ. context switch) — в многозадачных ОС и средах — процесс прекращения выполнения процессором одной задачи (процесса, потока, нити) с сохранением всей необходимой информации и состояния, необходимых для последующего продолжения с прерванного места, и восстановления и загрузки состояния задачи, к выполнению которой переходит процессор.

В процедуру переключения контекста входит так называемое планирование задачи — процесс принятия решения, какой задаче передать управление.

Кроме того, что очень важно, при переключении контекста происходят следующие программно-незаметные аппаратные действия, влияющие на производительность:

С точки зрения прикладного уровня переключение контекста можно разделить на добровольное (voluntary) и принудительное (non-voluntary): выполняющийся процесс/поток может сам передать управление другому потоку либо ядро может насильно отобрать у него управление.

Разницу между операционными системами реального времени и разделения времени особенно хорошо видно в различии логики планирования при переключении контекста: Планировщик систем разделения времени старается максимизировать производительность всей системы в целом, возможно, в ущерб производительности отдельных процессов. Задача планировщика систем реального времени — обеспечить приоритетное выполнение отдельных критических процессов, причем не важно, насколько жесткими накладными расходами для всей остальной системы в целом это обойдется.

Как видно из вышесказанного, переключение контекста является очень ресурсоёмкой операцией, причем, чем более «навороченым» является процессор, тем более ресурсоёмкой эта операция становится. Исходя из этого, ядро использует ряд стратегий, чтобы, во-первых, сократить количество переключений контекста, а во вторых, сделать переключение контекста менее ресурсоёмким.