微处理器如何工作

microprocessor
微处理器是所有计算机的核心。 Jorg Greuel/Getty Images

您用来阅读此页面的计算机使用**微处理器**来工作。微处理器是任何普通计算机的核心,无论是台式机服务器还是笔记本电脑。微处理器有许多类型,但它们都以大致相同的方式完成大致相同的工作。

微处理器——也称为 **CPU** 或中央处理器——是一种完整的计算引擎,制造在单个芯片上。第一个微处理器是1971年推出的Intel 4004。4004的性能不强——它只能进行加减运算,而且一次只能处理4个比特。但令人惊叹的是,所有功能都集成在一个芯片上。在4004之前,工程师们要么从芯片集合中,要么从分立元件(一次连接一个晶体管)来构建计算机。4004为首批便携式电子计算器提供了动力。

广告

如果您曾好奇计算机中的微处理器在做什么,或者曾想了解不同类型微处理器之间的区别,那么请继续阅读。在本文中,您将学习相对简单的数字逻辑技术如何让计算机完成其工作,无论是玩游戏还是拼写检查文档!

微处理器的演进:英特尔

Intel 8080
1974年,英特尔推出了8080微处理器,它是第一个强大到足以构建计算机的微处理器。 Science & Society Picture Library/Getty Images

第一个进入家用计算机的微处理器是Intel 8080,它是一个完整的8位计算机芯片,于1974年推出。第一个在市场上引起轰动的是Intel 8088,于1979年推出并被集成到IBM PC中(该PC于1982年左右首次出现)。如果您熟悉PC市场及其历史,您会知道PC市场从8088发展到80286、80386、80486,再到奔腾系列、酷睿系列和至强系列。所有这些微处理器都由英特尔制造,它们都是对8088基本设计的改进。

自2004年以来,英特尔推出了具有多核和数百万个晶体管的微处理器。但即使是这些微处理器,也遵循与早期芯片相同的通用规则。

广告

英特尔酷睿i9处理器最多可拥有八个核心,每个核心都可以执行原始8088上运行的任何代码,速度快约6,700倍!每个核心都可以处理多线程指令,使计算机能够更高效地管理任务。

英特尔的产品范围自20世纪70年代以来大幅扩大。截至本文撰写时,该公司仍在为计算机制造奔腾(Pentium)和酷睿(Core)CPU,但高性能PC和服务器可能会使用至强(Xeon)芯片。此外,英特尔还提供赛扬(Celeron)和凌动(Atom)处理器系列。赛扬面向入门级计算机用户,而凌动处理器更适用于移动设备和物联网设备。

尽管英特尔仍占据市场很大份额,但它的竞争对手也日益增多。AMD在PC处理器市场与英特尔竞争,同时在受PC游戏玩家欢迎的图形处理器芯片领域也有大业务。以其图形芯片闻名的英伟达(Nvidia)也生产CPU。2020年,苹果推出了M系列芯片,取代了苹果Macintosh电脑之前使用的英特尔芯片。三星可能也在研发自己的专有处理器设计。还有更多公司为其他电子用途制造处理器,例如汽车和智能家居产品。市场竞争越来越激烈。

广告

微处理器逻辑

Intel Pentium 4 processor.
英特尔奔腾4处理器是英特尔在2001年推出时最快的处理器。 Intel/Newsmakers

要了解微处理器的工作原理,查看其内部并了解用于创建它的逻辑非常有帮助。在此过程中,您还可以了解**汇编语言**——微处理器的原生语言——以及工程师为提高处理器速度可以做的许多事情。

微处理器执行一系列机器指令,这些指令告诉处理器该做什么。根据指令,微处理器执行三项基本操作:

广告

  • 微处理器利用其ALU(算术/逻辑单元)执行加、减、乘、除等数学运算。现代微处理器包含完整的浮点处理器,能够对大型浮点数执行极其复杂的运算。
  • 微处理器可以将数据从一个内存位置移动到另一个内存位置。
  • 微处理器可以根据决策做出判断并跳转到一组新的指令。

微处理器可能会执行非常复杂的操作,但以上是它的三项基本活动。下图展示了一个能够完成这三项操作的极其简单的微处理器:

microprocessor
此图显示了一个简单的微处理器及其组件和功能。
十万个为什么

