计算机如何自行重启?关闭后,它如何告诉自己再次重新出现?什么样的软件可以做到这一点?
计算机如何自行重启?关闭后,它如何告诉自己再次重新出现?什么样的软件可以做到这一点?
Answers:
tl; dr:计算机中的电源状态由ACPI的实现(高级配置和电源接口)控制。在关闭过程结束时,操作系统将设置ACPI命令,指示计算机应重新启动。作为响应,母板使用各自的重置命令或线路重置所有组件,然后执行引导程序。主板从未真正关闭过,它只会重置各种组件,然后像刚按下电源按钮一样工作。
漫长而漫漫,但(我认为)更有趣的答案:
在过去(好吧,对于像我这样的90年代大学生来说,是很久以前的事情了),我们有配备AT电源的 AT(先进技术)主板管理。AT电源系统非常非常简单。您计算机上的电源按钮是一个硬件开关(可能在机箱背面),您的120vac输入正好通过它。它会物理地打开和关闭电源的电源,并且当此开关处于“关闭”位置时,计算机中的所有部件都完全没电了(这使CMOS电池非常重要,因为没有电源,就无法保持硬件时钟滴答声)。因为电源开关是一种物理机制,所以没有软件方法可以打开和关闭电源。Windows将显示著名的“现在可以安全关闭计算机”消息,因为尽管所有内容都已停放并准备关闭,但操作系统实际上无法打开电源开关。有时将这种配置称为强大的力量,因为它全是硬件。
如今,情况有所不同,因为ATX主板和ATX电源的奇妙之处(如果您一直在跟踪,那就是高级技术)。除了其他许多进步(mini-DIN PS / 2,有人吗?),ATX还带来了强大的功能。软电源意味着可以通过软件控制计算机的电源。这带来了一些导入更改:
因此,您的电源开关不再“打开”计算机。而是将其连接到主板的基本控制器,该控制器检测到该按钮已被按下,并执行许多步骤来准备系统,包括点亮PS_ON以使电源可用。电源按钮不是触发启动过程的唯一方法,扩展总线上的设备也可以这样做。这很重要,因为当计算机关闭时,以太网网络适配器实际上会保持打开状态,并寻找一个非常特定的数据包(通常称为“魔术数据包”)。如果他们检测到寻址到其MAC地址的数据包,则将触发启动过程。这就是“局域网唤醒”(WoL)的工作方式。时钟还可以启动启动程序(大多数BIOS允许您设置计算机每天启动的时间),
好吧,我之所以解释Soft Power是因为我认为这很有趣(这始终是我解释事物的关键原因),还因为它使您能够了解计算机的电源和运行/关闭状态是如何由软件控制的。在当前的大多数计算机中,此软件系统都是“ 高级配置和电源接口”或ACPI的实现。ACPI是标准化,统一的系统,允许软件控制计算机的电源系统。您可能听说过ACPI电源状态。电源控制的基本机制是这些“电源状态”,您的操作系统通过准备开关(电源实际断开之前发生的关机/休眠过程)来切换电源模式,然后命令主板切换电源状态。电源状态如下所示:
您会注意到重启不是这些状态之一。那么,当计算机重新启动时,实际发生了什么?答案可能令人惊讶,因为从电源管理的角度来看,它几乎没有。有一个ACPI重置命令。当您告诉操作系统重新启动时,它会遵循其正常的关闭过程(停止所有进程,进行一些维护,卸下文件系统等),然后作为最后一步,而不是使计算机进入电源状态G2(如果您只是简单地告诉它要关机),它将设置Reset命令。这通常称为“复位寄存器”,因为像大多数ACPI接口一样,它只是一个地址,应将特定值写入该地址才能请求复位。我将引用2.0规范的作用:
可选的ACPI重置机制指定了提供完整系统重置的标准机制。实施后,此机制必须重置整个系统。这包括处理器,核心逻辑,所有总线和所有外围设备。从OSPM角度来看,断言重置机制在逻辑上等效于对机器重新通电。重置后获得控制权后,OSPM将以类似于冷启动的方式执行操作。
因此,设置复位寄存器后,会依次发生一些事情。
这两个步骤(实际上可以分解为更多的步骤)的最终结果是,它看起来就像刚启动的计算机一样,但实际上它始终在供电。这意味着关闭和启动所需的时间更少(因为您不必等待电源准备就绪),并且重要的是允许通过操作系统关闭来启动启动。这意味着不需要使用其他启动触发器(WoL等),并且当您没有触发启动的方法时,它允许您使用重新启动作为远程重置系统的有效方法。
那是一个很长的答案。但是,希望您现在对计算机电源管理有了更多的了解。我当然学习了一些东西。
这是一个起点:
芯片通常不会先关闭然后再打开。取而代之的是,有一条复位线,当通常所有内存都被清除并且处理器看起来像刚刚通电时,它将使处理器进入所谓的复位状态。当该引脚保持高电平(或低电平,取决于处理器)时,处理器处于复位状态。释放该引脚后,它将继续正常启动,就像第一次将其打开一样。这样做的重点是本身不会断电。
那么,如何将其扩展到现代PC等较大的系统呢?很好的现代计算机是由计算机制成的,而计算机有时是由计算机本身制成的。因此,当您将计算机设置为重设时,构成计算机的“计算机”将开始保存其状态(如果控制了重设),或者仅将其重设引脚拔出。
一些处理器和微控制器(它们是微型独立设备,通常比现代台式计算机晚20年)可以使用内部开关进行自我复位。正如我所说,一旦产生复位的信号消失了,计算机就会启动。因此,问题的前提并不完全正确。计算机不知道何时打开。知道何时需要“关闭”或复位,以及何时将保持该信号的信号消失,它将打开。
在现代计算机上,此行为可能看起来很奇怪,可以将其设置为在特定时间打开或通过网络打开,等等。正如我所说,计算机是由计算机组成的。因此,虽然主处理器可能处于关闭状态,但内部可能还有许多其他芯片和微控制器处于打开状态。最明显的情况是实时时钟,通常由电池供电。然后,它可以打开其他芯片,这将打开其他芯片,并且连锁反应一直进行到整个计算机都打开为止。在当今的计算机上,有一条称为+5 VDC备用电压的PSU线。它为计算机“关闭”时打开的各种设备提供大约50 mW的功率。
琐事:Intel 386 EX处理器上的Reset引脚是110号引脚。
在Intel i7-900上,其土地号为AL39。
我希望有人能够提供一个答案,从高层的角度解释事物的工作原理,因为它是一个相当复杂的系统。
这篇博客文章描述了Linux如何触发重启。
摘抄:
Linux有多种重置x86的方法。其中一些仅是32位的,因此我将不理会它们,因为说实话,您只是在做什么。而且,它们太可怕了。因此,剩下五个人。
kbd-通过键盘控制器重新启动。最初的IBM PC将CPU复位线连接到键盘控制器。写入适当的魔术值使线路产生脉冲,机器复位。这一切非常简单,除了现代机器没有键盘控制器(它们实际上是嵌入式控制器的一部分),甚至更现代的机器甚至都不假装有键盘控制器。现在,嵌入式控制器运行软件。而且,众所周知,软件是可怕的。但是,更糟糕的是,嵌入式控制器上的软件是由BIOS作者编写的。因此,很明显,任何这种作法都假装成一种虚构的小说。有些机器对硬件处于Windows可以编程的确切状态非常挑剔。有些机器工作10次中的9次,然后由于某些奇怪的计时问题而锁定。其他人根本不工作。欢呼!
三重-尝试生成三重故障。这是通过加载一个空的中断描述符表,然后调用int(3)来完成的。中断失败(没有IDT),故障处理程序失败(没有IDT),并且CPU进入条件,理论上应该触发复位。除非似乎并没有要求发生这种情况,否则它就不适用于一堆机器。
pci-实际上不是pci。传统的PCI配置空间访问是通过将32位值写入io端口0xcf8来标识总线,设备,功能和配置寄存器来实现的。然后,端口0xcfc包含有问题的寄存器。但是,如果您将适当的一对魔术值写入0xcf9,则计算机将重新启动。壮观!并且没有以任何方式进行标准化(肯定不是PCI规范的一部分),因此不同的芯片组可能有不同的要求。Booo。
efi-EFI运行时服务提供了重新启动计算机的入口点。通常甚至可以正常工作!只要EFI运行时服务都可以正常工作,这可能是一个难题。
acpi-最新版本的ACPI规范可让您提供地址(通常是内存或系统IO空间)和要写入的值。想法是将值写入地址会重置系统。事实证明,这样做通常会失败。通过ACPI表示PCI重新启动方法也是不可能的,因为PCI重新启动方法需要一对值,而ACPI仅给您一个值。
它扰乱了一个I / O位置,该位置将一条数据线拉低,从而告诉CPU它应停止执行任何操作并从BIOS中的某个位置开始运行代码。
当然,在电源管理之前的过去,计算机仍然可以自行重启。(有人记得冻结的程序何时意味着您必须使用Ctrl + Alt + Delete重新启动计算机吗?)
在我的旧486上,汇编语言命令JMP FFFF:0000
(即,将CPU的指令指针设置为所述地址)将导致整个计算机重新启动。换句话说,FFFF:0000寻址BIOS中的位置,该位置具有有关计算机在首次启动时应执行的操作的指令。我怀疑AndrejaKo的答案描述的Reset Pin或电源管理前几天的Reset按钮也会将指令指针强制到相同的地址。
一个谷歌搜索JMP FFFF:0000揭示了这许多有趣的网页。
还有一个叫做看门狗的东西。该设备用作死人开关。计算机必须每说一分钟就向看门狗发出信号,告知它仍然存在。当计算机崩溃时,例如进入无限循环,它将无法向看门狗发出信号,表明它仍按预期运行,在这种情况下,看门狗将执行硬件重置。这在终结者的受欢迎的电视系列节目中得到了证明,该机器人被高压电涌击倒。它会在2分钟内重置自己。
回到旧的IBM PC-1上,键盘控制器很奇怪地处理了重启。IBM嵌入了一个小型微处理器来处理键盘,并且它具有一些备用I / O线,因此他们使用其中一条线来驱动主CPU的复位线。发送到键盘控制器的命令将导致CPU复位,就像刚接通电源一样。
我猜想这种传统一直持续到“ AT”时代,并且今天ACPI可能还会保留这种痕迹。
补充:关于上述重置方案,有一个有趣的细节。在早期引导序列期间,代码在RAM中寻找可能由先前执行的代码设置的特定模式。如果存在此代码,则跳过某些POST(开机自检)诊断。该模式只会出现在“热”启动中。