计算机如何自行重启?关闭后,如何告诉自己再次重新启动?它可以使用哪种软件?

评论

@ jer.salamon:它们实际上是完全不同的路径。关机会调用ACPI例程,该例程会将信号发送到ATX电源,从而关闭主电压轨。

这是通过BIOS控制的-如果提供内存,则感兴趣的关键字是APM和APIC

在重启时,它永远不会真正关闭。

没有愚蠢的问题。不,也许有-但我认为这真的很有趣。作为本周候选人的一个问题。

我曾经在远程服务器上进行远程工作,该服务器基本上只是该公司数据中心中没有屏幕或键盘的PC。我的服务器通常从不关闭,但有时我会使用WinXP Start-> TurnOffComputer-> Restart从头开始重新启动,以解决由测试我自己的代码引起的不稳定性。在无人值守数据中心的时候,我经常会根据自己的选择工作。我无意中选择了“关闭”作为最终选项,这非常令人厌烦,不得不等到两天后操作员才能为我按下接通开关!

#1 楼

tl; dr:计算机中的电源状态由ACPI的实现(高级配置和电源接口)控制。关闭过程结束时,操作系统将设置ACPI命令,指示计算机应重新启动。作为响应,母板使用各自的重置命令或线路重置所有组件,然后执行引导程序。主板从来没有真正关闭过,它只会重置各种组件,然后表现得就像刚按下电源按钮一样。

漫长而漫漫,但(我认为)更有趣的答案是:

Soft Power及其工作原理

在过去(好吧,对于像我这样的90年代大学生来说,很久以前),我们拥有AT(先进技术)带有AT电源管理的主板。 AT电源系统非常非常简单。您计算机上的电源按钮是一个硬件开关(可能在机箱背面),您的120vac输入正好通过它。它会物理地打开和关闭电源的电源,并且当此开关处于“关闭”位置时,计算机中的所有设备都完全没电了(这使CMOS电池非常重要,因为没有电源,就无法保持硬件时钟滴答声)。因为电源开关是一种物理机制,所以没有软件方法可以打开和关闭电源。 Windows将显示著名的“现在可以安全关闭计算机”消息,因为尽管所有内容都已停放并准备关闭,但OS实际无法打开电源开关。此配置有时被称为硬电源,因为它全是硬件。

如今,情况有所不同,因为ATX主板和ATX电源的奇妙之处(如果您一直在跟踪,那就是高级技术)。除了其他许多进步(mini-DIN PS / 2,有人吗?),ATX还带来了强大的功能。软电源意味着可以通过软件控制计算机的电源。这带来了一些重要的变化:备用电源:您可能已经看到电源引脚上标有“ 5v SB”或“ 5v备用”连接器。备用电源是连接到主板的5v线,即使计算机已关闭,它也始终打开。这就是为什么在维修现代计算机时拔出或关闭PSU硬开关(如果有)很重要的原因,因为即使电源关闭,您也可能会短路5v SB并损坏主板。这也是为什么CMOS电池不再那么重要的原因-只要电源有市电,5v SB就会用来替换CMOS电池,因此,仅在完全拔掉计算机电源时才使用CMOS电池。 5v SB线很重要地使您的计算机组件(最重要的是BIOS和网络适配器)即使在关闭计算机后也可以继续运行一些简单的软件。
智能电源控制。如果查看电源的主板(P1)连接器的引脚,则会注意到两个引脚通常标记为PS_ON和PS_RDY。这些代表“电源打开”和“电源准备就绪”。如果您想进行实验,请使用计算机以外的电源,将其插入,然后小心地将接地线(黑色线之一)与PS_ON线(绿色线)短路。风扇旋转时,电源将明显打开。通过+ 5v SB运行的主板组件实际上通过将电源连接到PS_ON引脚来打开和关闭电源。由于电源中的某些电容器和其他组件需要花费一些时间才能充电,因此在PSU开启后,电源主输出的电压可能会不稳定。这就是PS_RDY引脚的用途,当电源的内部逻辑电路确定电源已“就绪”并且将提供稳定的电源时,它就会亮起。主板会一直等到PS_RDY打开才能继续引导。

