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

В вычисление, а переключатель контекста это процесс сохранения состояния процесс или же нить, чтобы его можно было восстановить и возобновить исполнение позже. Это позволяет нескольким процессам совместно использовать один центральное процессорное устройство (CPU) и является важной особенностью многозадачная операционная система.

Точное значение фразы «переключение контекста» варьируется. В контексте многозадачности это относится к процессу сохранения состояния системы для одной задачи, так что эта задача может быть приостановлена, а другая задача возобновлена. Переключение контекста также может происходить в результате прерывать, например, когда задача требует доступа дисковое хранилище, освобождая процессорное время для других задач. Некоторые операционные системы также требуют переключения контекста для перехода между пользовательский режим и режим ядра задачи. Процесс переключения контекста может отрицательно сказаться на производительности системы.[1]:28

Расходы

Переключение контекста обычно требует больших вычислительных ресурсов, и большая часть разработки операционных систем направлена ​​на оптимизацию использования переключений контекста. Переключение с одного процесса на другой требует определенного времени для выполнения администрирования - сохранения и загрузки регистров и карт памяти, обновления различных таблиц и списков и т. Д. Фактически, что задействовано в переключении контекста, зависит от архитектуры, операционных систем и количество совместно используемых ресурсов (потоки, принадлежащие одному процессу, совместно используют много ресурсов по сравнению с несвязанными не взаимодействующими процессами. Например, в Ядро Linux, переключение контекста включает переключение регистров, указатель стека (обычно регистр указателя стека ), счетчик команд, промывая резервный буфер перевода (TLB) и загрузка таблица страниц следующего процесса, который будет запущен (если старый процесс не разделяет память с новым).[2][3] Кроме того, аналогичное переключение контекста происходит между пользовательские потоки, особенно зеленые нити, и часто бывает очень легким, сохраняя и восстанавливая минимальный контекст. В крайних случаях, например, переключение между горутинами в Идти, переключение контекста эквивалентно сопрограмма доходность, которая лишь ненамного дороже, чем подпрограмма вызов.

Смена дел

Есть три потенциальных триггера для переключения контекста:

Многозадачность

Чаще всего в некоторых планирование По схеме один процесс должен быть отключен от ЦП, чтобы другой процесс мог работать. Это переключение контекста может быть инициировано процессом, который делает себя неработоспособным, например, ожидая Ввод / вывод или же синхронизация операция для завершения. На упреждающая многозадачность В системе планировщик также может отключить процессы, которые еще могут выполняться. Чтобы предотвратить нехватку процессорного времени для других процессов, планировщики с вытеснением часто настраивают прерывание по таймеру, которое срабатывает, когда процесс превышает свое отрезок времени. Это прерывание гарантирует, что планировщик получит контроль над переключением контекста.

Обработка прерываний

Современные архитектуры прерывать ведомый. Это означает, что если ЦП запрашивает данные, например, с диска, ему не нужно занято-подожди пока чтение не закончится; он может отправить запрос (устройству ввода-вывода) и продолжить выполнение другой задачи. Когда чтение закончено, ЦП можно прерванный (в данном случае аппаратным обеспечением, которое отправляет запрос прерывания на ПОС ) и представлен с прочитанным. Для прерываний программа под названием обработчик прерывания установлен, и именно обработчик прерывания обрабатывает прерывание с диска.

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

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

Когда система переходит между пользовательский режим и режим ядра, переключение контекста не требуется; а переход режима сам по себе не является переключателем контекста. Однако, в зависимости от операционной системы, в это время также может происходить переключение контекста.

Шаги

В переключателе состояние процесса, выполняющегося в данный момент, должно быть каким-то образом сохранено, чтобы при изменении его расписания это состояние можно было восстановить.

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

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

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

Пример

Рассмотрим общую операцию арифметического сложения A = B + 1. Инструкция хранится в регистр инструкций и счетчик команд увеличивается. A и B считываются из памяти и сохраняются в регистрах R1, R2 соответственно. В этом случае вычисляется B + 1 и записывается в R1 как окончательный ответ. Эта операция, так как есть последовательные чтения и записи и нет ожидания вызовы функций используется, следовательно, в этом случае не происходит переключения / ожидания контекста.

Однако некоторые специальные инструкции требуют системные вызовы которые требуют переключения контекста для процессов ожидания / сна. Обработчик системного вызова используется для переключения контекста на ядро режим. Функция display (data x) может требовать данные x с диска и драйвер устройства в режиме ядра, поэтому функция display () переходит в спящий режим и ожидает операции READ, чтобы получить значение x из диск, заставляя программу ждать и ждать функция вызов tbe Release позволяет текущему оператору перейти в спящий режим и дождаться, пока системный вызов разбудит его. Поддерживать параллелизм однако программе необходимо повторно выполнить новое значение и спящий процесс снова вместе.

Спектакль

Само по себе переключение контекста снижает производительность из-за запуска Планировщик заданий, TLB очищается, и косвенно из-за совместного использования Кэш процессора между несколькими задачами.[4] Переключение между потоками одного процесса может быть быстрее, чем между двумя отдельными процессами, потому что потоки используют одни и те же виртуальная память maps, поэтому в очистке TLB нет необходимости.[5]

Аппаратное и программное обеспечение

Переключение контекста может выполняться в первую очередь программным или аппаратным обеспечением. Некоторые процессоры, например Intel 80386 и его преемники,[6] иметь аппаратную поддержку для переключения контекста, используя специальный сегмент данных, обозначенный сегмент состояния задачи (TSS). Переключение задачи может быть явно инициировано инструкцией CALL или JMP, нацеленной на дескриптор TSS в глобальная таблица дескрипторов. Это может происходить неявно, когда запускается прерывание или исключение, если есть ворота задач в таблица дескрипторов прерываний (IDT). Когда происходит переключение задачи, ЦП может автоматически загрузить новое состояние из TSS.

Как и в случае с другими задачами, выполняемыми на оборудовании, можно было бы ожидать, что это будет довольно быстро; однако основные операционные системы, включая Windows и Linux,[7] не используйте эту функцию. В основном это связано с двумя причинами:

  • Аппаратное переключение контекста не сохраняет все регистры (только регистры общего назначения, не плавающая точка регистры - хотя TS бит автоматически включается в CR0 контрольный регистр, что приводит к ошибке при выполнении с плавающей запятой инструкции и давая ОС возможность сохранять и восстанавливать состояние с плавающей запятой по мере необходимости).
  • Связанные с этим проблемы производительности, например переключение программного контекста, могут быть выборочными и хранить только те регистры, которые нуждаются в хранении, тогда как аппаратное переключение контекста сохраняет почти все регистры, требуются они или нет.

Смотрите также

Рекомендации

  1. ^ Таненбаум, Эндрю С .; Бос, Герберт (20 марта 2014 г.). Современные операционные системы (4-е изд.). Пирсон. ISBN  978-0133591620.
  2. ^ Ядро Linux IA-64: разработка и реализация, 4.7 Переключение адресных пространств
  3. ^ Операционные системы, 5.6 Переключение контекста, п. 118
  4. ^ Чуанпэн Ли; Чен Дин; Кай Шен. «Количественная оценка стоимости переключения контекста» (PDF). Цитировать журнал требует | журнал = (помощь)
  5. ^ Ульрих Дреппер (9 октября 2014 г.). «Память, часть 3: виртуальная память». LWN.net.
  6. ^ «Определение переключения контекста». Linfo.org. Архивировано из оригинал на 2010-02-18. Получено 2013-09-08.
  7. ^ Бове, Даниэль Пьер; Чезати, Марко (2006). Понимание ядра Linux, третье издание. O'Reilly Media. п. 104. ISBN  978-0-596-00565-8. Получено 2009-11-23.

внешняя ссылка