操作系统如何知道电池电量?

操作系统如何知道电池电量?

即使我们删除默认操作系统并安装新操作系统,它也可以与电池交互。有驱动程序吗?它是如何工作的?

答案1

操作系统与嵌入式控制器的固件交互,该控制器是 高级配置和电源接口(ACPI)。

维基百科将其定义为:

在计算机中,高级配置和电源接口 (ACPI) 提供了一种开放标准,操作系统可以使用它来发现和配置计算机硬件组件、通过(例如)使未使用的组件进入睡眠状态来执行电源管理以及执行状态监视。 ACPI 于 1996 年 12 月首次发布,旨在取代高级电源管理 (APM)、多处理器规范和即插即用 BIOS (PnP) 规范。[1] ACPI 将电源管理置于操作系统的控制之下,而不是像以前那样以 BIOS 为中心的系统依赖于特定于平台的固件来确定电源管理和配置策略。

在内部,ACPI 使用通过系统固件(统一可扩展固件接口 (UEFI) 或 BIOS)提供的指令列表(“方法”)向操作系统内核通告可用的组件及其功能,内核会解析这些指令列表。然后,ACPI 使用嵌入式最小虚拟机执行所需的操作(例如硬件组件的初始化)。

答案是主板上嵌入了一个电路或微芯片,它本身包含一个微操作系统,可以通过计算机固件(UEFI 或 BIOS)提供一些服务。它控制电源和设备管理的许多方面。

计算机操作系统有一个专门用于与 ACPI 交互的系统驱动程序。一旦 ACPI 被激活,它就会独占控制电源管理和设备配置的所有方面。

从很多方面来看,ACPI 是操作系统背后的操作系统,只不过它是主板自带的,不受您的控制。有人将它比作特洛伊木马,并称其为安全风险。它可能被禁用,但有些计算机如果没有它可能无法启动,而且高级电源管理无论如何也会被禁用。

有关其在 Windows 中的使用的更多信息,请参阅文章 电池和电源子系统硬件设计

答案2

作为对另一个答案的补充,计算机上运行的软件如何知道电池电量是多少?它会询问电池。

大多数笔记本电脑电池智能电池它们有自己的微控制器或“电量计”ASIC,主机可以通过 SMBus 与之通信。人们有对一些例子进行了逆向工程。

SMBus 可能会或可能不会以允许管理员直接查询的方式直接暴露给操作系统。有各种程序(如 OpenHardwareMonitor 或 Speccy 或 lm-sensors)可以查询总线以了解硬件。

答案3

更一般而言,所有计算机芯片都有文档,告诉设计人员和程序员芯片的功能以及如何配置芯片。可以通过直接读取和写入芯片的寄存器来对这些芯片进行低级访问。

更复杂的芯片可以配备称为“驱动程序”的软件程序,该程序允许对操作系统甚至其他应用程序进行高级访问。例如,您的智能手机有一个应用程序编程接口 (API),允许访问手机的大部分硬件、GPS、加速度计、电池、相机等。当您编写“应用程序”时,您可以像操作系统一样使用 API 访问这些硬件设备(尽管操作系统通常比在“用户空间”中运行的程序具有更广泛的访问权限。)

这些接口定义得非常明确,因此当您对硬件芯片进行函数调用时,它将响应请求的信息。电池控制器芯片只是这种通用基础设施的一个例子。

编写操作系统代码的人会获得芯片的文档,并编写软件来与芯片通信并检索所需的信息。

因此,下次您为外部硬盘驱动器、USB 拇指驱动器或其他设备加载“驱动程序”(或自动完成)时,您将更加了解“幕后”发生的事情。

相关内容