这大概是微处理器最简单的形式了。该微处理器具有以下特点:

  • 一个**地址总线**(可以是8、16、32或64位宽),用于向内存发送地址
  • 一个**数据总线**(可以是8、16、32或64位宽),可以向内存发送数据或从内存接收数据
  • 一条**RD**(读取)线和一条**WR**(写入)线,用于告诉内存是设置还是获取寻址位置
  • 一条**时钟线**,让时钟脉冲对处理器进行排序
  • 一条**复位线**,用于将程序计数器复位到零(或任何值)并重新开始执行

在此示例中,我们假设地址总线和数据总线都是8位宽。

以下是这个简单微处理器的组件:

  • 寄存器A、B和C只是由触发器组成的锁存器。(有关详细信息,请参阅《布尔逻辑如何工作》中关于“边沿触发锁存器”的部分。)
  • 地址锁存器与寄存器A、B和C类似。
  • 程序计数器是一个锁存器,它具有在被告知时递增1和在被告知时复位为零的额外能力。
  • ALU可以像一个8位加法器一样简单(有关详细信息,请参阅《布尔逻辑如何工作》中关于加法器的部分),或者它可能能够对8位值进行加、减、乘、除运算。这里我们假设是后者。
  • 测试寄存器是一个特殊的锁存器,可以保存ALU中执行比较操作得到的值。ALU通常可以比较两个数字,判断它们是否相等、哪个更大等。测试寄存器通常还可以保存加法器最后阶段的进位位。它将这些值存储在触发器中,然后指令解码器可以使用这些值来做出决策。
  • 图中标记有“3-State”的六个方框是**三态缓冲器**。三态缓冲器可以传输1、0,或者它可以基本断开其输出(想象一个完全将输出线与输出所连接的导线断开的开关)。三态缓冲器允许多个输出连接到一条线上,但只有其中一个能实际将1或0驱动到线上。
  • 指令寄存器和指令解码器负责控制所有其他组件。

尽管此图中未显示,但指令解码器会有控制线,它们将:

  • 告知寄存器A锁存数据总线上当前的值
  • 告知寄存器B锁存数据总线上当前的值
  • 告知寄存器C锁存ALU当前输出的值
  • 告知程序计数器寄存器锁存数据总线上当前的值
  • 告知地址寄存器锁存数据总线上当前的值
  • 告知指令寄存器锁存数据总线上当前的值
  • 告知程序计数器递增
  • 告知程序计数器复位为零
  • 激活六个三态缓冲器中的任何一个(六条单独的线)
  • 告知ALU执行何种操作
  • 告知测试寄存器锁存ALU的测试位
  • 激活RD线
  • 激活WR线

进入指令解码器的有来自测试寄存器的位、时钟线,以及来自指令寄存器的位。

广告

微处理器内存

上一节讨论了地址总线和数据总线,以及RD和WR线。这些总线和线连接到RAM或ROM——通常两者都有。在我们的示例微处理器中,我们有一个8位宽的地址总线和一个8位宽的数据总线。这意味着微处理器可以寻址256字节的内存,并且每次可以读取或写入8位内存。我们假设这个简单的微处理器有从地址0开始的128字节ROM和从地址128开始的128字节RAM。

**ROM**代表只读存储器。ROM芯片被编程为一组永久的预设字节。地址总线告诉ROM芯片获取哪个字节并将其放到数据总线上。当RD线改变状态时,ROM芯片将选定的字节呈现在数据总线上。

广告

**RAM**代表随机存取存储器。RAM包含信息字节,微处理器可以根据RD或WR线是否被发出信号来读取或写入这些字节。当今RAM芯片的一个问题是,一旦断电,它们就会忘记所有信息。这就是计算机需要ROM的原因。

顺便说一句,几乎所有计算机都包含一定量的ROM(有可能创建一个不含RAM的简单计算机——许多微控制器通过将少量RAM字节放置在处理器芯片本身上来实现这一点——但通常不可能创建一个不含ROM的计算机)。在PC上,ROM被称为**BIOS**(基本输入/输出系统)。当微处理器启动时,它开始执行在BIOS中找到的指令。BIOS指令会执行诸如测试机器硬件之类的操作,然后它会从硬盘中获取**引导扇区**(详见《硬盘如何工作》)。这个引导扇区是另一个小程序,BIOS在从磁盘读取后将其存储在RAM中。然后微处理器开始从RAM中执行引导扇区的指令。引导扇区程序会告诉微处理器从硬盘中获取其他内容到RAM中,微处理器随后执行这些内容,以此类推。这就是微处理器加载和执行整个操作系统的方式。

广告

微处理器指令

