情景1:玩游戏久了,内存使用率噌噌地往上涨,太卡了。于上按下WINDOWS左下角开始菜单,点“重新启动”按钮,过一会重新进入OS,不卡了。

情景2:使用电脑时,经常遇到机器无法正常工作。不得已,只得按下电脑机箱的RESET按键。电脑重新进入OS后,我们又可以愉快地玩它了。

这些都是重启,我们经常使用,但并一定了解里面的细节。本章内容就总结一下相关重启知识(PS:不敢称RESET,因为RESET包括的知识更宽泛)。

重启就是将全部或一部分系统环境置为初始时的状态,至于是全部或是其中一部分被置为初始时状态,要靠重启类型来决定。不管重启类型是哪种,CPU PC指针都会指向一个固定的位置0xFFFFFFF0,从这个地址开始执行代码。重启类型,从肉眼来看,可以分为Full Reset和普通重启两种。Full Reset,我们会看到电源灯灭了,过一会,电源灯又亮了,即掉电又上电。普通重启,和FULL Reset不同的是,不牵涉电源状态切换。

1 Full Reset

下Full Reset命令后,PCH的S3#,S4#和S5#变低,电源逻辑控制模块检测到这几个SUS PIN变低后,便拉掉平台相关的电源,但RSMRST#不能拉低。过几秒后,南桥PMC会重新将S3#,S4#和S5#拉高,电源逻辑控制模块再重新上平台的电源。此时,CPU程序指针重置,整个平台的代码开始跑。

下图是RST_CNT寄存器的详细解释:

图1 RST_CNT示意图

BIT3便是FULL RESET位。重启时将此位置1,SLP_S3#,SLP_S4#和SLP_S5#就会被拉低3-5秒钟。有时候我们会很奇怪,改了SETUP菜单的值,特别是有STRAP相关的选项,电源便会掉几秒钟,然后再起来。这个就是FULL RESET在起作用。

2 普通重启

相对于Full Reset,我们更常用的是普通重启的功能。本文开篇提到的情景1和情景2都属于普通重启。它不牵涉电源切换,所以电源灯一直亮。普通重启后,CPU大部分MSR寄存器,都会被初始成默认值,包括CACHE LINE也会置成初始状态。

根据PLTRST#是否动作,普通重启分为冷重启和热重启两种。根据图1所示,冷重启,就是PLTRST会有一个大约1ms的低脉冲的类型。热重启不会产生PLTRST的低脉冲。它们之间的区别是,冷重启除了重置CPU,还重置PCI设备。

2.1 冷重启

主要有两种方法。

方法1:使用RST_CNT寄存器的SYS_RST,将SYS_RST置1,如OutportB(0xCf9,0x06)。

方法2:将南桥的SYS_RESET#拉低,机箱上电源开关旁边的小按键就是拉的这个PIN。

2.2 热重启

主要有三种方法。

方法1:使用RST_CNT寄存器,将SYS_RST置0。如OutportB(0xCF9,0x04)。

方法2:使用InitRegister port 0x92,其中bit0 INIT_NOW全置1。如先使用Data保存0x92的值,然后执行OutportB(0x92,Data|0x01)。

方法3:使用南桥的RCIN#,将其拉低至少16个PCI Clock。这也是OS重启最常用的KBCRST方法。做的时候一条语句搞定,Outportb(0x64,0xFE)。

这几种方法,其实都是间接通过南桥,最终拉低CPU INIT# PIN做到的。

3 ACPI OS重启

ACPIOS将BIOS作为它和硬件交互的桥梁,BIOS将硬件信息提供给ACPI OS的同时,也将重启的方法提供给了ACPI OS。

众多ACPI Table,FADT是最重要的Table之一。FADT有两个字段:RESET_REG和RESET_VALUE,如果FADT的Flags中的RESET_REG_SUP为1,则操作系统便会使用OutportB(RESET_REG,RESET_VALUE)重启。RESET_REG可以是0x92,0xCF9也可以是0x64。如果是0x64时,FADT的IAPC_BOOT_ARCH字段的LEGACY_DEVICES和8042位也要置起来,代表平台支持KBCRST#功能。

(注:本文基于INTEL平台所写。INTEL文档是把Full Reset称为ColdReset,但BIOS代码中都是将hard reset当作冷重启。还是以代码为准吧,毕竟我们是软工,CODE才是我们的生存法宝。)

