Как происходит переключение контекста потоков на многоядерном процессоре?

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

Но как это сделать, когда у нас несколько процессоров? Есть ли главный ЦП, который выполняет переключение контекста всех подчиненных ЦП? Каждый ЦП отвечает за собственное переключение контекста? Если да, то как синхронизируется переключение, чтобы два процессора не выполняли один и тот же поток? Или есть какой-то другой механизм?


person gablin    schedule 12.10.2010    source источник


Ответы (3)


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

Ядро многопоточное; Другими словами, он написан для безопасного одновременного выполнения на нескольких ядрах. Таким образом, только один ЦП завершает выполнение любого заданного потока, потому что код построен так, что, если несколько ЦП перепланировывают одновременно, происходит правильный результат.

person Community    schedule 20.10.2010

ЦП не переключают контекст. Операционные системы делают.

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

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

person MSalters    schedule 12.10.2010
comment
Я никогда не говорил, что ЦП переключает контекст. Я сказал, что код, ответственный (то есть ОС) за переключение контекста, выполняется на CPU. Но как с этим справиться, когда у нас более одного процессора? Выполняется ли код переключения контекста на всех процессорах? - person gablin; 12.10.2010

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

The current registers are stored into the process structure for P1.
The stored register values from the process structure for P2 are loaded into the CPU's registers.
CPU returns the User mode
P1 is context switched out and P2 is context switched in and running

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

person anish    schedule 01.09.2013