Meine Intel-CPU ändert die Taktrate je nach Nutzung, aber wie entscheidet sie, mit welcher Taktrate sie läuft? Wird die Taktrate von der Betriebssystemsoftware mithilfe eines Algorithmus bestimmt oder ist sie hardwarebasiert? Ist es abhängig von der Anzahl der Interrupts? Der Cache-Umsatz? Stellt die CPU selbst ihre eigene Uhr? Oder stellt das ein separater Controller ein? Oder Software?
Der Kerntakt der CPU wird nicht direkt vom Mainboard empfangen. Dieser Takt ist normalerweise viel langsamer (oft um den Faktor 10 oder mehr) als die interne Frequenz der CPU. Stattdessen wird das Taktsignal von der Hauptplatine als Referenzfrequenz für einen phasenverriegelten Oszillator mit höherer Frequenz innerhalb der CPU verwendet. Der erzeugte Takt läuft mit einem Vielfachen des Referenztakts, und dieses Vielfache kann geändert werden, indem bestimmte Register in der CPU gesetzt werden. Die eigentliche Generierung der Uhr erfolgt rein in Hardware.
Um die Leistung noch weiter zu reduzieren, signalisiert die CPU auch dem Spannungsregler, der ihre Kernspannung liefert, mit einem niedrigeren Sollwert zu laufen. Bei niedrigeren Frequenzen kann die CPU ohne Fehlfunktion mit einer niedrigeren Spannung betrieben werden, und da der Stromverbrauch proportional zum Quadrat der Spannung ist, kann selbst eine kleine Verringerung der Spannung eine große Menge Strom sparen.
Die Spannungs- und Frequenzskalierung erfolgt durch Hardware, aber die Entscheidung, in einem Niedrigleistungsmodus zu laufen, wird durch Software (das Betriebssystem) getroffen. Wie das Betriebssystem den optimalen Modus zum Ausführen bestimmt, ist ein separates, unordentlicheres Problem, aber es hängt wahrscheinlich hauptsächlich davon ab, wie viel % Zeit das System in letzter Zeit im Leerlauf war. Meistens im Leerlauf, senken Sie die Frequenz. Meist beschäftigt, erhöhen Sie die Frequenz. Sobald das Betriebssystem die Frequenz bestimmt, mit der es ausgeführt werden soll, muss nur noch ein Register eingestellt werden.
Referenz: " Enhanced Intel SpeedStep Technology for the Intel Pentium M Processor "
Nun, auf modernen Betriebssystemen gibt es einen sogenannten "Task Scheduler". Es läuft periodisch (sehr schnell) und wählt (aus einer Liste) aus, welche nächste Aufgabe ausgeführt werden soll. Aufgaben können sich in vielen Zuständen befinden, z. B. ausgewählt, blockiert, schlafend usw.
Wenn sich alle Tasks im Auswahlmodus befinden (auf etwas vom Betriebssystem warten) und nicht bedient werden können oder einige schlafen usw., sodass der Prozessor nicht stark beansprucht wird, ruft der Taskplaner eine spezielle Task namens „idle“ auf ".
Wenn der CPU-Treiber die Task-Scheduler-Tabelle überprüft und verifiziert, dass die Leerlauftask den größten Teil der CPU-Zeit ausführt, sendet er einfach einen Befehl an die Takterzeugungs-PLL-Schaltung der CPU, um seinen Takt zu reduzieren. Wenn im Gegensatz dazu die Leerlaufaufgabe immer weniger CPU-Zeit beansprucht (was bedeutet, dass die CPU stark beansprucht wird), erhöht der CPU-Treiber die CPU-Geschwindigkeit.
Es ist nicht sehr schwer, aber es gibt eine untere Grenze, bei der die CPU nicht niedriger gedrosselt werden kann, da nicht alle CPUs vollständig statisch sind (sie benötigen also Aktualisierungszyklen). Vollständig statische CPUs können bis auf 0 (null) MHz heruntergehen, da kein Zustand verloren gehen kann, wenn die Uhr gestoppt wird.
Leon Heller
Benutzer17592
Kaz