因此,电源开关不再“打开”计算机。而是将其连接到主板的基本控制器,该控制器检测到该按钮已被按下,并执行许多步骤来准备系统,包括点亮PS_ON以使电源可用。电源按钮不是触发启动过程的唯一方法,扩展总线上的设备也可以这样做。这很重要,因为当计算机关闭时,以太网网络适配器实际上会保持打开状态,并寻找一个非常特定的数据包(通常称为“魔术数据包”)。如果他们检测到寻址到其MAC地址的数据包,则将触发启动过程。这就是“局域网唤醒”(WoL)的工作方式。时钟还可以启动启动程序(大多数BIOS允许您设置计算机每天启动的时间),并且USB和FireWire设备可以触发启动程序,尽管我不知道此操作的任何实现。 >
了解电源控制

好,我解释一下Soft Power既是因为我觉得它很有趣(总是我解释这些事情的一个关键原因),又是因为它允许您了解电源和运行/关闭状态的方式。您的计算机上的所有软件均由软件控制。在当前的大多数计算机中,此软件系统是高级配置和电源接口或ACPI的实现。 ACPI是标准化,统一的系统,允许软件控制计算机的电源系统。您可能听说过ACPI电源状态。电源控制的基本机制是这些“电源状态”,您的操作系统通过准备开关(电源实际断开之前发生的关机/休眠过程)来切换电源模式,然后命令主板切换电源状态。电源状态如下所示:


G0:工作(计算机的“打开”状态)
G1:睡眠(计算机的待机状态,分为S个子状态)


S1:CPU和RAM的电源保持打开,但CPU未执行指令。外围设备已关闭电源。
S2:CPU断电,RAM保持
S3:所有组件均已关闭,但RAM和会触发恢复操作的设备(键盘)除外。当您告诉操作系统“睡眠”时,它将停止进程,然后进入此模式。
S4:休眠状态。绝对一切都已关闭。当您告诉操作系统休眠时,它将停止进程,将RAM的内容保存到磁盘,然后进入此模式。


G2:软关闭。这是计算机的“关闭”状态。除可以触发启动的设备外,所有设备都关闭电源。
G3:机械关闭。

重置实际上是如何发生的

您会注意到重新启动不是这些状态之一。那么,当计算机重新启动时,实际发生了什么?答案可能令人惊讶,因为从电源管理的角度来看,它几乎没有。有一个ACPI重置命令。当您告诉操作系统重新启动时,它会遵循其正常的关闭过程(停止所有进程,进行一些维护,卸下文件系统等),然后作为最后一步,而不是使计算机进入电源状态G2(如果您只是简单地告诉它要关机),它将设置Reset命令。这通常称为“复位寄存器”,因为像大多数ACPI接口一样,它只是一个地址,应将特定值写入该地址才能请求复位。我将引用2.0规范的作用:


可选的ACPI重置机制指定了提供完整系统重置的标准机制。实施后,此机制必须重置整个系统。这包括处理器,核心逻辑,所有总线和所有外围设备。从OSPM角度来看,断言重置机制在逻辑上等效于对机器重新通电。重置后获得控制权后,OSPM将以类似于冷启动的方式执行操作。


因此,当设置重置寄存器时,会依次发生一些事情。


所有逻辑均被重置。这意味着将各自的重置命令发送到硬件的各个位,包括CPU,内存控制器,外围控制器等。在大多数情况下,这仅意味着点亮物理RST线,就像AndrejaKo上面显示的那样。
然后启动。这是“以类似方式对冷启动执行操作”部分。主板执行与按下电源按钮后才准备好电源一样的步骤。

这两个步骤(实际上可以分解为更多的步骤)的最终结果是,它看起来就像刚启动的计算机一样,但实际上却是整个过程都在起作用。这意味着关闭和启动所需的时间更少(因为您不必等待电源准备就绪),并且重要的是允许通过关闭操作系统来启动启动。这意味着不需要使用其他启动触发器(WoL等),并且当您没有触发启动的方法时,它允许您将“重新启动”用作远程重置系统的有效方法。


这是一个很长的答案。但是,希望您现在对计算机电源管理有了更多的了解。我研究这个当然​​学到了一些东西。

评论


+1。非常有用的信息。只有一点-PS_ON为低电平有效,即切换到0V而不是+ 5VSB来打开主输出。

