@Serge123
Любитель-программист и вебмастер, писатель

Как ОС управляет ядрами CPU?

Как, к примеру, винда назначает данному потоку данное ядро? Как сетап отключает ядра ЦП? Я проглядел все глаза, но не увидел в списке команд ЦП таких инструкций. Через порты даются команды ЦП, или как?
И если в сетапе отключено ядро, то другое ядро будет использовать кэши памяти отключенного ядра?
  • Вопрос задан
  • 453 просмотра
Пригласить эксперта
Ответы на вопрос 3
15432
@15432
Системный программист ^_^
Отключение ядер процессора происходит в BIOS, способы различаются в зависимости от модели и производителя. Обычно это установка битов в каком-либо PCI Config Space регистре чипсета.

На этапе запуска компьютера, активно только 0 ядро (0 поток в случае SMT), оно начинает исполнятся с адреса FFFFFFF0, где на этот момент находится образ BIOS (UEFI). Остальные ядра (потоки) находятся в состоянии WFS (Wait For Startup Inter-Processor Interrupt, ожидание внутрипроцессорного прерывания начала работы). В процессе загрузки, происходит настройка механизма многопоточности самой операционной системы, контексты, очереди, таблицы и так далее. В том числе для каждого процессора (потока) создаются Idle циклы, в которых каждый будет крутиться в ожидании новых задач. Как только все настроено, через SIPI (Startup Inter-Processor Interrupt) пробуждаются остальные ядра и им передается адрес этого самого Idle цикла.
А потом операционная система добавляет в очередь задач задачи, требующие выполнения и при очередном периодическом прерывании у ядра происходит смена контекста и начинает выполняться эта задача.. как именно это устроено в Windows и кто решает, какому ядру назначить задачу - не знаю. Где-то в ядре (ntoskrnl.exe)

Про кеш зависит от процессора. Например, в Ryzen кеш общий для процессорного блока из четырех ядер. В модели 1500 4 ядра, отключено по 2 ядра у каждого блока, при этом кеш не урезается, а вот в 1400 ядер тоже 4, но отключена одна из двух сборок целиком, поэтому кеш вдвое меньше
Ответ написан
Комментировать
@pfg21
ex-турист
для управления питанием используется внешний для процессора модуль, который управляется записью соответствующих битов по соответствующим адресам.
В создании отдельной команды цпу нет смысла.
Ответ написан
Комментировать
Ко всему железу обращение через драйвера происходит, переключение ядра может на более низком уровне где-то происходить
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы