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


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

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

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

Содержание

Описание

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

  • Регистровый контекст регистров общего назначения (в том числе флаговый регистр)
  • Контекст состояния сопроцессора с плавающей точкой
  • Состояние регистров MMX/SSE (x86)
  • Состояние сегментных регистров (x86)
  • Состояние некоторых управляющих регистров (например, регистр CR3 отвечающий за страничное отображение памяти процесса) (x86)

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

  • Общая информация pid, tid, uid, gid, euid, egid,…
  • Состояние процесса/потока
  • Права доступа
  • Используемые потоком ресурсы и блокировки
  • Счетчики использования ресурсов (например таймеры использованного процессорного времени)
  • Регионы памяти, выделенные процессу

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

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

  • Происходит очистка конвейера команд и данных процессора
  • Очищается TLB, отвечающий за страничное отображение линейных адресов на физические

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

  • Содержимое кеша (особенно это касается кеша первого уровня) накопленное и «оптимизированное» под выполнение одного потока оказывается совершенно неприменимым к новому потоку, на который происходит переключение.
  • При переключении контекста, на процесс, который до этого долгое время не использовался (см. Подкачка страниц), многие страницы могут физически отсутствовать в оперативной памяти, что порождает подгрузку вытесненных страниц из вторичной памяти.

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

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

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

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

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

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

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

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

  • Существует возможность конфигурирования выделяемого потоку кванта процессорного времени. При сборке ядра Linux возможно указать Server/Desktop/Low-Latency Desktop. Для серверных конфигураций этот квант больше.

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

  • При переключении контекста между потоками, разделяющими одно адресное пространство в пределах одного процесса, ядро не трогает регистр CR3, тем самым сохраняя TLB
  • Во многих случаях ядро располагается в том же адресном пространстве, что и пользовательский процесс. При переключении контекста между user-space и kernel-space (и обратно), что, например, происходит при выполнении системных вызовов, ядро не трогает регистр CR3, тем самым сохраняя TLB
  • Производя планирование, ядро старается минимизировать перемещение процесса между вычислительными ядрами в SMP-системе, тем самым улучшая эффективность работы кеша второго уровня.
  • Реальное сохранение/восстановление контекста регистров сопроцессора плавающей точки и MMX/SSE контекст происходит при первом обращении нового потока, что оптимизировано под случай, когда большинство потоков производит только операции с регистрами общего назначения.

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

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

Ссылки


Wikimedia Foundation. 2010.

Смотреть что такое "Переключение контекста" в других словарях:

  • Переключение кодов (лингвистика) — Переключение кодов (также смешение кодов) обозначает в языкознании процесс разговора, предложения или речевой составляющей, при котором происходит внезапное, спонтанное переключение говорящего с одного языка на другой язык или диалект и обратно.… …   Википедия

  • Переключение кодов — (также смешение кодов) обозначает в языкознании процесс разговора, предложения или речевой составляющей, при котором происходит внезапное, спонтанное переключение говорящего с одного языка на другой язык или диалект и обратно. Переключение кодов… …   Википедия

  • Кода переключение — 1. переключение уровней формальности в языке в зависимости от контекста. Например, речи врача психиатра в академической обстановке на речь в беседе с пациентом, его устной речи на письменную при написании истории болезни или научной статьи; 2.… …   Энциклопедический словарь по психологии и педагогике

  • Поток выполнения — Для термина «Поток» см. другие значения. Процесс с двумя потоками выполнения на одном процессоре Поток выполнения (анг …   Википедия

  • Аппаратные средства защиты информационных систем — Аппаратные средства защиты информационных систем  средства защиты информации и информационных систем, реализованных на аппаратном уровне. Данные средства являются необходимой частью безопасности информационной системы, хотя разработчики… …   Википедия

  • Mach — У этого термина существуют и другие значения, см. Мах. Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью …   Википедия

  • Микроядро Mach — Mach  микроядро операционной системы, разработанное в Carnegie Mellon University в исследовательских целях для решения задач с использованием распределенных вычислений. Это одно из первых микроядер, которое до сих пор используется во множестве… …   Википедия

  • Многозадачность — (англ. multitasking)  свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов. Истинная многозадачность операционной системы возможна только… …   Википедия

  • Диспетчер операционной системы — Для термина «Планировщик задач» см. другие значения. Планирование выполнения задач  одна из ключевых концепций в многозадачности и многопроцессорности как в операционных системах общего назначения, так и в операционных системах реального… …   Википедия

  • Микроядро — У этого термина существуют и другие значения, см. Микроядро (цитология). Архитектура микроядра основывается на программах серверах пользовательского режима …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.