Ответ 1
Планирование процессов/потоков на ядра чисто до ОС. Аппаратное обеспечение не знает задач, ожидающих запуска. Поддержание списка ОС для процессов, которые выполняются или ожидающих ввода-вывода, является полностью программным обеспечением.
Перенос потока из одного ядра в другой выполняется кодом ядра на исходном ядре, хранящем архитектурное состояние в памяти, затем код ОС на новое восстановление ядра, которое спасло состояние и возобновило выполнение пользовательского пространства.
Традиционно решения о масштабировании частоты и напряжения принимаются ОС. Возьмем Linux в качестве примера: код принятия решения называется governor (а также этот ссылка на вики-ссылку была поднята на google). Он рассматривает такие вещи, как то, как часто процессы использовали весь временной срез для текущего ядра. Если губернатор решает, что процессор должен работать с другой скоростью, он программирует некоторые контрольные регистры для реализации изменения. Насколько я понимаю, аппаратное обеспечение заботится о выборе правильного напряжения для поддержки запрошенной частоты.
Как я понимаю, ОС, работающая на каждом ядре, принимает решения независимо. На оборудовании, которое позволяет каждому ядру работать на разных частотах, код принятия решения не должен координировать друг с другом. Если работа на высокой частоте на одном ядре требует высоковольтного чипа, аппаратное обеспечение позаботится об этом. Я думаю, что современная реализация DVFS (динамическое масштабирование по напряжению и частоте) довольно высокоуровневая, а операционная система просто сообщает аппаратное обеспечение, какое из N вариантов оно хочет, а встроенный микроконтроллер, занимающийся деталями программирования генераторов/делителей часов и регуляторы напряжения.
Функция Intel Turbo, которая оппортунистически повышает частоту выше максимальной устойчивой частоты, принимает решения в аппаратных средствах. Каждый раз, когда ОС запрашивает самую высокую рекламируемую частоту, CPU использует турбонаддув, когда позволяют питание и охлаждение.
Intel Skylake делает следующий шаг: ОС может передать полный контроль над DVFS на оборудование, опционально с ограничениями. Это позволяет реагировать с микросекундной микросекунды, а не на шкалу времени в миллисекундах. Это действительно позволяет повысить производительность при работе с большими нагрузками, поскольку для использования в турбо-режиме может потребоваться больше энергии. Несколько тестов достаточно полны, чтобы наблюдать за этим, как некоторые браузерные/javascript-те IIRC.
Был целый разговор о новом управлении питанием Skylake на IDF2015, проверить слайды и/или архивированную веб-трансляцию. Старый метод подробно описан здесь, чтобы проиллюстрировать разницу, поэтому вы должны действительно проверить, хотите ли вы более подробно, чем мое резюме. (Список других переговоров IDF здесь, благодаря Agner Fog blog для ссылки)