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


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

7 89

7 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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