电脑Reset背后发生了什么?

1 篇文章 0 订阅

电脑重启在有些人看来就是关机再开机。对于用Windows 8以前版本的用户来说,重启和关机再开机感受没有什么不同,会将系统运行过程中的数据清掉。Windows 8/10启用了快速启动,从而两者产生了明显不同。简单来说:关机再开机,会利用休眠功能(hibernate)直接进入到一个预存储的登陆画面,加速启动,但环境并不干净;而重启则不变,从0开始一个个加载驱动,相对更加干净,也更慢。

操作系统当然是能够区分重启和关机再开机的,那么主板和CPU这么多种,它是怎么知道如何重新启动的呢?是通过ACPI,ACPI的Fixed ACPI Description Table(FADT)表定义了如何reset:FADT表中reset的定义
简单来说就是BIOS要通过FADT表来告诉操作系统,像哪个寄存器(RESET_REG)写入什么值(RESET_VALUE)会重启。操作系统记住以后,在有重启的需求时照着做就好了。

Reset的种类

我们可以使用查看ACPI的工具,在Windows下看BIOS到底在FADT里报上来什么寄存器。可以使用RW或者HE工具。会看到现在大多数使用Intel芯片组的电脑,都是告诉OS,向0xCF9的IO口写入6。这里用HE工具查看,FACP表就是FADT表。
请添加图片描述

那这个神奇的0xCF9 IO端口是什么东西呢?它一般是南桥或者southcomplex实现的逻辑,在它之前还有0x92和0x66端口。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需要置起相应标志位

参考:
Reset重启后发生了什么?它和关机后再开机有什么区别?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值