–MikeJ-UK
2011年6月9日在8:23

对于触发引导的USB设备,某些BIOS可以选择通过双击或按键唤醒计算机。另外,某些Mac键盘具有电源按钮(这种传统可以一直追溯到原始状态)。

– Stuart P. Bentley
2011年6月9日在16:41



很好的答案,我当然学到了很多东西。但是,仍然存在一个问题:从主板的角度来看,S4和G2状态之间有什么区别?将RAM保存到磁盘是由操作系统完成的,因此S4听起来就像硬件的“软关闭”。

– EMP
2011年6月10日,1:17

我相信S4在功能上等同于G2,但差异已存储。从S4启动时,某些BIOS似乎执行“快速POST”,而从G2启动时,某些BIOS似乎执行完整的POST。但是,我认为没有任何原因,除了人们希望S4恢复更快之外。

– jcrawfordor
2011年6月10日于1:21

这实际上有点简单;有(许多)非ACPI方式重新引导计算机,有时仅靠ACPI不能正常工作:superuser.com/questions/294681/…

–东武
2011年6月15日23:11

#2 楼

这是一个起点:

芯片通常不会先关闭然后再打开。取而代之的是,有一条复位线,当通常所有内存都被清除并且处理器看起来像刚刚上电时,它将使处理器进入所谓的复位状态。当该引脚保持高电平(或低电平,取决于处理器)时,处理器处于复位状态。释放该引脚后,它将继续正常启动,就像第一次将其打开一样。这样做的重点是本身不会断电。

那么这如何扩展到现代PC等大型系统呢?好的现代计算机是由计算机制成的,而计算机有时是由计算机本身制成的。因此,当您将计算机设置为重设时,构成计算机的“计算机”将开始保存其状态(如果控制了重设),或者仅将其重设引脚拔出。

某些处理器和微控制器(它们是微型自包含计算机,通常比现代台式计算机晚20年)可以使用内部开关进行重置。正如我所说,一旦产生复位的信号消失了,计算机就会启动。因此,问题的前提并不完全正确。计算机不知道何时打开。知道何时需要“关闭”或重置,以及何时将保持该信号的信号消失,它将打开。

这种行为在现代计算机上可能看起来很奇怪,可以将其设置为在特定时间或通过网络打开等等。正如我所说,计算机是由计算机组成的。因此,尽管主处理器可能处于关闭状态,但内部可能还有许多其他芯片和微控制器处于打开状态。最明显的情况是实时时钟,通常由电池供电。然后,它可以打开其他芯片,这将打开其他芯片,并且连锁反应一直进行到整个计算机都打开为止。在当今的计算机上,有一条称为+5 VDC备用电压的PSU线。它为计算机“关闭”时打开的各种设备提供大约50 mW的功率。

琐碎的事情:
英特尔386 EX处理器上的重置引脚是引脚编号110。



在英特尔i7-900上,它已经降落了编号AL39。

由于系统非常复杂,我希望有人能够提供一个答案,从高层的角度解释事物的工作方式。

评论


哇,彻底的回答。

–塞思·卡耐基
2011年6月8日20:35



@Seth Carnegie并不是那么好。我只是触及了大多数计算机的低级内容,从冰箱中的内容到PC。我什至没有提到ACPI,APM和其他现代电源系统,也没有提及在旧PC上的Intel 8042微控制器如何通过键盘来重置处理器,POST的工作方式,重置向量以及许多其他事情。

– AndrejaKo
2011年6月8日在20:47



@netvope我想说的太多了。您的鼠标中可能至少有一个,键盘中至少有一个,对于主板最基本的部分,至少有十个(即使考虑到高度集成的“芯片组”),电源设备中可能有一个,至少一个每个驱动器中(可能是2-3个)中的每个扩展卡中有多个...显示器也很重要,而且我的打印机现在的内存比我的第一台台式机还要多。

– AndrejaKo
2011-12-30在3:03

说到内存,现在一些新HDD和CPU的缓存大于我使用的第一台计算机的RAM。现在,我们可以完全在L2缓存中运行Windows 95,并将整个系统分区保留在驱动器缓存中!

– netvope
2011-12-30在3:57



#3 楼

