作为对其他答案的补充,运行在计算机上的软件如何知道电池的电量?它向电池询问。 大多数笔记本电脑电池是智能电池,具有自己的微控制器或“燃料计” ASIC,主机可以通过 SMBus 与其通信。人们已经对一些示例进行了逆向工程。 SMBus 可能直接暴露给操作系统,以便管理员可以直接查询它。有各种程序,如 OpenHardwareMonitor、Speccy 或 lm-sensors,可以通过询问总线来了解硬件情况。
操作系统与嵌入式控制器的固件进行接口交互,该控制器是高级配置与电源接口(ACPI)的一部分。维基百科将其定义为: 在计算机中,高级配置与电源接口(Advanced Configuration and Power Interface, ACPI)提供了一种开放标准,以便操作系统可以用来发现并配置计算机硬件组件、通过将未使用的组件置于睡眠状态等来执行电源管理,并进行状态监测。ACPI首次发布于1996年12月,旨在替代Advanced Power Management (APM)、多处理器规范和即插即用BIOS (PnP) 规范。ACPI将电源管理置于操作系统的控制之下,而不是依赖于平台特定的固件来确定电源管理和配置策略。 在内部,ACPI使用通过系统固件(统一可扩展固件接口(UEFI)或BIOS)提供的指令列表(“方法”)向操作系统内核广告其可用组件及其功能,内核解析这些指令列表。然后,ACPI使用嵌入式最小虚拟机执行所需的操作(例如硬件组件的初始化)。 答案是,主板上嵌入了电路或微芯片, 它本身包含一个微操作系统,通过计算机固件-UEFI或BIOS提供一些服务。 它控制许多方面的电源和设备管理。 计算机操作系统有一个系统驱动程序,专门用于与ACPI接口。 一旦激活ACPI,它就会独占所有方面的电源管理和设备配置。 在许多方面,ACPI是您操作系统后面的操作系统, 除了它随主板而来并不在您的控制之下。 有人将其比作特洛伊木马,并称其为安全风险。 它可以被禁用,但某些计算机可能无法启动, 而高级电源管理也将被禁用。 有关其在Windows中使用的更多信息,请参见文章 Battery and power subsystem hardware design。
更一般地说,所有的计算机芯片都有文档,告诉设计师和程序员它们的功能以及如何配置它们进行操作。通过直接读写芯片的寄存器可以进行对这些芯片的低级访问。 更复杂的芯片可能会附带一个名为“驱动程序”的软件程序,该程序允许对操作系统甚至其他应用程序进行高级访问。例如,您的智能手机具有应用程序编程接口(API),允许访问手机的硬件,如GPS、加速度计、电池、相机等。当您编写一个“应用程序”时,可以使用API访问这些硬件设备,就像操作系统一样(尽管操作系统通常比在“用户空间”运行的程序具有更广泛的访问权限)。 这些接口被定义得非常明确,因此当您调用硬件芯片的函数时,它将返回所请求的信息。电池控制芯片只是这种通用基础架构的一个例子。 编写操作系统代码的人会获取芯片的文档,并编写与芯片通信和检索所需信息的软件。 因此,下次加载外部硬盘驱动程序、USB闪存驱动器或其他设备时,您将更加了解事情在“引擎盖下”是如何发生的。