![唤醒定时器如何工作?](https://linux22.com/image/1459835/%E5%94%A4%E9%86%92%E5%AE%9A%E6%97%B6%E5%99%A8%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
Windows 通常会将计算机置于 S3(待机/保存到 RAM)模式,在此模式下 CPU 的电源会被切断,但 RAM 的电源不会切断。
如果 CPU 断电,唤醒定时器是如何触发的?哪个组件知道何时自动唤醒计算机?
如果是在 BIOS 中,Windows 如何通知 BIOS 下次唤醒时间?
答案1
这是通过“报警”寄存器在RTC(实时时钟)在最初的PC-AT上,这个芯片是摩托罗拉MC146818。
在进入睡眠状态 (ACPI S3) 之前,内核会将下一次计划唤醒时间编程到 RTC 上的“alarm”寄存器中,该寄存器始终处于开机状态。当此唤醒时间到达时,RTC 将触发芯片组启动系统,并从 S3 恢复。(请注意,在大多数现代系统中,RTC 实际上是南桥本身的一部分,因此开机信号在内部发生)。
系统从睡眠状态恢复后,内核将评估其待处理的唤醒事件列表,并调度已经到达的唤醒事件。
英特尔的这篇论文描述了该接口(针对 x86 系统):
这些寄存器的编程是在 Linux 内核中完成的cmos_set_alarm
。