Переключатель контекста потока Vs.переключение контекста процесса - PullRequest
102 голосов
/ 26 марта 2011

Может ли кто-нибудь сказать мне, что именно делается в обеих ситуациях? Какова основная стоимость каждого из них?

Ответы [ 8 ]

178 голосов
/ 26 марта 2011

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

Более нечеткая стоимость заключается в том, что переключение контекста портится с процессорамимеханизмы кеширования.По сути, когда вы переключаете контекст, все адреса памяти, которые процессор «запоминает» в своем кеше, фактически становятся бесполезными.Единственное существенное различие заключается в том, что при изменении пространств виртуальной памяти очищается буфер трансляции Lookaside (TLB) или аналогичный, что делает доступ к памяти на некоторое время намного более дорогим.Это не происходит во время переключения потока.

13 голосов
/ 24 августа 2014

Переключение контекста процесса включает в себя переключение адресного пространства памяти.Это включает в себя адреса памяти, отображения, таблицы страниц и ресурсы ядра - относительно дорогая операция.На некоторых архитектурах это даже означает сброс различных кэшей процессора, которые не могут быть разделены между адресными пространствами.Например, x86 должен очистить TLB, а некоторые процессоры ARM должны очистить весь кэш L1!

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

9 голосов
/ 27 октября 2016

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

Основные затраты в обоих сценариях связаны с загрязнением кэша. В большинстве случаев рабочий набор, используемый исходящим потоком, будет значительно отличаться от рабочего набора, который используется входящим потоком. В результате входящий поток начнет свою жизнь с лавинных пропусков кеша, тем самым удаляя старые и бесполезные данные из кеша и загружая новые данные из памяти. То же самое относится и к TLB (перевод в сторону буфера, который находится на процессоре). В случае сброса виртуального адресного пространства (потоки выполняются в разных процессах) штраф еще хуже, поскольку сброс виртуального адресного пространства приводит к сбросу всего TLB, даже , если новый поток действительно нуждается в загрузить только несколько новых записей. В результате новый поток начнет свой квант времени с большим количеством пропусков TLB и частым просмотром страниц. Прямая стоимость переключения потоков также не является ничтожной (от ~ 250 и до ~ 1500-2000 циклов) и зависит от сложности процессора, состояний обоих потоков и наборов регистров, которые они фактически используют.

P.S .: Хороший пост о переключении контекста: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

3 голосов
/ 03 декабря 2012
  • переключение процессов: это переход между двумя резидентами процесса в многопрограммной среде;
  • переключение контекста: это изменение контекста с исполняемой программы на подпрограмму обработки прерываний (ISR).
2 голосов
/ 14 февраля 2018

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

0 голосов
/ 22 октября 2018

Я думаю, что основное отличие заключается в вызове switch_mm(), который обрабатывает дескрипторы памяти старой и новой задачи.В случае потоков адресное пространство виртуальной памяти не изменяется (потоки совместно используют виртуальную память), поэтому очень мало нужно сделать и, следовательно, дешевле.

0 голосов
/ 29 декабря 2011

Предполагая, что ЦП, на котором работает ОС, имеет подключенные устройства с высокой задержкой,

Имеет смысл запустить другой поток из адресного пространства процесса, в то время как устройство с высокой задержкой отвечает обратно.

Но, если устройство с высокой задержкой реагирует быстрее, чем требуется время, для настройки таблицы + преобразования виртуальной памяти в физическую для НОВОГО процесса, тогда сомнительно, что переключение вообще необходимо.

Кроме того, лучше выбрать HOT-кеш (данные, необходимые для запуска процесса / потока за меньшее время).

0 голосов
/ 26 марта 2011

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

В этом есть нечто большее. Они написали на нем книги.

Что касается стоимости, переключение контекста процесса >>>> поток, поскольку вы должны сбросить все счетчики стека и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...