Bios工程师手边事—重启相关推荐

  1. Bios工程师手边事—SBIOS添加EC功能

    在笔记本平台中,我们经常用到EC芯片.从BIOS角度来看,EC在平台中的地位和SuperIO,BMC没有什么不同:都是挂在LPC下面:所用IO端口都要解码至LPCbridge上:都要为ACPI OS提 ...

  2. Bios工程师手边事—HDA Audio

    目前正在做一款至强服务器平台,发现居然有接ALC282声卡.一个服务器要声卡做什么呢?百思不得其解.不过既然原理图都画出来了,BIOS就需要将其调试出来.毕竟BIOS就是不做它,也省不了啥成本. 我们 ...

  3. Bios工程师手边事—IGD VBIOS

    现代社会,是计算机技术高速发展的时代.计算机的发展,总是以人们生活的方便为目的.早期的计算机要想看到计算机的计算结果,要根据打孔的卡片来计算输出结果.而现在想看计算机的输出,就方便多了,一台显示器,男 ...

  4. BIOS工程师手边事-题前话

    先感叹一下:"BIOS这个行业真是太窄了!"我刚入行的时候,我老大太忙了,我都不好意思占用我老大太多时间,只好在网上找教程.但网上谈这个的寥寥无几,幸好看到BINI大侠发的一系列文 ...

  5. Bios工程师手边事—ACPI电源管理

    ACPI是高级配置与电源接口(AdvancedConfiguration and Power Interface)的简称,它是1997年由Intel.Microsoft.Toshiba,HP,Phoe ...

  6. BIOS工程师需要掌握的知识

    ACPI规范: ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)_anqi8955的专栏-CSDN博客 ​​​​​​ACPI Specification 第一章 ...

  7. 2017年-Intel BIOS 工程师面试

    岗位需求:需要扎实的C,Python基础 面试地点:上海紫竹园(紫星路880号) 面试时间:2017年1月12日 面试总时间:1.5h 一面:9:00-9:30 问题:   1)C语言中结构体和联合体 ...

  8. 2022华为BIOS工程师笔试与面试

    一.笔试 平台: 牛客网带监控 1. 选择题单选+多选- 主要是C语言数组通常具有的两种基本操作是( )查找和修改查找和索引索引和修改建立和删除关于const char *p;中p的描述,正确是()指 ...

  9. 【BIOS来电重启】Restore AC Power Loss

    为了应对实验室突然断电工作站宕机的情况,通过设置BIOS中的高级电源选项,实现来电自动开机并进入系统. .1bios电源管理 首先进入bios中的Advanced选项 随后选择APM电源管理选项 随后 ...

最新文章

  1. JGG :微生物所王军-综述固有免疫细胞在胃肠道疾病中研究进展
  2. .NET 之美-认识.NET平台
  3. Web Service学习笔记
  4. ajax firefox,Jquery ajax不在firefox中工作
  5. 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
  6. javascript 运算符优先级
  7. ae中心点重置工具_7步学习AE 入门篇 第2步 初学乍练
  8. 第七周项目4-计算一个程序猿的周工资
  9. 计算机存储数字,数字串在计算机内的表示与存储
  10. C++编程语言的应用方向有哪些?
  11. 前端工程师拿到全新的 Mac 需要做哪些准备
  12. rust: 写CTP策略中的几个难点
  13. 怎样导入mysql驱动包_怎么导入MYSQL的驱动包
  14. Python:2行代码实现文字转语音
  15. 高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)
  16. 代理服务器CCProxy基本设置
  17. pr控制C语言程序,PR控制(含代码)
  18. YoloV5 训练长方形图像
  19. Windows资源管理器占用CPU过高
  20. 数值计算之 最小二乘法(3)最小二乘的矩阵解法

热门文章

  1. AVI movi LIST
  2. Pytorch 卷积层
  3. 铣扁机的常用加工方法及构造原理
  4. Burpsuite验证码识别插件 “captcha-killer-modified“ 使用教程(详细)
  5. DVWA全套学习打靶通关教程
  6. 学软件技术计算机二级考什么,计算机二级考试科目有哪些
  7. Redis发布和订阅
  8. tlb tlh tli 关系
  9. 200 SMART PLC回原方法汇总(脉冲轴)
  10. 《算法不好玩》专题二:基础排序算法