Может ли кто-нибудь сказать мне, что именно делается в обеих ситуациях? Какова основная стоимость каждого из них?
Переключатель контекста потока Vs. переключение контекста процесса
Ответ 1
Основное различие между переключателем потока и переключателем процесса состоит в том, что во время переключения потока пространство виртуальной памяти остается тем же, а не во время переключения процесса. Оба типа включают передачу управления ядру операционной системы для переключения контекста. Процесс включения и выключения ядра ОС вместе со стоимостью переключения регистров является самой большой фиксированной стоимостью выполнения переключения контекста.
Более нечеткая стоимость заключается в том, что переключение контекста мешает механизмам кэширования процессоров. По сути, когда вы переключаете контекст, все адреса памяти, которые процессор "запоминает" в своем кеше, фактически становятся бесполезными. Здесь есть одно большое отличие: когда вы меняете пространство виртуальной памяти, процессор Translation Lookaside Buffer (TLB) или его эквивалент сбрасывается, делая доступ к памяти на некоторое время намного дороже. Это не происходит во время переключения потока.
Ответ 2
Переключение контекста процесса включает в себя переключение адресного пространства памяти. Это включает в себя адреса памяти, сопоставления, таблицы страниц и ресурсы ядра - относительно дорогостоящую операцию. На некоторых архитектурах это даже означает сброс различных кэшей процессора, которые не разделяются по адресным пространствам. Например, x86 должен очистить TLB, а некоторые ARM-процессоры должны очистить весь кеш L1!
Переключение потоков - это переключение контекста из одного потока в другой в одном и том же процессе (переход от потока к потоку через процессы - это просто переключение процесса). Переключение состояния процессора (например, счетчик программ и содержимое регистра) обычно очень эффективно.
Ответ 3
Прежде всего, операционная система переводит исходящий поток в режим ядра, если его там еще нет, поскольку переключение потоков может выполняться только между потоками, работающими в режиме ядра. Затем вызывается планировщик для принятия решения о потоке, на который будет выполняться переключение. После принятия решения ядро сохраняет часть контекста потока, расположенного в ЦП (регистры ЦП), в выделенном месте в памяти (часто в верхней части стека ядра исходящего потока). Затем ядро выполняет переключение из стека ядра исходящего потока в стек ядра входящего потока. После этого ядро загружает ранее сохраненный контекст входящего потока из памяти в регистры процессора. И, наконец, возвращает управление обратно в пользовательский режим, но в пользовательский режим нового потока. В случае, когда ОС определила, что входящий поток запускается в другом процессе, ядро выполняет один дополнительный шаг: устанавливает новое активное виртуальное адресное пространство.
Основные затраты в обоих сценариях связаны с загрязнением кэша. В большинстве случаев рабочий набор, используемый исходящим потоком, будет значительно отличаться от рабочего набора, который используется входящим потоком. В результате входящий поток начнет свою жизнь с лавинных пропусков кеша, тем самым удаляя старые и бесполезные данные из кеша и загружая новые данные из памяти. То же самое относится и к TLB (перевод в сторону буфера, который находится на процессоре). В случае сброса виртуального адресного пространства (потоки выполняются в разных процессах) штраф еще хуже, поскольку сброс виртуального адресного пространства приводит к сбросу всего TLB, даже, если новый поток действительно нуждается в загрузить только несколько новых записей. В результате новый поток начнет свой квант времени с большим количеством пропусков TLB и частым просмотром страниц. Прямая стоимость переключения потоков также не является незначительной (от ~ 250 и до ~ 1500-2000 циклов) и зависит от сложности процессора, состояний обоих потоков и наборов регистров, которые они фактически используют.
П.С.: Хороший пост о переключении контекста: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html
Ответ 4
- переключение процессов: это переход между двумя резидентными процессами в процессе мультипрограммирования; Переключение контекста
- : - это изменяющийся контекст от исполняющей программы к процедуре обслуживания прерываний (ISR).
Ответ 5
При переключении контекста потока пространство виртуальной памяти остается неизменным, в отличие от процесса переключения контекста. Кроме того, переключение контекста процесса обходится дороже, чем переключение контекста потока.
Ответ 6
Я думаю, что главное отличие заключается в вызове switch_mm()
, который обрабатывает дескрипторы памяти старой и новой задачи. В случае потоков адресное пространство виртуальной памяти не изменяется (потоки совместно используют виртуальную память), поэтому очень мало нужно сделать и, следовательно, дешевле.
Ответ 7
Хотя переключение контекста потока должно изменить контекст выполнения (регистры, указатели стека, счетчики программ), им не нужно изменять адресное пространство, как это делают переключатели контекста процессов. Существует дополнительная плата за переключение адресного пространства, расширение доступа к памяти (разбиение на страницы, сегментация и т.д.) И необходимость сбрасывать TLB при входе или выходе из нового процесса...
Ответ 8
Короче говоря, переключатель контекста потока не назначает новый набор памяти и pid, он использует то же, что и родительский, поскольку он работает в одном и том же процессе. Процесс запускает новый процесс и, таким образом, назначает новые mem и pid.
Для него есть loooooot. Они написали на нем книги.
Что касается стоимости, переключатель контекста процесса → → поток, поскольку вы должны reset все счетчики стека и т.д.
Ответ 9
Предполагая, что процессор, на котором работает ОС, подключил некоторые устройства с высокой задержкой,
Имеет смысл запустить другой поток из адресного пространства процесса, в то время как устройство с высокой задержкой откликнется.
Но если устройство с высокой задержкой реагирует быстрее, чем время, необходимое для настройки таблицы + перевода виртуальных в физические запоминающие устройства для нового процесса, то сомнительно, что коммутатор необходим вообще.
Кроме того, лучшим выбором является ГОРЯЧИЙ кэш (данные, необходимые для запуска процесса/потока, достижимы за меньшее время).