计算机重启的原理是什么?(计算机关机后总是自动重启)


谢邀。资深 BIOS 工程师是最合适回答这个问题。先说结论,重启下去和重启后再回来都需要 CPU 以外的硬件提供帮助,并不是 CPU 单独可以控制,更不是操作系统能够单独完成。简单来说有时候 reset 你看到似乎断电了一下,CPU 风扇不转了,一会又开始转动,这个是 full reset,整个系统并没有断电。而这时控制整个 full reset 下去又上来的是 PMC,并不是 CPU。

我们日常使用电脑中不可避免的会重启(reset,reboot)。围绕着它,有些很有趣的问题。有的小伙伴就好奇为什么重启后 CPU 都不运行代码了,它是怎么又重新开始的,不是说好 CPU 掌控一切吗,在这个短暂的空挡,发生了什么。还有同学觉得重启就是关机再开机。

今天我们就来用户感受、软件接口和硬件来看看 reset 的原理,以及了解一下,它和关机再开机有哪些相似和不同。然后我们再来看看重启回来发生了什么。

操作系统

对于用 Window 8 以前版本的用户来说,重启和关机再开机感受没有什么不同,过后都是一片白茫茫大地真干净。Windows 8/10 启用了快速启动,从而两者产生了明显不同,详见:

老狼:Windows 快速启动背后的功臣:休眠

简单总结一下:关机再开机,会利用休眠功能(hibernate)直接进入到一个预存储的登陆画面,加速启动,但环境并不干净;而重启动则不变,从 0 开始一个个加载驱动,相对更加干净,也更慢。

操作系统当然是能够区分重启和关机再开机的,那么主板和 CPU 这么多种,它是怎么知道如何重新启动的呢?是通过 ACPI,参见:

老狼:ACPI 与 UEFI

ACPI 的 Fixed ACPI Description Table (FADT)表定义了如何 reset:

FADT 表中 reset 的定义

简单来说就是 BIOS 要通过 FADT 来告诉操作系统,向哪个寄存器(RESET_REG)写入什么值(RESET_VALUE)会重启。操作系统记住后,在有重启的需求时照着做就好了。

Reset 的种类

如果你有观看 ACPI 的工具,你可以在 Windows 下看一下 BIOS 到底在 FADT 里面报上来什么寄存器。如果你没有,这里推荐 RWEverything(Read & Write Everything),一个台湾同胞(?)写的免费的工具,十分强大:

老狼:也许是最良心的硬件信息读取工具:RW-everything

你会看到,现在大多数使用 Intel 芯片组的电脑,都是告诉 OS,向 0xCF9 的 IO 口,写入 6。你也可以自己用工具写一下试试,你会发现电脑真的重启了,你没有保存的文件也消失了。。。。

那这个神奇的 0xCF9 IO 端口是什么东西呢?它一般是南桥或者 southcomplex 实现的逻辑,在它之前还有 0x92 和 0x66 端口,这里按下不表。CF9 的使用已经好多代了,我们在很多地方都可以找到它,我们在 Intel 的官网搜索 E3800 的 datasheet,就可以找到它的寄存器定义,如下:

CF9 寄存器定义

简单来说,就是:

  1. 写入 02,光进行 CPU 的 reset,也叫 soft reset,即将 CPU 的 INIT#信号拉低 16 个 PCI clock。CPU 会重新启动,重新从 reset vector 执行程序。这时很多 CPU 的 uncore 寄存器和南桥芯片组寄存器都没有被 reset。
  2. 写入 06,进行 hard reset。这是最常用的 reset。它通过 assert PLTRST#信号,通知所有芯片,包括外围的网卡等等,一起 reset。过后系统的绝大多数寄存器都会被重置为缺省值,CPU 当然也会从 reset vector 开始执行程序。
  3. 写入 0x0E,进行 Full reset,这是最彻底的 reset。系统会经历一次 full power cycle,看起来也就是关机再开机了一次,风扇也会挺一下,再运行。系统会依次经历 S3,S4,S5 的过程,时间较长。它会在 2)的基础上重置一下需要关机才能清除的寄存器,有时候这些动作在设置某些功能时是必不可少的。

你要问还有没有更牛的 reset,其实还有一个,那就是 global reset。0xCF9 的 reset 只影响 inband 的所有器件,而 global reset 还会 reset out-of-band 的模块,譬如 ME 和 BMC 等等。Global Reset 需要置起相应标志位。

重启回来

在 CPU 重启后,是不是要立刻跳到 reset vector 开始执行 BIOS 程序了呢?还没有,有很多先导过程。

史前时代:重启时序

在重启后很多芯片组要复位,这不是简单的一个信号就可以了,需要有个先后顺序,CPLD 等等控制电路控制了这个先后顺序,让芯片能够优雅的复位。

青铜时代:神秘消失的时间

pcode、on die rom 会在这个阶段执行,TXT、boot guard 等安全保障措施也在这里运行。

城邦时代:UEFI 的四个阶段

