Переключение контекста | это... Что такое Переключение контекста? (original) (raw)

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

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

Содержание

Описание

При переключении контекста происходит сохранение и восстановление следующей информации:

В ядре ОС с каждым потоком связаны следующие структуры:

Переключение контекста и производительность

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

Кроме того, следует учесть следующие факты, влияющие на состояние системы:

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

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

  1. Ядро ОС может отобрать управление у выполняющегося процесса/потока при истечении кванта времени, выделенного на выполнение. С точки зрения программиста это означает, что управление могло уйти от потока в «самый неподходящий» момент времени, когда структуры данных могут находиться в противоречивом состоянии из-за того, что их изменение не было завершено.
  2. Выполнение блокирующего системного вызова. Когда приложение производит ввод-вывод, ядро может решить, что можно отдать управление другому потоку/процессу в ожидании, пока запрошенный данным потоком дисковый либо сетевой ввод-вывод будет выполнен. Данный вариант является самым производительным.
  3. Синхронизирующие примитивы ядра. Мьютексы, Семафоры и т. д. Это и есть основной источник проблем с производительностью. Недостаточно продуманная работа с синхронизирующими примитивами может в «плохих случаях» приводить к десяткам тысяч, а при плохом проектировании и сотням тысяч переключений контекста в секунду.
  4. Системный вызов, явно ожидающий наступления события (select, poll, epoll, pause, wait,…) либо момента времени (sleep, nanosleep,..). Данный вариант является относительно производительным, так как ядро ОС имеет информацию об ожидающих процессах.

Особенности процедуры планировщика

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

Реализации переключения контекста в современных ОС

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

Методы уменьшения количества переключений контекста:

Методы снижения ресурсоемкости переключения контекста:

Вышеприведенные примеры относятся к ядру Linux, однако прочие операционные системы также применяют сходные методы, хотя в случае проприетарных ОС доказать/опровергнуть использование этого является проблематичным.

Замечания о терминологии

Ссылки

Просмотр этого шаблона Аспекты операционных систем (историясписок)
Ядро ГибридноеМикроМодульноеМонолитноеНаноЭкзоДрайверПространство пользователя • Область пользователя
Управлениепроцессами Режимы (супервизорареальныйзащищённый) • ПрерываниеКольца защитыПереключение контекстаМногозадачность (вытесняющаякооперативнаямультипрограммирование) • Процесс • Управление процессом • Планировщик задачМногопоточность
Управлениепамятью Защита памятиСегментная адресация памятиСтраничная памятьМенеджер виртуальной памятиОшибка сегментации • Общая ошибка защиты
Прочее Загрузчик ОСAPIVFSКомпьютерная сетьGUIСлой аппаратных абстракций (HAL)