这篇博客文章介绍了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仅给您一个值。




评论


这是相关的,但是如果您在此处输入另一页信息的摘录,答案将更加有用。

– calvinf
2011年6月8日23:58

tl; dr有很多重启方法;某些板子坏得很厉害,以至于假装是窗户,这是一种尝试性的尝试,需要尝试几次然后睡一会儿,才是唯一的方法。

–东武
2011年6月15日23:02

#4 楼

它扰乱了一个I / O位置,该位置将一条数据线拉低,从而告诉CPU它应停止执行任何操作,然后从BIOS中的某个位置开始运行代码。

评论


...并且在传递给重新启动系统调用的代码中指定了该位置?

–骑士萨马尔
2010年7月28日在21:25

@奈特·萨马尔(Knight Samar):不; I / O位置通常是内核知道的体系结构常量。您可以看到此例如在Linux重新启动代码中,例如arch / x86 / kernel / reboot.c。

–sleske
10年7月28日在22:19

有没有人有很好的资源可以进一步阅读该问题?

–matthias krull
10年7月29日在11:19

@ mugen.kenichi和所有人,一个朋友给我这个来参考howstuffworks.com/bios.htm/printable

–骑士萨马尔
10年7月30日在19:17

我建议superuser.com/a/347115/38062。

– JdeBP
17-10-29在7:49

#5 楼

当然,在电源管理之前的过去,计算机仍然可以自行重启。 (有人记得冻结的程序何时意味着您必须使用Ctrl + Alt + Delete重新启动计算机吗?)

在我的旧486上,汇编语言命令JMP FFFF:0000(即,将CPU的指令指针设置为所述地址)将导致整个计算机重新启动。换句话说,FFFF:0000寻址BIOS中的位置,该位置具有有关计算机在首次启动时应执行的操作的指令。我怀疑AndrejaKo的答案描述的Reset Pin或电源管理前的几天中的Reset按钮,还会将指令指针强制到相同的地址。

Google搜索JMP FFFF:0000会显示关于此的许多有趣的页面。

评论


您还需要将一个特定的值写入0040:0072,以确定它是冷启动(0x0000)还是热启动(0x1234)。

– Synetech
2011年8月2日,下午5:36

#6 楼

还有一个叫看门狗的东西。
此设备用作死人的开关。
计算机必须每分钟向看门狗发出信号,通知它仍在运行。当计算机崩溃时,例如
通过无休止的循环运行,它将无法
向仍按预期运行的看门狗发出信号,
在这种情况下,看门狗将执行硬件重置。
在流行的终结者电视系列节目中得到了证明,
机器人被高压电涌击倒。
它会在2分钟内复位。

评论


这是正确的,但并不能真正回答问题。

–sleske
2011年6月9日的15:00

是否存在实际上可以重新启动整个计算机的看门狗?我知道有时它们会被用于计算机内部的各种微控制器,但是在整个计算机级别上是否存在一个?我的亲身经历使我说不,但欢迎一些支持或反对的证据。

– AndrejaKo
2011年6月9日19:03

@AndrejaKo:我曾经在一家制造通信服务器(基本上是连接了调制解调器的刀片服务器)的公司工作。他们有一个看门狗定时器,该定时器连接到主板上的复位引脚。计时器被主板上运行的后台实用程序定期破坏,因此,如果处理器挂起,看门狗最终将按下复位按钮。它与电路相连,该电路在主板重启时使电话线繁忙。

–罗伯特·哈维(Robert Harvey)
2011年6月9日23:51

#7 楼

回到旧的IBM PC-1上,键盘控制器很奇怪地处理了重启。 IBM嵌入了一个小型微处理器来处理键盘,并且它具有一些备用I / O线,因此他们使用其中一根线来驱动主CPU的复位线。发送到键盘控制器的命令将导致CPU复位,就好像刚接通电源一样。

我猜想这种传统一直持续到“ AT”时代,也许它的痕迹今天仍保留在ACPI中。

添加:关于上述重置方案,有一个有趣的细节。在早期引导序列期间,代码在RAM中寻找可能由先前执行的代码设置的特定模式。如果存在此代码,则跳过某些POST(开机自检)诊断。该模式只会出现在“热”启动中。