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

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

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

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

Содержание
  • 1 Стоимость
  • 2 Варианты переключения
    • 2.1 Многозадачность
    • 2.2 Обработка прерываний
    • 2.3 Переключение режима пользователя и режима ядра
  • 3 шага
  • 4 Пример
  • 5 Производительность
    • 5.1 Аппаратное обеспечение и программное обеспечение
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Стоимость

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

Варианты переключения

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

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

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

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

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

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

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

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

Шаги

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

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

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

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

Пример

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

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

Производительность

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

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

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

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

  • Аппаратное переключение контекста не сохраняет все регистры (только регистры общего назначения, а не регистры с плавающей запятой, хотя бит TSавтоматически включается в CR0регистре управления, что приводит к ошибке при выполнении команд с плавающей запятой и дает ОС возможность сохранять и восстанавливать данные с плавающей запятой
  • Связанные проблемы производительности, например, программное переключение контекста может быть выборочным и сохранять только те регистры, которые нуждаются в хранении, тогда как аппаратное переключение контекста сохраняет почти все регистры независимо от того, требуются они или нет.
См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-15 10:52:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте