背景
继上一篇《计算机是如何启动的》文章之后,接下来我将详细说明每个步骤是在做什么?
第一步是电源供应,这个我就不说了,就是上电,至于电流是怎么跑的,电压是多少之类的,我都不说,这个很硬件了。
第二步是CPU的重置和初始化,这里就有几个疑问了,我们就从底下的疑问来开始了解CPU做的重置和初始化是什么?
1.什么是重置,在重置什么,为什么要重置,怎么个重置法?
2.初始化,是在初始化什么?
好,就带着这两个问题开始学习。
解析
重置
1. 什么是重置
含义:在计算机术语中,“重置”通常指将设备的状态恢复到其启动时的初始状态。对于CPU来说,重置意味着中断其当前操作,清除其内部状态(比如寄存器内容),并将其准备为一个已知的、一致的初始状态。
2. 在重置什么
CPU停止所有当前活动,清除或重置内部寄存器,包括程序计数器,从而准备好从预设的起始地址开始执行指令。 从这里就延伸出来一个知识点:这个预设的起始地址是什么?是写死在CPU中吗? 预设的起始地址通常被硬编码在CPU的设计中(就是写死的)。这个预设的起始地址通常指向固件(BIOS/UEFI)存储的位置。对于不同的架构,这个地址可能有所不同,但它是由CPU的制造商在设计时确定的。
3. 为什么要重置
机器刚启动,清清白白的,还要重置做什么?其实有2个目的:
第一是确保从一致状态开始, 虽然看起来CPU是刚启动,但在电源供应之前,CPU内部的状态是不确定的。这是因为残留电荷可能导致寄存器或其他内部元件处于非零状态。重置步骤确保所有内部状态被清零或设置到一个预定义的初始状态,这对于确保CPU能够预期地执行后续指令是必要的;
第二是统一启动流程, 重置也意味着为启动过程提供了一个清晰、统一的起点。无论CPU之前处于什么状态(例如,正在运行、处于休眠状态、或是完全关闭),重置保证了每次启动都是从相同的状态开始。这对于开发者来说是重要的,因为它简化了固件和操作系统的设计和调试过程。
4. 怎么个重置法
当我们按下电源按钮时,主板上的电路会向CPU发送一个重置信号。这个信号指示就会让CPU进行重置操作。
初始化
在初始化什么
-
寄存器:CPU中的寄存器是小的存储设备,用于暂存指令、数据和地址。在初始化过程中,特定寄存器会被设定为其起始值。
-
内存管理:初始化内存管理单元(MMU),它负责虚拟内存和物理内存之间的映射,这里的初始化指的是设置这个地址映射和内存访问控制的基本参数。
这里需要介绍下MMU:MMU是CPU内部的一个组件,负责虚拟地址到物理地址的映射。简单来说,操作系统使用虚拟内存地址来管理程序和数据,而物理内存地址则对应于实际的硬件内存位置(即内存条上的位置)。MMU的任务是在程序运行时动态地将虚拟地址转换成物理地址,从而实现有效的内存访问和隔离。 -
电源管理:设置电源管理模式,确保CPU能够高效地管理其能耗。
-
安全特性:根据CPU和系统的支持,初始化安全功能,比如执行保护、安全启动等。 这里可以简单介绍下什么是执行保护和安全启动:
- 执行保护,比如Intel的执行禁止(XD)技术或AMD的无执行(NX)位,这些都是硬件级的功能,用于标记内存区域为不可执行,防止恶意软件执行代码。
- 安全启动,一些CPU可能支持特定的指令或模式,与UEFI固件中的安全启动功能配合,确保只有签名的、可信的软件才能在启动过程中加载。 这个阶段CPU只是初始化这部分能力,这能力会在后面的阶段被使用,特别是在BIOS/UEFI阶段以及操作系统加载和运行的阶段。
总结
总的来说,CPU的重置和初始化是让CPU从一个未定义的状态转变为一个预定义的、清晰的状态,准备好按照BIOS/UEFI的指令开始工作。这些过程确保了不管之前CPU处于什么状态,一旦完成这两步,CPU都会从一个固定的点开始执行指令,从而启动操作系统的加载和运行。
这里留一个疑问,那就是被硬编码在CPU内的预设起始地址是多少呢?