I processi di pianificazione/thread su core sono puramente up to the OS. L'hardware non ha alcuna comprensione delle attività in attesa di essere eseguite. Mantenere l'elenco dei processi operativi del SO che sono eseguibili rispetto all'attesa per l'I/O è completamente una cosa software.
La migrazione di un thread da un core ad un altro avviene tramite il codice del kernel sul core originale che memorizza lo architectural state in memoria, quindi il codice del SO sul nuovo core che ripristina lo stato salvato e riprende l'esecuzione dello spazio utente.
Tradizionalmente, le decisioni relative al ridimensionamento della frequenza e della tensione vengono eseguite dal sistema operativo. Prendi Linux come esempio: il codice decisionale è chiamato governor (e anche questo arch wiki link came up high on google). Osserva cose come la frequenza con cui i processi hanno utilizzato il loro intero time slice sul core corrente. Se il governatore decide che la CPU deve funzionare a una velocità diversa, programma alcuni registri di controllo per implementare la modifica. A quanto ho capito, l'hardware si occupa della scelta dello right voltage to support the requested frequency.
Da quello che ho capito, il sistema operativo in esecuzione su ciascun core rende le decisioni indipendenti. Su hardware che consente a ciascun core di funzionare a frequenze diverse, il codice decisionale non ha bisogno di coordinarsi tra loro. Se l'esecuzione di una frequenza elevata su un core richiede un chip ad alta tensione, l'hardware si occupa di questo. Penso che l'implementazione moderna di DVFS (dinamizzazione dinamica della tensione e della frequenza) sia piuttosto di alto livello, con il sistema operativo che indica l'hardware che N scelte desidera e il microcontrollore di potenza di bordo che cura i dettagli degli oscillatori/divisori di clock di programmazione e regolatori di tensione.
La funzione "Turbo" di Intel, che aumenta opportunisticamente la frequenza al di sopra della frequenza massima sostenibile, prende le decisioni nell'hardware. Ogni volta che il sistema operativo richiede la frequenza più pubblicizzata, la CPU utilizza il turbo quando l'alimentazione e il raffreddamento lo consentono.
Skylake di Intel fa un ulteriore passo avanti: il sistema operativo può avere il controllo totale su DVFS sull'hardware, opzionalmente con vincoli. Ciò gli consente di reagire da un microsecondo a un microsecondo, piuttosto che su una scala temporale di millisecondi. Questo in realtà consente prestazioni migliori in carichi di lavoro scoppiettanti, perché è disponibile più budget di potenza per il turbo quando è utile. Alcuni benchmark sono abbastanza esplosivi da poterlo osservare, come alcuni browser/javascript IIRC.
C'è stato un intero discorso sulla nuova gestione energetica di Skylake a IDF2015, check out the slides and/or archived webcast. Anche il vecchio metodo è descritto in molti dettagli, per illustrare la differenza, quindi dovresti verificarlo se vuoi più dettagli del mio sommario. (L'elenco degli altri colloqui IDF è here, grazie a Agner Fog's blog per il collegamento)
@xmojmr Ho provato diversi PDF dal collegamento che hai fornito. Sono tutti Figura 3-9, ma non quello che hai descritto. Puoi dirmi per favore quale intendi? – v010dya
apri http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architects-software-developer-manual-325462.pdf (_Volumi Combinati: 1 , 2A, 2B, 2C, 3A, 3B e 3C_), ctrl + F "_Algoritmo per l'estrazione della frequenza del processore_" – xmojmr
@xmojmr Tutti i modelli discussi lì (come mostrato nella tabella inferiore di tale diagramma) trattano i processori single-core . Quindi non aiuta davvero. – v010dya