CPU 终于开始执行 reset vector 的代码了,这就进入了我们熟悉的 UEFI 的世界。我们之前已经有很多文章都有介绍 UEFI 的各个阶段,这里简单回顾一下:

• 在 SEC 阶段,系统从复位开始运行(由主机引导处理器取回的第一指令),通过初始化处理器高速缓存(Cache)来作为临时内存使用,我们有了堆栈,从而可以执行 c 程序,然后转到 PEI 阶段。

• 在 PEI 最开始阶段,仅少量栈和堆可用,我们需要找到并使能足够我们使用的永久内存,通常是内存颗粒或内存条(DIMM),然后转入 DXE。

• DXE 阶段有了永久存储空间,真正开始负责初始化核心芯片,然后转换到 BDS 阶段。

• 核心芯片初始化完成后 BDS 阶段开始,并继续初始化引导操作系统(输入,输出和存储设备)所需的硬件。 纵观 PI 的整个阶段,BDS 对应的是“执行 UEFI 驱动程序模型”来引导 OS 这一过程。

UEFI 引导阶段步骤和驱动程序众多,经过多年发展,核心代码已经超过一百万行,俨然已经是个独立的小王国了。要理解 UEFI,必须理解 UEFI 的目的:初始化硬件,安全启动操作系统,并为操作系统提供统一的硬件抽象。所有纷繁复杂的驱动和表象后面,都在为了这一目的服务。只要抓住这条主线,再遇到其他的知识点也就会豁然开朗了。

近代和现代:引导程序和操作系统

UEFI 会在 BDS 阶段后加载操作系统引导程序,也就是 OS loader。不同的 OS 有不同的 Loader。一般用户都十分熟悉,我们这里不再赘述。

另外传统 BIOS 和 BIOS 引导方式已经被淘汰。Intel 也宣布对传统 BIOS 兼容模式(CSM)在 2020 后不再支持。网上诸多 Int13、引导扇区等内容,除非对历史有兴趣,全部可以一笑而过了。

结论

计算机重启,CPU 并不是能够独立完成的。简单的重启后面隐藏了如此丰富的内容,这是很多人想象不到的。计算机经过几十年发展,已经十分复杂,如果我们究其一个小方面,都会发现其中隐藏了十分丰富的细节,值得大家细细探究。

为什么苍蝇吃垃圾却不会生病?(为什么苍蝇喜欢吃腐烂食物)
上一篇
没有了
下一篇
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

相关推荐

  • 苹果手机各个功能介绍,iphone必须关闭的十个功能

    1、关闭蓝牙。现在已经很少有人用蓝牙传输文件了,而且iPhone与安卓的蓝牙并不兼容,所以,可以在设置中,关闭蓝牙功能。2、关闭通知功能。关于APP推送,无非也就是一些更新提醒,关了也不会有什么影响,还能多省点电。3、关闭自动调节亮度功能。一般来说,可以将屏幕亮度在15%-30%之间,在强光环境中,在进行手动调整就可以了。4、禁止后台刷新。在设置—通用中,关闭后台自动刷新功能,也可以对省电起到一点...

  • 高德打车怎么设置途经地,高德如何添加途经路线

    1、点击高德地图APP界面底部的“导航”按钮,进入导航模式。2、点击右下角的“路线”,进入路线设定页面,根据要求输入起点、终点进行路线规划。3、点击“添加途经点”,弹出添加途经点页面,点击右上角,可以添加或者删除途经点,乘客可以手动输入要添加的途经点。4、当添加完途经点时,点击“确定”按钮,即可添加途经路线。此时地图会显示出这条路线上所有的途经点,以及当前途经点的地点信息。怎么设计高德地图设置要经...

  • 高中必修二物理知识点总结,高一物理必修2重点知识点归纳

    您好,1.运动学-位移、速度、加速度的概念及计算方法-相关运动的分析方法,如相对运动和抛体运动-牛顿运动定律及其应用2.力学-力的概念及种类,如重力、弹力、摩擦力等-牛顿第一、二、三定律及其应用-力的合成与分解-能量、功、动能定理、功率的概念及计算方法-动量、冲量定理及其应用3.热学-温度、热量、热能的概念及计量单位-热传递的方式及其特点,如传导、对流、辐射-热力学第一、二定律及其应用,如热机效率...

  • 计算机重启的原理是什么?(计算机关机后总是自动重启)

    谢邀。资深 BIOS 工程师是最合适回答这个问题。先说结论,重启下去和重启后再回来都需要 CPU 以外的硬件提供帮助,并不是 CPU 单独可以控制,更不是操作系统能够单独完成。简单来说有时候 rese...

  • 为什么苍蝇吃垃圾却不会生病?(为什么苍蝇喜欢吃腐烂食物)

    不是那样。苍蝇有较强的抗菌蛋白,但还是经常患病、有时大批病死。对苍蝇致命的病原体在人的生活垃圾里不常见,但一般来说对人们的相关印象影响更大的是人不易辨认患病的苍蝇。绿僵菌属和白僵菌属的多种真菌、Isa...