在当今社会,电子计算机已经全面渗透进了我们的生活。这个伟大的发明承载了无数的心血与汗水,更是人类智慧的结晶。但你知道它们是怎样工作的吗?让我们从硬件开始,了解计算机是如何服务我们的当代生活。
CPU(Central Processing Unit,中央处理器)是计算机的大脑,数据计算处理中心,如果你理解了它的工作原理,就理解了计算机的核心工作方式。
起点
这是一个质朴的CPU,现在让我们移开它的盖子,看看里面有什么。
CPU里布满了携带电信号的线路,用于计算。
线路周围有一圈针脚,用于发出和接收信息。
每个CPU里都有一个以固定频率通断的电路——Clock(时钟)
它用于同步CPU内的所有部件,其通断频率(Clock Rate)(事实上是电平高低变化频率)以GHz(1*10^9Hz)计。
通与断,有与无,0和1,这就是计算机储存数据,传输信息的方式。
理论上,时钟的通断速度越快,CPU的计算效率越高。现代计算机CPU每秒能通断数十亿次,这使得CPU能极快地处理复杂的任务。这么快的变化速度可能让你无法理解,现在让我们把时间尺度缩小为1个时钟周期,从一次电信号的发射来理解CPU的工作原理。
主板
如果我们从线路讲起,你可能无法理解它的工作目的。所以我们请来了CPU的左邻右舍。绿色的是主板,用于连接计算机里的所有组件,上面的线路就是各个元件通信的桥梁。
CPU的背面有大量的针脚,分为上下左右四组,上下的针脚传输数据,左右的针脚起控制作用。它们所连向的设备包括RAM、硬盘、显示器、键盘等。
让我们从RAM讲起。
CPU与RAM
现在你看到的两条银色物体是RAM(Random Access Memory,随机存储器,俗称内存),用于存储所有CPU将要处理的数据,这种储存方式必须通电,否则数据会丢失。
这些数据以0和1的形式储存,分为两种:键(address)和 值(data)
不同的键可以有着相同的值,但不能同时存在两个相同的键。值包括了指令,数字,地址等数据信息,而键就是这些数据的名称。如果你学过C语言就要知道:你创建的变量就是在RAM里开通的存储空间,在空间里存有值,即变量值;如果你此时创建了一个指向该值的指针,那么指针的内容就是键。
CPU可以从RAM读取数据或向RAM写入数据,以电路通断的方式。
CPU想要读取某个值时通过上方的address bus向RAM发送所需值的键,然后接通中间的control bus,即可从下方的data bus收到由RAM提供的相应值。CPU从RAM中读取内容或指令,这个过程在没有逻辑指令的情况下是顺序的,因为程序的执行是顺序的。
CPU在写入数据时通过上方的address bus向RAM发送键,同时通过下方的data bus向RAM发送值,最后接通中间的set线路,RAM即可在指定键的位置覆盖上这些数据。这个动作在CPU读取到相关指令时执行。
但这些值,或者说这些数据都是什么?数据类型包括数字、地址、指令。数字好理解,就是最普通的数据;地址记录了其他硬件设备的位置信息,方便CPU与它们通信。而指令是最重要的,这些指令就是计算机实现计算的一切。计算机听命于CPU,CPU听命于这些编辑好的指令。CPU指令集中有许多指令,以下为较常见的几种。
LOAD:从RAM读取数据
ADD:将两个数字相加
STORE:向RAM写入数据
COMPARE:比较两个数字大小
JUMP IF:在满足COMPARE的一定条件下跳转到某个值
JUMP:直接跳转到某个值
OUT:输出值到某个地址(显示器,指示灯)
IN:从某个地址(键盘,按钮)输入值
这很好理解吧?下面让我们看一段RAM中的内容,理解CPU在读取这段时做了什么。
键 | 值 |
---|---|
00100001 | LOAD |
00100010 | 624 |
00100011 | IN |
00100100 | 键盘地址 |
00100101 | COMPARE |
00100110 | JUMP IF = |
00100111 | 01100001 |
00101000 | OUT |
00101001 | 显示器地址 |
00101010 | ”错误“ |
…… | …… |
01100001 | “正确” |
这是一段简化后的程序,其效果是如果键入624显示“正确”,否则显示“错误”。
详解如下:
- 从RAM加载数字624
- 从键盘获取用户输入
- 比较是否相同
- 如果相同跳转到键为01100001的地址执行输出正确
- 在显示器输出错误
你现在可能非常好奇,CPU是如何处理这些从RAM中获得的键的?读取的数字储存在哪?如何进行加法计算?如何比较大小?
别急,现在我们终于能研究CPU内部的线路了。
CPU
这是CPU内部的线路图,很乱。里面有这各种单元,负责各种工作。先让两个最重要的单元上场。
右边的是控制单元(Control Unit),它就像队长一样,从RAM接收指令并解析成其他元件能够理解的命令。
左边的是算术逻辑单元(ALU),加法,减法,比较等数学运算都是由它执行的。他有两个数据输入口:A和B。
未完待续