中央处理器
中央处理器(CPU)是每台计算机的重要组成部分。CPU发送信号来控制计算机的其他部分,就像大脑控制身体一样。
CPU是一种电子机器,它根据计算机要做的事情列表(称为指令)工作。它读取指令列表并按顺序运行(执行)每一条指令。一个CPU可以运行的指令列表就是一个计算机程序。
时钟速率,或CPU内部部件的速度,以赫兹(Hz)为单位。现代处理器的运行速度通常非常快,因此使用千兆赫兹(GHz)代替。一GHz是每秒100万个循环。
台式(家用)计算机中使用的大部分CPU都是由Intel或Advanced Micro Devices(通常简称AMD)公司生产的微处理器。其他一些生产CPU的公司有ARM、IBM和ATI科技公司旗下的AMD,ATI科技公司是目前的领导者。他们的CPU大多用于嵌入式系统,用于更专业的东西,比如手机、汽车、游戏机或军事领域。
电脑内的奔腾CPU
CPU的类型
在20世纪,工程师们发明了许多不同的计算机架构。现在大多数台式计算机使用32位CPU或64位CPU。32位CPU中的指令擅长处理大小为32位的数据(在32位CPU中,大多数指令以32位为单位进行"思考")。同样,64位CPU擅长处理大小为64位的数据(通常也擅长处理32位数据)。一个CPU最擅长处理的数据大小通常被称为CPU的字数大小。许多70年代、80年代和90年代初的老CPU(以及许多现代嵌入式系统)的字大小都是8位或16位。当20世纪中叶发明CPU时,它们有许多不同的字大小。有的指令和数据有不同的字大小。不太流行的字大小后来就不再使用了。
大多数CPU都是微处理器。这意味着CPU只是一个单一的芯片。有的芯片里面的微处理器还包含其他元件,是完整的单芯片"计算机"。这就是所谓的微控制器。
登记簿
当CPU运行计算机程序时,它需要一个地方来存储指令操作的数据(它们读写的数据)。这种存储称为寄存器。一个CPU通常有很多寄存器。寄存器必须非常快速地访问(读写)。因此,它们是CPU芯片本身的一部分。
记忆
将所有数据存储在寄存器中会使大多数CPU过于复杂(而且非常昂贵)。因此,寄存器通常只存储CPU"现在"正在处理的数据。程序使用的其余数据则存储在RAM(存储器)中。除了在微控制器中,RAM通常存储在CPU之外的独立芯片中。
当CPU要读取或写入RAM中的数据时,就会输出该数据的地址。RAM中的每个字节都有一个内存地址。地址的大小往往与字的大小相同。一个32位的CPU使用32位的地址,等等。但是,较小的CPU,如8位CPU,经常使用比字大小更大的地址。否则最大程序长度会太短。
因为地址的大小是有限的,所以最大的内存量也是有限的。32位处理器通常只能处理最多4GB的内存。这是使用32位地址可以选择的不同字节数(每个位可以有两个值-0和1,232字节就是4GB)。一个64位处理器可能能够处理高达16EB的RAM(16个exabytes,约160亿GB,或160亿亿字节)。操作系统可能会限制它使用更小的数量。
存储在RAM中的信息通常是不稳定的。这意味着,如果关闭计算机,它将消失。
缓存
在现代计算机上,RAM的速度比寄存器慢得多,因此访问RAM会拖慢程序的速度。为了加快内存的访问速度,通常会在RAM和CPU的主要部件之间放置一种更快的内存,称为缓存。缓存通常是CPU芯片本身的一部分,每字节的价格比RAM贵得多。缓存存储的数据与RAM相同,但通常要小得多。因此,程序使用的所有数据可能都不适合放在缓存中。缓存试图存储可能被大量使用的数据。例如,最近使用的数据和在内存中与最近使用的数据接近的数据。
通常情况下,"为缓存而缓存"是有意义的,就像为RAM设置缓存一样。在多级缓存中,有很多缓存,称为L1缓存、L2缓存等。L1缓存是最快的(也是每字节最贵的)缓存,离CPU"最近"。L2缓存离CPU一步之遥,比L1缓存慢,等等。L1缓存往往可以看作是L2缓存的缓存等。
公交车
计算机总线是CPU用于与RAM和计算机中的其他组件进行通信的导线。几乎所有的CPU都至少有一条数据总线--用于读写数据,还有一条地址总线--用于输出地址。CPU内部的其他总线将数据传送到CPU的不同部分。
指令集
指令集(也称为ISA--指令集架构)是一种由特定CPU直接理解的语言。这些语言也被称为机器代码或二进制。它们说的是如何告诉CPU做不同的事情,比如将数据从内存中加载到寄存器中,或者将两个寄存器的值相加。指令集中的每条指令都有一个编码,也就是如何将指令写成一个位的序列。
用C和C++等编程语言编写的程序不能直接被CPU运行。它们必须在CPU运行它们之前被翻译成机器代码。编译器就是做这种翻译的计算机程序。
机器代码只是一个0和1的序列,人类很难读懂它。为了使其更易读,机器代码程序通常用汇编语言编写。汇编语言使用文本代替0和1。例如,你可以写"LD A,0"来将0值加载到寄存器A中。将汇编语言翻译成机器代码的程序称为汇编器。
功能性
以下是一个CPU能做的一些基本事情。
- 从内存中读取数据和向内存写入数据。
- 把一个数字加到另一个数字上。
- 测试一个数字是否比另一个数字大。
- 将一个数字从一个地方移到另一个地方(例如,从一个寄存器移到另一个寄存器,或者在一个寄存器和存储器之间)。
- 跳转到指令列表中的另一个地方,但只有当某些测试为真时才会跳转(例如,只有当一个数字比另一个数字大时才会跳转)。
即使是非常复杂的程序,也可以通过组合许多像这样的简单指令来制作。之所以能够做到这一点,是因为每条指令发生的时间非常短。今天的许多CPU可以在一秒钟内完成超过10亿(1,000,000,000)条指令。一般来说,一个CPU在给定时间内能做的事情越多,它的速度就越快。衡量处理器速度的一种方法是MIPS(百万指令每秒)。Flops(每秒浮点运算)和CPU时钟速度(通常以千兆赫为单位)也是衡量处理器在一定时间内能做多少工作的方法。
CPU是由逻辑门组成的,它没有移动的部件。计算机的CPU以电子方式连接到计算机的其他部分,如视频卡或BIOS。计算机程序可以通过读取或写入数字到计算机内存的特殊位置来控制这些外围设备。
指令管道
CPU执行的每一条指令通常是分很多步骤来完成的。例如,在一个简单的CPU上运行一条指令"INC A"(将寄存器A中存储的值增加1)的步骤可以是这样的。
- 从内存中读取指令。
- 解码指令(弄清指令的作用),以及
- 增加一个注册A。
CPU的不同部分做这些不同的事情。通常情况下,可以同时运行不同指令的一些步骤,这样可以使CPU的速度更快。例如,我们可以在解码另一条指令的同时,从内存中读取一条指令,因为这些步骤使用的是不同的模块。这可以被认为是在"流水线内"同时拥有许多指令。在最好的情况下,所有的模块都同时在处理不同的指令,但这并不总是可能的。
内存管理单元(MMU)和虚拟内存
现代CPU通常使用内存管理单元(MMU)。MMU是一个将CPU的地址转换为(通常)不同的RAM地址的组件。当使用MMU时,程序中使用的地址(通常)不是存储数据的"真实"地址。这就是所谓的虚拟(与"真实"相反)内存。下面列举了一些为什么使用MMU的原因。
- 一个MMU可以将其他程序的内存从程序中"隐藏"起来。这是通过在程序运行时不将任何地址翻译到"隐藏"的地址来实现的。这很好,因为这意味着程序不能读取和修改其他程序的内存,这提高了安全性和稳定性。(程序之间不能互相"监视",也不能"踩对方的脚趾")。
- 许多MMU可以使内存的某些部分成为不可写、不可读或不可执行(意味着存储在该部分内存中的代码无法运行)。这对稳定性和安全性以及其他原因都有好处。
- MMU允许不同的程序对内存有不同的"看法"。这在许多不同的情况下是很方便的。例如,它总是可以让一个程序的"主"代码位于同一个(虚拟)地址,而不会与其他程序发生冲突。当有许多不同的代码(来自库)在程序之间共享时,这也很方便。
- MMU允许每次程序运行时,库中的代码出现在不同的地址。这是好的,因为不知道东西在内存中的位置,往往使黑客更难让程序做坏事。这就是所谓的地址空间随机化。
- 高级程序和操作系统可以使用MMU的技巧来避免在内存的不同位置之间复制数据。
多核心
多核处理器在21世纪初开始普及。这意味着它们在同一芯片上内置了许多处理器,因此它们可以同时运行许多指令。有些处理器可能有多达32个核心,如AMD Epyc 7601。
问题和答案
问:什么是CPU?答:CPU(中央处理单元)是每台计算机的重要组成部分。它发送信号来控制计算机的其他部分,几乎就像大脑控制身体一样。CPU是一种电子机器,它根据指令清单工作,完成某些任务。
问:CPU是如何工作的?
答:CPU读取指令清单,并按顺序运行(执行)每一条指令。一个CPU可以运行的指令列表就是一个计算机程序。
问:CPU的时钟速率或速度是以什么为单位衡量的?
答:CPU内部零件的时钟速率或速度是以赫兹(Hz)为单位的。现代处理器的运行速度通常非常快,所以用千兆赫(GHz)来代替--1GHz是指每秒1,000,000,000个周期。
问:谁是一些制造CPU的公司?
答:制造CPU的一些公司有英特尔、Advanced Micro Devices(AMD)、ARM(最近被Nvidia收购)、IBM和AMD旗下的ATI Technologies,后者目前在市场上处于领先地位。
问:大多数CPU用在哪里?
答:台式电脑中使用的大多数CPU是英特尔或AMD公司生产的微处理器,而其他大多数CPU则用于更专业的嵌入式系统,如移动电话、汽车、视频游戏机或军事应用。