回答:
オペレーティングシステムは、高度な構成および電源インターフェイス(ACPI)の一部である組み込みコントローラーのファームウェアとインターフェイスします 。
ウィキペディアでは次のように定義しています:
コンピューターでは、Advanced Configuration and Power Interface(ACPI)は、オペレーティングシステムがコンピューターハードウェアコンポーネントの検出と構成、(たとえば)未使用のコンポーネントをスリープ状態にすることによる電力管理、ステータスモニタリングの実行に使用できるオープンスタンダードを提供します。1996年12月に最初にリリースされたACPIは、Advanced Power Management(APM)、MultiProcessor Specification、およびPlug and Play BIOS(PnP)Specificationの置き換えを目指しています。[1] プラットフォーム固有のファームウェアに依存して電力管理および構成ポリシーを決定していた以前のBIOS中心のシステムとは対照的に、ACPIはオペレーティングシステムの制御下で電力管理を行います。
内部的に、ACPIは、カーネルが解析するシステムファームウェア(Unified Extensible Firmware Interface(UEFI)またはBIOS)を介して提供される命令リスト(「メソッド」)を使用して、使用可能なコンポーネントとその機能をオペレーティングシステムカーネルにアドバタイズします。次に、ACPIは、組み込みの最小仮想マシンを使用して、目的の操作(ハードウェアコンポーネントの初期化など)を実行します。
その答えは、回路またはマイクロチップがマザーボードに埋め込まれ、それ自体がコンピューターファームウェア(UEFIまたはBIOS)を介していくつかのサービスを利用可能にするマイクロオペレーティングシステムを含むことです。電源およびデバイス管理の多くの側面を制御します。
コンピューターのオペレーティングシステムには、ACPIとのインターフェイス専用のシステムドライバーがあります。ACPIがアクティブになると、電源管理とデバイス構成のすべての側面を排他的に制御します。
多くの点で、ACPIはマザーボードに付属しており、ユーザーの制御下にないことを除いて、オペレーティングシステムの背後にあるオペレーティングシステムです。トロイの木馬に例え、セキュリティリスクと呼ぶ声があります。無効になっている場合もありますが、一部のコンピューターはそれなしでは起動できず、高度な電源管理も無効になります。
Windowsでの使用の詳細については、バッテリーと電源サブシステムのハードウェア設計の記事を参照してください 。
もう1つの答えを補完するものとして、コンピューターで実行されているソフトウェアは、バッテリーレベルをどのように認識していますか?バッテリーを要求します。
ほとんどのラップトップバッテリは、独自のマイクロコントローラまたは「残量ゲージ」ASICを備えたスマートバッテリであり、ホストはSMBusを介して通信できます。人々はいくつかの例をリバースエンジニアリングしました。
SMBusは、管理者が直接照会できるように、オペレーティングシステムに直接公開される場合とされない場合があります。OpenHardwareMonitor、Speccy、lm-sensorsなどのさまざまなプログラムがあり、バスに問い合わせてハードウェアについて調べることができます。
より一般的には、すべてのコンピューターチップには、デザイナーやプログラマーに何をするのか、どのように設定するのかを伝えるドキュメントがあります。これらのチップへの低レベルのアクセスは、チップのレジスタを直接読み書きすることで実行できます。
より複雑なチップには、オペレーティングシステムまたは他のアプリケーションへの高レベルアクセスを可能にする「ドライバー」と呼ばれるソフトウェアプログラムが付属している場合があります。たとえば、スマートフォンにはアプリケーションプログラミングインターフェイス(API)があり、電話のハードウェア、GPS、加速度計、バッテリー、カメラなどの多くにアクセスできます。「アプリ」を作成すると、APIを使用してこれらのハードウェアデバイスにアクセスできますオペレーティングシステムと同じように(ただし、OSは通常、「ユーザースペース」で実行されているプログラムよりも広範囲にアクセスできます。)
これらのインターフェイスは非常に明確に定義されているため、ハードウェアチップに対して関数呼び出しを行うと、要求された情報で応答します。バッテリーコントローラーチップは、この一般的なインフラストラクチャの一例です。
オペレーティングシステムのコードを書く人は誰でもチップのドキュメントを入手し、チップと通信して必要な情報を取得するためのソフトウェアを書きます。
そのため、次に外付けハードドライブ、USBサムドライブなどの「ドライバー」を読み込む(または自動的に実行される)とき、「フードの下で」発生する方法についてもう少し理解できます。