CPU启动时会发生什么

CPU启动时会经历复位过程,确保稳定电压。它从内存中执行指令,内存包括RAM和ROM,ROM存储启动代码。CPU的指令指针(IP)指向要执行的内存地址。BIOS在ROM中,负责基本硬件初始化。地址总线和转换器用于选择内存芯片。
摘要由CSDN通过智能技术生成

CPU启动时会发生什么

本文译自:What Happens When A CPU Starts

原文截图

在这里插入图片描述

译文

这是关于CPU芯片启动时会发生什么的讨论。它可以被认为是整个计算机启动时所发生的事情,因为中央处理器是计算机的中心,也是动作开始的地方。

一般来说,当CPU芯片第一次接收到电源时,它必须通过接收reset(或RST)引脚上的脉冲来复位。这是因为当电源第一次上电时,即使只需要一两秒钟,CPU已经收到了“脏”电,因为电源正在建立一个稳定的电流流。像cpu这样的数字逻辑芯片需要精确的电压,如果接收到超出预期电压范围的数据,它们就会感到困惑。因此,只要芯片通电,它就会被重置,使其达到已知的启动条件。这是由主板上的电路自动完成的,在上电时执行复位。RESET引脚(通常是active-low)必须激活一定数量的时钟周期才能重置CPU。复位电路使reset信号保持活跃一段时间,然后禁用它,此时CPU开始它的动作。

CPU的动作实际上可以简单地总结为:它只是从内存中执行指令。说到底,CPU就是一个接收指令,然后执行指令的芯片。

中央处理器从内存中获取指令。“内存”是一个包括RAM和ROM的术语。RAM是CPU的工作空间,它临时存储当前正在处理的数据。ROM是CPU每次开机时读取的永久代码;ROM总是在CPU上执行的第一个代码。CPU通过地址总线寻址内存(包括RAM和ROM),在地址总线上发送1和0的特定组合来选择内存的特定字节。内存芯片通过数据总线将所选内存单元的内容发送到CPU进行响应。

每个CPU在内存中都有一个特殊的点,它在重置后开始读取指令。有些cpu会直接跳转到一个设定值并开始执行指令,而其他cpu实际上使用所谓的“重置向量”,这意味着它首先检查内存中的一个特定点,寻找一个数字,这个数字是开始执行指令的内存地址。

作为一个例子,当Z80 CPU被重置时,它立即开始从内存地址0000执行代码。这是一个相对简单的例子。相比之下,另一个流行的经典CPU 6502具有位于内存地址FFFC和FFFD(十六进制)的双字节重置向量。这意味着基于6502的计算机中的ROM必须位于内存空间的顶部。这两个字节向后存储,因此,如果FFFC包含00而FFFD包含B0,那么6502将跳转到内存位置B000并在那里开始执行指令。这个系统有两个优点:首先,它使计算机工程师能够控制CPU从哪里开始执行ROM代码,其次,它使内存空间的底部区域(从地址0000开始)可以供RAM使用。Z80的系统虽然更简单,但在内存中创建了一个“洞”,因为内存空间的底部是由ROM使用的,因此不能使用内存空间的开头进行正常的RAM工作。

CPU包含一个寄存器,称为指令指针(缩写为IP),它包含一个数字。IP中的数字是要执行下一条指令的内存地址。IP会随着每条指令增加,在JMP指令(一个跳跃指令,它告诉CPU跳到另一个位置并开始在那里运行指令)的情况下,IP被设置为跳跃位置,然后CPU从那里继续前进。中央处理器的指令有时被称为“操作码”。它们只是由二进制1和0组成的字符串,它们共同构成一条指令。例如,在标准的Intel 80x86 CPU(如486或Pentium)上,操作码90h(或10010000二进制)是一个NOP(无操作)操作码。NOP是所有CPU中最简单的指令,它的意思是什么都不做,然后继续下一条指令。如果RAM或ROM中的单元包含此操作码并且CPU执行它,它将执行NOP(换句话说,它将不做任何事情),然后IP将被设置为下一个内存单元。(在某些计算机平台上,指令指针被称为“程序计数器”,莫名其妙地缩写为“PG”。然而,在PC(如“IBM PC”)平台上,术语“指令指针”通常被使用,因为英特尔在其80x86 CPU家族中更喜欢这个术语。)

不管CPU从哪里开始得到指令,起始点总是在ROM芯片中的某个地方。计算机需要启动指令来执行基本的硬件检查和准备,这些指令包含在主板上称为BIOS的ROM芯片中。这是任何计算机在开机时开始执行其代码的地方。

一旦执行了BIOS代码,接下来发生的事情完全取决于BIOS中的内容,尽管BIOS通常会开始寻找某种类型的磁盘驱动器并开始执行那里的指令(通常是一个操作系统)。从那时起,操作系统接管,通常运行一个用户用来操作计算机的外壳。

应该解释CPU如何与各种内存芯片通信。至少,一台计算机需要两个这样的存储器(一个用于ROM,一个用于RAM),而且通常不止一个。但是它们都共享相同的地址总线;芯片如何知道CPU什么时候在寻址,什么时候没有?一种非常流行的解决方案是使用转换器芯片,通常是3-to-8转换器,偶尔也使用2-to-4转换器。

3-to-8转换器就是一个有3个逻辑输入和8个逻辑输出的芯片。根据输入的组合,八个输出中的一个将被激活。如果你还记得二进制数学,你应该意识到有三个比特就有8种1和0的可能组合,即:000、001、010、011、100、101、110和111。3个输入连接到地址总线的最高3行(在具有16位地址总线的CPU中,A13到A15), 8个输出现在可以用作芯片选择信号。几乎每个RAM或ROM芯片都有一个“chip Select”(CS)引脚,它可以启用或禁用芯片,无论哪个芯片从3-to-8转换器接收到CS信号,都将是响应CPU内存访问的芯片。

当然,由于您将3条地址总线线路用于芯片选择,因此降低了实际芯片内的寻址功能。然而,这通常不是问题。剩下的13条地址总线为每个芯片提供8K的内存空间,这对于小型计算机来说通常已经足够了。如果你有8个内存芯片,每个芯片都有8K内存,那么你就有一个完整的64K可寻址内存,使用一个16位地址总线的CPU的全部容量。

以下是在16位地址总线上使用3到8转换器获得的内存范围(范围前面的数字表示转换器上三个输入的状态):

000: 0000h to 1FFFh
001: 2000h to 3FFFh
010: 4000h to 5FFFh
011: 6000h to 7FFFh
100: 8000h to 9FFFh
101: A000h to BFFFh
110: C000h to DFFFh
111: E000h to FFFFh

以下是在8位地址总线上使用3-to-8转换器得到的内存范围:

000: 00h to 1Fh
001: 20h to 3Fh
010: 40h to 5Fh
011: 60h to 7Fh
100: 80h to 9Fh
101: A0h to BFh
110: C0h to DFh
111: E0h to FFh

以下是在16位地址总线上使用2到4转换器得到的内存范围:

00: 0000h to 3FFFh
01: 4000h to 7FFFh
10: 8000h to BFFFh
11: C000h to FFFFh

以下是在8位地址总线上使用2到4转换器得到的内存范围:

00: 00h to 3Fh
01: 40h to 7Fh
10: 80h to BFh
11: C0h to FFh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值