jcr*_*dor 609
tl; dr:计算机中的电源状态由 ACPI(高级配置和电源接口)的实现控制。在关机过程结束时,您的操作系统会设置一个 ACPI 命令,指示计算机应该重新启动。作为响应,主板使用各自的重置命令或线路重置所有组件,然后遵循引导过程。主板实际上从未关闭,它只会重置各种组件,然后就像刚刚按下电源按钮一样。
冗长而漫无边际但(在我看来)更有趣的答案:
在过去(好吧,对于像我这样的大学生来说,90 年代是很久以前的事了),我们拥有带AT 电源的AT(高级技术)主板管理。AT 动力系统非常非常简单。您计算机上的电源按钮是一个硬件开关(可能在机箱背面),您的 120vac 输入直接通过它。它以物理方式打开和关闭电源的电源,当此开关处于关闭位置时,计算机中的一切都完全没电了(这使得 CMOS 电池非常重要,因为没有它就没有电源来保持硬件时钟滴答作响)。因为电源开关是一种物理机制,所以没有软件方式来打开和关闭电源。Windows 会显示著名的“现在可以安全关闭您的计算机”消息,因为尽管一切都已停止并准备关闭,但操作系统实际上无法翻转电源开关。这种配置有时被称为硬实力,因为都是硬件。
现在情况有所不同,因为 ATX 主板和ATX 电源的神奇之处(如果您要跟踪,那就是 Advanced Technology eXtended)。随着其他一些进步(迷你 DIN PS/2,有人吗?),ATX 带来了软实力。软电源意味着计算机的电源可以由软件控制。这带来了一些导入更改:
因此,您的电源开关不再“打开”计算机。相反,它连接到主板的基本控制器,该控制器检测到按钮已被按下并执行许多步骤来准备系统,包括点亮 PS_ON 以便电源可用。电源按钮不是触发启动过程的唯一方式,扩展总线上的设备也可以这样做。这很重要,因为当您的计算机关闭时,您的以太网网络适配器实际上保持开启状态,并寻找一个非常具体的数据包,通常称为“魔术数据包”。如果他们检测到此数据包寻址到他们的 MAC 地址,他们将触发启动过程。这就是“局域网唤醒”(WoL) 的工作原理。时钟也可以启动启动(大多数 BIOS 允许您设置计算机每天应该启动的时间),
好吧,我解释软电源的原因是因为我认为它很有趣(这始终是我解释事物的一个关键原因),并且因为它可以让您了解计算机的电源和运行/关闭状态如何全部由软件控制。在大多数当前的计算机中,该软件系统是高级配置和电源接口或 ACPI 的实现。ACPI 是一个标准化、统一的系统,允许软件控制计算机的电源系统。您可能听说过ACPI 电源状态. 电源控制的基本机制是这些“电源状态”,您的操作系统通过准备切换(在电源实际关闭之前发生的关机/休眠过程)来切换电源模式,然后命令主板切换电源状态. 电源状态如下所示:
您会注意到重新启动不是这些状态之一。那么当您的计算机重新启动时实际上会发生什么?答案可能令人惊讶,因为从电源管理的角度来看,它几乎什么都不是。有一个 ACPI 重置命令. 当您告诉操作系统重新启动时,它会遵循正常的关机过程(停止所有进程,执行一些维护,卸载文件系统等),然后作为最后一步,而不是将机器发送到电源状态G2(就像您只是告诉它关闭一样)它会设置重置命令。这通常被称为“重置寄存器”,因为与大多数 ACPI 接口一样,它只是一个地址,应写入特定值以请求重置。我将引用 2.0 规范来说明它的作用:
可选的 ACPI 重置机制指定了提供完整系统重置的标准机制。实施后,此机制必须重置整个系统。这包括处理器、核心逻辑、所有总线和所有外围设备。从 OSPM 的角度来看,断言重置机制在逻辑上等同于重启机器。在重置后获得控制权后,OSPM 将执行类似于冷启动的操作。
所以,当复位寄存器被设置时,一些事情会依次发生。
这两个步骤(实际上分解为更多步骤)的最终效果是,它看起来就像刚刚启动的计算机一样,但实际上一直在通电。这意味着关闭和启动所需的时间更少(因为您不必等待电源准备就绪),并且重要的是允许在操作系统关闭时启动启动。这意味着不需要使用另一个启动触发器(WoL 等),并允许您在无法触发启动时使用重新启动作为远程重置系统的有效方法。
那是一个很长的答案。但是,嘿,希望您现在对计算机电源管理有更多了解。我当然学到了一些研究这个的东西。
And*_*aKo 82
这是一个起点:
芯片通常不会关闭然后再打开。取而代之的是,当通常所有内存都被清除并且处理器看起来像是刚刚通电时,有一条复位线会使处理器进入所谓的复位状态。当该引脚保持高电平(或低电平,取决于处理器)时,处理器处于复位状态。一旦引脚被释放,它将继续正常启动,就像第一次打开一样。关键是它本身没有断电。
那么这如何扩展到像现代 PC 这样的大型系统?好吧,现代计算机是由计算机制成的,而计算机有时也是由计算机本身制成的。因此,当您将计算机设置为重置时,使计算机开始保存其状态的“计算机”将开始保存其状态(如果重置受到控制),或者只是拉动其重置引脚。
一些处理器和微控制器(微型独立计算机,通常比现代台式计算机晚 20 年)可以使用内部开关进行自我重置。正如我所说,一旦产生复位的信号消失,计算机就会启动。所以问题中的前提并不完全正确。电脑不知道什么时候开机。知道什么时候需要“关闭”或重置,以及当保持它的信号消失时,它将打开。
这种行为在现代计算机上可能看起来很奇怪,现代计算机可以设置为在特定时间或通过网络等打开。正如我所说,计算机是由计算机组成的。因此,虽然主处理器可能关闭,但内部可能有许多其他芯片和微控制器处于开启状态。最明显的例子是通常由电池供电的实时时钟。然后它可以打开其他芯片,这将打开其他芯片,连锁反应一直持续到整个计算机启动。在当今的计算机上,有一条称为 +5 VDC 待机电压的 PSU 线。它为计算机“关闭”时打开的各种设备提供大约 50 mW 的功率。
一点小知识:英特尔 386 EX 处理器上的复位引脚是引脚编号 110。

