Как происходит переключение контекста потоков на многоядерном процессоре? - PullRequest
7 голосов
/ 12 октября 2010

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

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

Ответы [ 3 ]

6 голосов
/ 20 октября 2010

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

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

4 голосов
/ 12 октября 2010

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

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

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

0 голосов
/ 01 сентября 2013

Предположим, у нас есть два процесса 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

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

...