私のIntel CPUは使用量に応じてクロック速度を変更しますが、どのクロック速度で実行するかをどのように決定しますか?クロック速度は、アルゴリズムを使用してOSソフトウェアによって決定されますか、それともハードウェアベースですか?割り込みの数に依存していますか?キャッシュターンオーバー?CPU自体が独自のクロックを設定していますか?または、別のコントローラーで設定しますか?それともソフトウェア?
私のIntel CPUは使用量に応じてクロック速度を変更しますが、どのクロック速度で実行するかをどのように決定しますか?クロック速度は、アルゴリズムを使用してOSソフトウェアによって決定されますか、それともハードウェアベースですか?割り込みの数に依存していますか?キャッシュターンオーバー?CPU自体が独自のクロックを設定していますか?または、別のコントローラーで設定しますか?それともソフトウェア?
回答:
CPUのコアクロックは、マザーボードから直接受信されません。そのクロックは通常、CPUの内部周波数よりもはるかに遅い(多くの場合、10倍以上)。代わりに、マザーボードからのクロック信号は、CPU内のより高い周波数の位相ロックループ制御発振器の基準周波数として使用されます。生成されたクロックは基準クロックの倍数で動作し、その倍数はCPUの特定のレジスタを設定することで変更できます。クロックの実際の生成は、純粋にハードウェアで行われます。
電力をさらに削減するために、CPUは、より低い設定点で動作するようにコア電圧を供給する電圧レギュレータにも信号を送ります。低い周波数では、CPUは誤動作することなく低い電圧で動作できます。また、電力消費は電圧の2乗に比例するため、電圧をわずかに下げても大量の電力を節約できます。
電圧と周波数のスケーリングはハードウェアによって行われますが、低電力モードで実行する決定はソフトウェア(OS)によって行われます。実行する最適なモードをOSが決定する方法は、別の厄介な問題ですが、システムが最近アイドル状態になっている時間の大部分に帰着する可能性があります。ほとんどアイドル状態で、頻度を下げます。主に忙しい、頻度を上げます。OSが実行する周波数を決定したら、レジスタを設定するだけです。
さて、最新のオペレーティングシステムには、「タスクスケジューラ」と呼ばれるものがあります。定期的に(非常に高速に)実行され、実行する次のタスクを(リストから)選択します。タスクは、選択、ブロック、スリープなど、多くの状態になります。
すべてのタスクが選択モード(オペレーティングシステムからの何かを待っている)であり、処理できない場合、または一部がスリープ状態などであるため、実行中のプロセッサの使用率が高くない場合、タスクスケジューラは「idle」と呼ばれる特別なタスクを呼び出します「。
CPUドライバーがタスクスケジューラテーブルをチェックし、アイドルタスクがCPU時間のほとんどを実行していることを確認した場合、CPUのクロック生成PLL回路にコマンドを送信して、クロックを減らします。それどころか、アイドルタスクのCPU時間(CPUが頻繁に使用されていることを意味する)の時間が短くなると、CPUドライバーはCPU速度を上げます。
それほど難しくはありませんが、すべてのCPUが完全に静的であるわけではないため、CPUを低く抑えることができない下限があります(したがって、更新サイクルが必要です)。クロックが停止した場合に失われる状態はないため、完全に静的なCPUは0(ゼロ)MHzにまで低下する可能性があります。