计算机如何自行重启?


491

计算机如何自行重启?关闭后,它如何告诉自己再次重新出现?什么样的软件可以做到这一点?


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

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

118
它从不真正在重启时“关闭”。
摩押人

10
没有愚蠢的问题。不,也许有-但我认为这真的很有趣。作为一周候选人问题精选。
slhck 2011年

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

Answers:


599

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

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

软实力及其运作方式

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

如今,情况有所不同,因为ATX主板和ATX电源的奇妙之处(如果您一直在跟踪,那就是高级技术)。除了其他许多进步(mini-DIN PS / 2,有人吗?),ATX还带来了强大的功能。软电源意味着可以通过软件控制计算机的电源。这带来了一些导入更改:

  • 备用电源:您可能已经看到电源引脚上标有“ 5v SB”或“ 5v备用”连接器。该备用电源是一条5v线,连接到您的母板,该母线始终处于打开状态,即使计算机已关闭也是如此。这就是为什么在维修现代计算机时拔出或关闭PSU硬开关(如果有)很重要的原因,因为即使电源关闭,您也可能会短路5v SB并损坏主板。这也是为什么CMOS电池不再那么重要的原因-只要电源有市电,5v SB就会用来替换CMOS电池,因此仅在完全拔掉计算机电源时才使用CMOS电池。5v SB线很重要地使您的计算机组件(最重要的是BIOS和网络适配器)即使在关闭计算机后也可以继续运行一些简单的软件。
  • 智能电源控制。如果查看电源的主板(P1)连接器的引脚排列,您会注意到通常标有PS_ONPS_RDY的两个引脚。这些代表“电源打开”和“电源准备就绪”。如果您想进行实验,请使用计算机以外的电源,将其插入,然后小心地将接地线(黑色线之一)与PS_ON线(绿色线)短路。风扇旋转时,电源将明显打开。通过+ 5v SB运行的主板组件实际上通过将电源连接到PS_ON引脚来打开和关闭电源。由于电源中的某些电容器和其他组件需要花费一些时间才能充电,因此在PSU接通电源后,电源主输出的电压可能不稳定。这就是PS_RDY引脚的用途,当电源的内部逻辑确定电源为“就绪”并提供稳定的电源时,它就会亮起。

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

了解电源控制

好吧,我之所以解释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等),并且当您没有触发启动的方法时,它允许您使用重新启动作为远程重置系统的有效方法。


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


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

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

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

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

1
这实际上有点简单;有(许多)非ACPI方式重新启动计算机,有时仅靠ACPI无效:superuser.com/questions/294681/…–
Tobu

81

这是一个起点:

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

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

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

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

琐事:Intel 386 EX处理器上的Reset引脚是110号引脚。

386EX数据表图2

在Intel i7-900上,其土地号为AL39。

我希望有人能够提供一个答案,从高层的角度解释事物的工作原理,因为它是一个相当复杂的系统。


哇,彻底的答案。
塞斯·卡内基

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

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

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

27

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


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

1
tl; dr有很多重启方式;某些板子坏得很厉害,以至于假装是窗户,这是一种尝试性的尝试,需要几次尝试并稍作睡眠。
东武

10

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


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

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

有人对这个问题有进一步研究的决心吗?
matthias krull

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


10

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

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

一个谷歌搜索JMP FFFF:0000揭示了这许多有趣的网页。


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

9

还有一个叫做看门狗的东西。该设备用作死人开关。计算机必须每说一分钟就向看门狗发出信号,告知它仍然存在。当计算机崩溃时,例如进入无限循环,它将无法向看门狗发出信号,表明它仍按预期运行,在这种情况下,看门狗将执行硬件重置。这在终结者的受欢迎的电视系列节目中得到了证明,该机器人被高压电涌击倒。它会在2分钟内重置自己。


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

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

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

4

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

我猜想这种传统一直持续到“ AT”时代,并且今天ACPI可能还会保留这种痕迹。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.