回答:
スマートフォン、ラップトップ、さらにはデスクトップPCに搭載される一般的なCPUは、クロックレートが可変です。スケジューラーは、アイドル時間があることを検出すると、クロックレートを下げ、CPU時間を奪い合うプロセスがさらにある場合は、それを再び増やします。
バッテリ駆動のデバイス用に最適化されたCPUは、それぞれが独自のクロックを備えた多くの機能コンポーネントで構成される傾向があります(例:ARM Cortex A8)。1つのコンポーネントがアイドル状態の場合、オペレーティングシステムはコンポーネントをオフ(またはクロックを削減)できるため、電力を節約できます。たとえば、多くのマルチコアCPU(ハイエンドモバイルデバイスのCPUなど)では、各コアを個別にオンまたはオフにすることができます。ARMはこのゲームが特に得意です。これが、ほとんどのスマートフォンにARM CPUが搭載されている理由の1つです。
電子コンポーネントのクロックレートを変化させる、またはクロックをオフにすることは、電源管理と呼ばれます。これは、正確なハードウェアモデルに多くの依存関係がある、バッテリ駆動のデバイス用のオペレーティングシステムの記述と最適化の複雑な部分になる傾向があります。
CPUに当てはまるのは、ペリフェラルにも当てはまります。たとえば、バックライト付きディスプレイはスマートフォンの電力の主要な消費者であり、ラジオがそれに続きます。CPUオペレーティングシステムは、周辺機器の電源管理に役割を果たす場合があります。セカンダリチップも独自のファームウェアを実行し、電源管理も実行します。
アプリケーションには、電力消費を抑える役割があります。オペレーティングシステムがその機能を実行できるようにする必要があります。アプリケーションで実行できる最悪のことはポーリングwhile (not_ready()) {}
です。のように小さな遅延を導入してもwhile (not_ready()) {usleep(100);}
、プロセッサが低電力モードに移行するのに十分な時間を確保できないため、効果がありません。そうでない場合、不必要なウェイクアップごとにエネルギーが浪費されます。したがって、オペレーティングシステムAPIは、アプリケーションがポーリングする必要がないように設計する必要がありますが、代わりに、ある種のイベントメカニズムにサブスクライブし、関連するイベントが通知されるまでアイドル状態を維持できます。アプリケーションはそのようなメカニズムを利用する必要があるため、ソフトウェアスタック全体の設計は消費電力に影響を与えます。
IntelのPowertopユーティリティを使用して、PCの電力消費の原因に関する情報を取得できます。スマートフォンには通常、電力アプリケーションがどれだけ消費しているかを確認する方法があります。アプリケーションによる電力消費を正確に説明することは困難です。コンポーネントが2つのアプリケーションのためにウェイクアップする場合、ウェイクアップ時間はそのうちの1つにいくらか恣意的に、またはどちらにも適用されません。周辺機器の消費電力も、担当するアプリケーションで常に簡単に追跡できるとは限りません。
RAMチップは、どのビットがアクティブプロセスのデータを格納するかを認識していないため、この方法で選択的にオフにすることはできません。プロセスの消費電力は、使用するメモリの量とは関係ありません(ただし、RAMアクセスは消費電力を消費しますが、同じメモリを再利用したり、別のRAM領域を使用しても、消費電力は変わりません)。
プロセッサ能力の点で、OSができる主なことは、アプリケーションがポーリングしないようにするAPIを提供することです。(また、カーネルおよびデバイスドライバー内のすべてのポーリングがあった場合はそれを排除します。)次に、何もすることがないときはいつでも、プロセッサーを低電力スリープ状態にすることができます。
すべてのデバイスで、ユーザーアプリがリクエスト後にスリープ状態になり、結果が準備できたときにのみ再び起動する方法が必要です。
明らかにタイトなポーリングループは惨事です(それらはプロセッサを完全に起動させ、無駄なnoopとジャンプを実行するためです)。いくつかの条件、タイマーをリセットしてスリープ状態に戻ります。
この部分についてはあまり知りませんが、DMA(ダイレクトメモリアクセス)コントローラを使用して、プロセッサコア自体をウェイクアップせずに繰り返し割り込みの長い文字列を処理する独創的な方法もあると思います。
OSの主な役割は、ハードウェアから可能な限り独立したランタイム環境を提供することです。誰がどのハードウェアを使用しているのか、いつ、どのようにしてハードウェアを使用しているのかがわかります。これにより、OSは使用されていないときにハードウェアの電力消費を削減できます。
最新のハードウェアは、次のような電力消費を削減する多くの方法を提供します
プロセスがより多くのRAMを使用する場合、より多くの電力を消費しますか?
あんまり。それでも、システムに1 GBのDRAMがあり、512 MBしか使用していない場合、一部のメモリコントローラーでは、DRAMの一部の更新を停止して、消費電力を削減できます。LPDDRは、部分リフレッシュセルフリフレッシュをサポートしており、セルフリフレッシュ中に同じことを実行します(モバイルデバイスではほとんどの場合、プロセッサが停止している間)。
ご覧のとおり、最新のアーキテクチャで消費電力を削減する方法はたくさんありますが、OSで処理する必要があります。PASRなどの一部の機能は使用が非常に難しいです。これには、OSでメモリ管理を調整したり、一時停止/再開手順を実装したりするために多くの作業が必要です...
ご存じのとおり、OSにはさまざまなリストが用意されています。これらのリストの2つは、作動可能リストとタイマーリストです。実行可能リストは、実行する準備ができているタスク/スレッドを識別します。タイマーリストは、タイムアウトでブロックされた状態にあるタスク/スレッドを識別します。
OSに空のレディリストがあるとします。つまり、実行の準備ができている(アイドル状態の)タスクが不足しています。一部のプロセッサ(x86など)には、外部割り込み(ティック割り込みなど)によって起こされるまでプロセッサを停止させるためにOSが起動できる停止命令があります。この期間中、消費電力は少なくなります。この手法は、タイマーリストを確認することでさらに改善できます。アイドル状態で、タスクがタイマーティックから起動できる最も早い時間が100ティック離れていることがわかっている場合、ティックレートが一時的に変更されて100倍遅くなることがあります。このように、プロセッサは最大100ティックの割り込みを処理する必要がないため、より少ないエネルギーを長期間にわたって消費できます。
外部割り込みが到着すると、ティックレートを再計算する必要があります。外部割り込みによりタスクの準備ができた場合、ティックレートは通常に戻ります。そうでない場合、スリープするティックの数は、新しい(遅くなった)ティック率とともに再計算する必要があります。
お役に立てれば。
他の回答に追加するには:
あなたの質問はiOSとAndroidをオペレーティングシステムと見なしていますが、「オペレーティングシステム」はそれらの一部にすぎません。
AndroidとiOSはどちらもフレームワークであり、実際のOSの一部とは見なされないが電力消費量の削減に積極的である多くの部分が含まれています。
たとえば、Androidの設計により、アプリケーション開発者は非表示の状態を保存できるため、アクティブに使用されていないときにプロセスを終了して、準備ができたスレッドの数を減らし、コアのシャットダウンとクロックレートの削減を可能にすることができます。
「OS」には、明るさ、Wi-Fiスリープ状態、クリーンアップスレッド、スケジュールプーリング、LEDインジケーター、セルラースタンバイ動作など、消費電力に大きく影響する要素を設定する機能があります。
さらに、一部のモバイルプラットフォームでは、CPU / GPU使用率の最適化に取り組んでいます。これは、GPUがグラフィックスにさらに適合しており、モバイルランドスケープに比較的新しく追加されたため、OSのグラフィックス関連部分がますます増えているためです。 GPU。CPUから作業をクリアし、CPUパワー最適化の使用を可能にします(多くの場合、システム全体の速度も向上します)。