在英特尔 i7-900 上,它的土地编号为 AL39。
我希望有人能够提供一个答案,从高层次的角度解释事情是如何运作的,因为它是一个非常复杂的系统。
小智 28
这篇博文描述了 Linux 如何触发重启。
摘抄:
Linux 有很多不同的方法来重置 x86。其中一些只有 32 位,所以我将忽略它们,因为老实说,这就是你的生活。而且,它们很可怕。所以,这给我们留下了五个。
kbd - 通过键盘控制器重启。最初的 IBM PC 将 CPU 复位线连接到键盘控制器。写入适当的魔法值会使线路产生脉冲,机器会复位。这一切都非常简单,只是现代机器没有键盘控制器(它们实际上是嵌入式控制器的一部分),甚至更现代的机器甚至没有假装有键盘控制器。现在,嵌入式控制器运行软件。而且,众所周知,软件是可怕的。但更糟糕的是,嵌入式控制器上的软件是由 BIOS 作者编写的。很明显,任何认为这有效的借口都是某种精心制作的小说。有些机器非常挑剔硬件是否处于 Windows 可以编程的确切状态。有些机器 10 次工作 9 次,然后由于一些奇怪的时间问题而锁定。而其他人根本不起作用。欢呼!
三重 - 尝试生成三重故障。这是通过加载一个空的中断描述符表然后调用 int(3) 来完成的。中断失败(没有 IDT),故障处理程序失败(没有 IDT),CPU 进入一个条件,理论上应该触发复位。除了似乎没有发生这种情况的要求,它只是在一堆机器上不起作用。
pci - 实际上不是 pci。传统的 PCI 配置空间访问是通过向 io 端口 0xcf8 写入一个 32 位值来识别总线、设备、功能和配置寄存器来实现的。然后端口 0xcfc 包含有问题的寄存器。但是,如果您将适当的魔法值对写入 0xcf9,机器将重新启动。壮观!并且没有以任何方式标准化(当然不是 PCI 规范的一部分),因此不同的芯片组可能有不同的要求。嘘。
efi - EFI 运行时服务提供了重新启动机器的入口点。它通常甚至有效!只要 EFI 运行时服务在工作,这可能是一个延伸。
acpi - 最新版本的 ACPI 规范允许您提供地址(通常是内存或系统 IO 空间)和要在那里写入的值。这个想法是将值写入地址会重置系统。事实证明,这样做经常失败。也不可能通过 ACPI 来表示 PCI 重启方法,因为 PCI 重启方法需要一对值,而 ACPI 只给你一个。
kru*_*ubo 10
回到电源管理之前的旧时代,当然,计算机仍然可以自行重启。(有人记得冻结程序意味着您必须使用 Ctrl+Alt+Delete 重新启动计算机吗?)
在我的旧 486 上,汇编语言命令JMP FFFF:0000(即,将 CPU 的指令指针设置为所述地址)会导致整个计算机重新启动。换句话说,FFFF:0000 寻址 BIOS 中的一个位置,该位置具有有关计算机首次启动时应执行的操作的说明。我怀疑 AndrejaKo 的回答所描述的重置引脚,或电源管理前时代的重置按钮,也会强制指令指针指向相同的地址。
一个谷歌搜索JMP FFFF:0000揭示了这许多有趣的网页。
小智 9
还有一种叫做看门狗的东西。该设备用作死人的开关。计算机必须每分钟向看门狗发出信号,表明它仍然活着。当计算机崩溃时,例如进入无限循环,它将无法向看门狗发出信号,看门狗仍在按预期运行,在这种情况下,看门狗将执行硬件重置。这在受欢迎的终结者电视连续剧中得到了证明,其中一个机器人被高压电涌击倒。它会在 2 分钟内自行重置。