即使是前面例子中展示的极其简单的微处理器,也拥有一套相当大的可执行指令集。这些指令集合以位模式的形式实现,每个位模式在加载到指令寄存器时都有不同的含义。人类不擅长记忆位模式,因此定义了一组短词来表示不同的位模式。这组词被称为处理器的**汇编语言**。**汇编器**可以非常容易地将这些词翻译成它们的位模式,然后汇编器的输出被放置在内存中供微处理器执行。

以下是设计者可能为我们示例中的简单微处理器创建的汇编语言指令集:

广告

  • **LOADA mem** - 从内存地址加载到寄存器A
  • **LOADB mem** - 从内存地址加载到寄存器B
  • **CONB con** - 将常数值加载到寄存器B
  • **SAVEB mem** - 将寄存器B保存到内存地址
  • **SAVEC mem** - 将寄存器C保存到内存地址
  • **ADD** - 将A和B相加,结果存储在C中
  • **SUB** - 将A和B相减,结果存储在C中
  • **MUL** - 将A和B相乘,结果存储在C中
  • **DIV** - 将A和B相除,结果存储在C中
  • **COM** - 比较A和B,结果存储在测试寄存器中
  • **JUMP addr** - 跳转到某个地址
  • **JEQ addr** - 如果相等,则跳转到某个地址
  • **JNEQ** addr - 如果不相等,则跳转到某个地址
  • **JG addr** - 如果大于,则跳转到某个地址
  • **JGE addr** - 如果大于或等于,则跳转到某个地址
  • **JL addr** - 如果小于,则跳转到某个地址
  • **JLE addr** - 如果小于或等于,则跳转到某个地址
  • **STOP** - 停止执行

如果您阅读过《C语言编程如何工作》,那么您就知道这段简单的C代码将计算5的阶乘(其中5的阶乘 = 5! = 5 * 4 * 3 * 2 * 1 = 120):

a=1;f=1;while (a <= 5){ f = f * a; a = a + 1;}

程序执行结束时,变量**f**包含5的阶乘。

汇编语言

**C编译器**将这段C代码翻译成汇编语言。假设在此处理器中RAM从地址128开始,ROM(包含汇编语言程序)从地址0开始,那么对于我们简单的微处理器,汇编语言可能看起来像这样:

// 假设a在地址128// 假设F在地址1290 CONB 1 // a=1;1 SAVEB 1282 CONB 1 // f=1;3 SAVEB 1294 LOADA 128 // 如果a > 5 则跳转到175 CONB 56 COM7 JG 178 LOADA 129 // f=f*a;9 LOADB 12810 MUL11 SAVEC 12912 LOADA 128 // a=a+1;13 CONB 114 ADD15 SAVEC 12816 JUMP 4 // 循环回if17 STOP

ROM

那么现在的问题是,“所有这些指令在ROM中是什么样子?”这些汇编语言指令中的每一个都必须由一个二进制数表示。为了简单起见,我们假设每条汇编语言指令都被赋予一个唯一的数字,如下所示:

  • LOADA - 1
  • LOADB - 2
  • CONB - 3
  • SAVEB - 4
  • SAVEC mem - 5
  • ADD - 6
  • SUB - 7
  • MUL - 8
  • DIV - 9
  • COM - 10
  • JUMP addr - 11
  • JEQ addr - 12
  • JNEQ addr - 13
  • JG addr - 14
  • JGE addr - 15
  • JL addr - 16
  • JLE addr - 17
  • STOP - 18

这些数字被称为**操作码**。在ROM中,我们的小程序将看起来像这样:

// 假设a在地址128// 假设F在地址129Addr opcode/value0 3 // CONB 11 12 4 // SAVEB 1283 1284 3 // CONB 15 16 4 // SAVEB 1297 1298 1 // LOADA 1289 12810 3 // CONB 511 512 10 // COM13 14 // JG 1714 3115 1 // LOADA 12916 12917 2 // LOADB 12818 12819 8 // MUL20 5 // SAVEC 12921 12922 1 // LOADA 12823 12824 3 // CONB 125 126 6 // ADD27 5 // SAVEC 12828 12829 11 // JUMP 430 831 18 // STOP

您可以看到,七行C代码变成了18行汇编语言,而这又变成了ROM中的32字节。

解码

指令解码器需要将每个操作码转换成一组信号,这些信号驱动微处理器内部的不同组件。我们以ADD指令为例,看看它需要做什么:

  1. 在第一个时钟周期内,我们需要加载指令。因此,指令解码器需要:
  2. 激活程序计数器的三态缓冲器
  3. 激活RD线
  4. 激活数据输入三态缓冲器
  5. 将指令锁存到指令寄存器中
  6. 在第二个时钟周期内,ADD指令被解码。它需要做的很少:
  7. 将ALU的操作设置为加法
  8. 将ALU的输出锁存到C寄存器中
  9. 在第三个时钟周期内,程序计数器递增(理论上这可以与第二个时钟周期重叠)。

每条指令都可以分解为一系列按顺序执行的操作,这些操作以正确的顺序操纵微处理器的组件。有些指令,如这条ADD指令,可能需要两到三个时钟周期。其他的可能需要五到六个时钟周期。

广告

微处理器性能与趋势

可用**晶体管**的数量对处理器性能有巨大影响。如前所述,像8088这样的处理器中的典型指令需要15个时钟周期才能执行。由于乘法器的设计,仅在8088上执行一个16位乘法就需要大约80个周期。有了更多的晶体管,能够实现单周期速度的更强大乘法器成为可能。

更多的晶体管也使得一项名为**流水线**的技术成为可能。在流水线架构中,指令执行是重叠的。因此,即使每条指令可能需要五个时钟周期才能执行完毕,但可以有五条指令同时处于不同的执行阶段。这样一来,就好像每个时钟周期都完成了一条指令。

广告

许多现代处理器拥有多个指令解码器,每个解码器都有自己的流水线。这允许多个指令流,意味着每个时钟周期内可以完成多条指令。这项技术实现起来相当复杂,因此需要大量的晶体管。

趋势

如今,处理器似乎无处不在,而且这种趋势似乎并未放缓。研究人员已经找到了使微处理器变得灵活的方法,从而使智能服装等物品成为可能。研究人员一直在研究使用光而不是电来操作处理器的方法。可能最大的未来变化是量子计算机的发展,它们不受限于使用1和0来解决问题。虽然这些计算机可以更有效地处理更复杂的问题,但您不太可能在短期内在您的桌面上看到量子计算机。

广告

64位微处理器

microprocessor
了解64位处理器的工作原理以及它们为何能处理几乎无限量的RAM。 AMD

64位处理器自1992年以来一直存在,并在21世纪成为主流。这些处理器拥有64位ALU、64位寄存器、64位总线等等。

世界需要64位处理器的原因之一是它们**扩展的地址空间**。32位芯片通常受限于最大2GB或4GB的RAM访问。当大多数家用计算机只使用256MB到512MB的RAM时,这似乎很多了。但21世纪的家用计算机可以更快地处理数据(非常复杂的数据包含大量实数)。进行视频编辑和对超大图像进行照片编辑的人们都受益于这种计算能力。高端游戏玩家也受益于更详细的高分辨率游戏。

广告

64位芯片提供了更多选择,因为64位RAM地址空间在可预见的未来基本上是无限的——2^64字节的RAM大约是十亿千兆字节的RAM。凭借64位地址总线和主板上宽而高速的数据总线,64位机器还提供更快的I/O(输入/输出)速度,连接到硬盘驱动器显卡等设备。这些功能可以大大提高系统性能。

有关微处理器及相关主题的更多信息,请查看以下链接。

广告

常见问题

微处理器有什么用?
微处理器是计算机的一部分,负责执行算术和逻辑运算,通常包括加法、减法、将数字从一个区域传输到另一个区域以及比较两个数字。
微处理器也叫什么?
微处理器也称为中央处理器。

更多信息

相关文章

更多优秀链接

  • CU Boulder Today. "Breakthrough light-based microprocessor chip could lead to more powerful computers, network infrastructure." Dec. 23, 2015 (Sept. 22, 2021) https://www.colorado.edu/today/2015/12/23/breakthrough-light-based-microprocessor-chip-could-lead-more-powerful-computers-network
  • Microsoft. "Understanding quantum computing." Feb.1, 2021. https://docs.microsoft.com/en-us/azure/quantum/overview-understanding-quantum-computing
  • Patel, Prachi. C&EN. "Researchers report the most complex flexible microprocessor yet Chip packs over 39,000 transistors on a plastic film." July 26, 2021. https://cen.acs.org/materials/electronic-materials/Researchers-report-complex-flexible-microprocessor/99/web/2021/07
  • Salman, Ali. wccftech.com. Jun 18, 2021. "Samsung Might Design Its Own Custom CPU as it Seeks Former Apple and AMD Engineers." https://wccftech.com/samsung-might-design-its-own-custom-cpu-as-it-seeks-former-apple-and-amd-engineers/
  • Stanford University. "How Pipelining Works." (Sept. 22, 2021) https://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/pipelining/index.html

广告

加载中...