我是“1+1=”,是小明同学在电脑键盘上敲下的一串指令。
键盘,这个整日被小明用手指敲敲打打的“传达室大叔”,是电脑外设家族里最沉默寡言、最不起眼 的成员,长得也黑不溜秋,但是,它承担了大部分传达任务。
键盘上的“1+1=”键盘是怎么让电脑知道我们敲打 的是什么字符的呢?脱掉键盘的外套,我们看到了他的文身 密密麻麻、迷宫似的电路。原来,每个按键都是用小弹簧支撑的,很像一个个小的开关。当 我们按下某个键时,按键下方的导电元 件会与它下面的金属接触,形成闭合电 路,使电流通过。键盘上的每个键,都 有一个专属的坐标位置,就像我们熟知 的直角坐标系,每一个点都对应唯一的 x 值和y 值,只是这里的坐标系是一张 按键的位置表。一旦处理器发现某处有 电流通过,它就能检测到这个键在表中 的具体位置(第几行第几列),与位置 表中比对后,处理器就知道输入的是什 么符号了。
每个按键下方都有导电元 件,当按键被按下时,导 电元件会与它下面的金属 接触,形成闭合回路,使电流通过
“1+1=”的华丽变身
键盘大叔很信任小明,它相信小明说的每一个字。但是,怎么才能让电 脑明白小明在键盘上输入的字母和数字呢?毕竟电脑是个只认识1和0的家伙, 并不能直接看懂我们的语言。
科学家为此专门开发了汇编语言和汇编“神器”,它们可以自动把我们 要表达的信息转换成计算机能读懂的语 言,也就是机器代码。
每一句机器码都要说明谓语和宾 语:什么操作行为(加/减/乘/除) 和操作数值。前面的叫“操作码”,后面的叫“操作数”。比如,可以用4个比特来表示要 做的运算(加法、减法、乘法等),后面 8个比特表示做运算的数值或者地址:
· 0000表示把加法器里的数值卸 到指定的地址,对应指令是“STORE”。 (比如000000000101是把加法器里 的结果卸到00000101 这个地址。)
操作码 操作数 指令 机器动作
0000 地址 STORE 把加法器里的数值卸到指定的地址
0001 数值 LOAD 把后面的数值装载到加法器里
0010 地址 LOAD 表示把后面地址里的数值装载到加法器里
0100 数值 ADD 在加法器里加上后面的数值
1000 地址 ADD 在加法器里加上后面地址里的数值
汇编神器依照这张表,可以把汇编语言翻译成电脑能读懂的机器码
我们还是拿“1+1=”来举例,想 要告诉电脑完成的计算是:
·把数值1装载到加法器 · 加上数值1
·把结果卸下到5号地址。 写成汇编语言就是
LOAD#1 ADD#1 STORE 5
“#”号表示后面的数字代表数值。 按照规则,翻译成机器码就是
000100000001
010000000001
000000000101
在这里,既要认准前面四位是操作码,又要分清后面八位是数值本身还是某个地址。
汇编“神器”可以把汇编语言快速 翻译成机器码,电脑一旦读到机器码, 就知道该做出什么反应了。
漫游“魔都”
“变身”成二进制的机器码,我就 通过I/0,大摇大摆地进入“魔都”CPU。
深入到Intel i7“魔都”内部,你 会发现这里灯火通明,热闹非凡。
最早的“魔都”规模很小,一个 “BOSS” (控制单元)就能管理了。 然而,随着“魔都”面积越来越大,分 工越来越细致,密度越来越高,一个 “BOSS”根本管不过来,这就需要几 个“核心”(CORE),分开管理。比
LOAD#1
ADD#1
STORE 5
000100000001
010000000001
000000000101
汇编“神器”
输入输出(I/O)
“魔都”的上边是1/O, 即“1+1=”进 入“魔都”的通道,也是完成后出去的地方
L3 缓存
“魔都”中间的这部分是快速缓冲贮存区,主要负责收容大量临时存放的数据。 L3 是第三级的存储区,速度相对慢一点, 但胜在容量巨大;而一级缓存(L1)、二级缓存(L2) 是在“核心”内部的存储区,速度更快。
如 Intel i7有8个“核心”,每个“核 心”都是一个个大的城区,里面设施齐全。 拥有8个大城区的“魔都”会不会很大?其实它只有两个大拇指 指甲盖那么大,准确地说是17.6 毫米×20.2毫米。这个“魔都”可以从外面看,这个叫“Intel i?”的“魔都” 是这样的,但深入到其内部,里面有26亿个晶体管
Queue Uncore,/O
Memory dontroller
内存控制器
“魔都”的下边是内存控 制器,不仅管理着上面的
心
“核心”是控制单元,它遵循冯。
小小的,里面却非常复杂。比如, “1+1=”只占其中几十个晶体管。
存储器,还管理着“魔都” 外面的大片存储空间
诺伊曼结构的规范,进行提取、解码、执行和写回。每个“核心” 都科学地布局着固定的逻辑结构。
要知道整个“魔都”有26亿个晶体管!
构,有执行单元、指令级单元和 总线接口,还有L1、L2 等
CPU 的主要功能是执行存放在主存储器中的程序,即机器指令。它由控制单元(CU)、 算术逻辑单元(ALU)寄存器等部件组成。 CPU 从寄存器中取出指令,CU 发出各种操作命令来执行指令,通过相应的总线到达ALU, 来完成算术运算和逻辑运算,运算后的结果再返回到寄存器中
飞奔在宽宽的BUS 上
这里大规模集成电路“高楼”林立, 四通八达的“马路”都是8车道、16车道、 甚至是64车道的。这里被称为“BUS” (总线)。
有了BUS 之后,电脑内部的通讯, 变得快速无比。64位总线的电脑,可 以同时传送64比特的信息。像我这样 只有32比特,还不够总线宽度,简直 可以横着飞了。
计算机也许是世界上“高速公路” 最发达的“国度”了。从输入设备进入 计算机,我们就一直在总线上飞奔, 刚才是在CPU外部,现在我们进入 CPU, 这里的内部总线包括控制总线、数据总线、地址总线三条主干线,分别 连接到控制单元、暂存器、算术逻辑单 元上,四通八达。
“1+1=”进入到“魔都”内部后,
首先需要向“大BOSS”—— 控 制 单 元报到。“大BOSS” 非常忙,总是在 繁多的操作任务间不停地切换。见到 “1+1=”后,“大BOSS” 会给“1+1=” 一个地址,安排我先到一个叫“寄存器” 的地方,等待“大BOSS” 的指令。
“快捷酒店”寄存器
我通过 BUS 来到了寄存器,这里像 是一个快捷酒店,所有新来的任务数据 都会先被“大BOSS”安排在这里入住。在计算机中,所有指令的操作信号和执行过程都受到严格的时间控制。数据即使已经到了寄存器门口,也必须等待 相应时钟脉冲的到来才能进入。只有这样,计算机才能有条不紊地工作
寄存器实际上是一个严格按照时钟 控制的逻辑电路,当数据(0和1)到 了“酒店门口”D 时,需要等一个时钟 脉冲C 到来,才能进到“房间”Q。如 果时刻未到,只能一直等在“门外”。
“1+1=”进入房间后,可以先好 好地“休息”一下,直到下一个时钟脉 冲过来,才会离开。
由于寄存器所有的动作都是受时钟 控制而严格同步的,所以这类电路叫“时 序逻辑电路”。它们的标识,是在紧贴 着“>”旁边加上“C”(Clock)。
接下来,“大BOSS”控制单元会“寻 址”找到临时安置在寄存器的“1+1=”。
同时它还是个“高级翻译官”,通过 解码器,发现了操作码0100和操作数 00000001:
010000000001(ADD1)
识别出这是个加法,就让“1+1=” 去找算术逻辑单元。
在算术逻辑单元里,我要跟三个有 趣的“新朋友”打交道,他们是调皮的 斯图尔特“非门”、高大上的凯文“与 门”和好玩的鲍勃“或门”。这其实是
计算机里三个最基本的逻辑运算。
“或门”鲍勃 “非门”斯图尔特 “与门”凯文
我的“小黄人”朋友们
控制单元是兢兢业业的“大BOSS”
比一般的“工作人员”要尽职。它记得每 一个来“魔都”的人,给我们分配寄存器, 还知道怎么“寻址”找到临时安置在寄存 器的“外来人员”。顶着“大BOSS”的名
硅半导体芯片
CMOS 场效应管结构截面
CPU 里面有几十亿个晶体管,每个晶体管都只在“导通”和“不导通(截止)”两种转态之 间转换,就像开关一样。
场效应晶体管有好几种,它们的截面形状和 符号都很像“元”字,“元”字头上的电极叫“栅 极 G”,在 G 和 S 两极之间施加一个电压,可以 控制D 和 S 之间的导通或截止。以其中一种场效 应管为例,当G 是低电位时,D 和 S 之间截止, D 输出高电位,反之则是低电位。导通和截止两 种状态可以通过控制随意转换,这恰恰就是二进 制运算所需要的效果。
将不同类型的晶体管按照特定方式组合可以构成不同的逻辑门电路。以非门为例,它是由两个不同类型的晶体管一正一反串接起来的。它可是一个非常调皮的“家伙”,你说往左,它就往右,你说向上,它就向下。你把“0”放进A 端,它就在Q 端出来“1”;反之Q 端就出来“0”。 当然,并不是“非门”自己淘气故意弄反的,而是科学家就是这样设计的!
头,做着“接待员”的活,真让我感动啊!
算术逻辑单元(ALU,arithmetic logic unit) 是“魔都”“核心”的最关 键部分,它像是专门进行逻辑运算的银 行,这里有“半加器”“全加器”“乘 法器”“计数器”等,进行着计算机中所有数据的运算。
除了非门,还有与门、或门、与非门、或非门、 同或门等等
X Y Z
0 0 0
0
0 0
0
与门
X Y Z
0
0 0
0 0
我是“1+1=”,所以我要进到一 个叫“半加器”的房间里。
这里有
· 一 个“或门”
;
· 两个“非门” · 三个“与门”。 如下图:
以“1+1”为例,我来研究这个加法器是 怎样得到“和”“进位值”的呢?
·B 输入的“1”经过“非门”后,变成“O” 。 ·这个“0”和A 输入的“1”经过“与门”,
它们在一起协同工作,完成一个“二 进制”数的加法,得到“和”“进位值”。 以下是二进制加法的规则和真值表。
A B 和 进位输出
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
如果考虑来自低位的“进位”输入, 那么加法器的输入就有3个。这就是“全 加器”。当八个全加器串接起来时,就 是一个八位数的加法器!
就变成了“O”
·所以,上面两个“与门”的输出都是“0”。 ·“O” 和 “O” 进了“或门”,输出的“和” 还是“O”。
· 最底下的“与门”专门负责进位,A、B 两个输入都是“1”,输出的“进位”就 是 “ 1 ”
逻辑门的三兄弟太给力了,它们的 各种组合,构成了电脑里各个强大的“神 器”:加法器、减法器、乘法器、除法 器、计数器、分频器……
匆匆之旅
在“账房”ALU 完成运算后,我再次回到“大BOSS” 那里。
“大BOSS”还是给了我一个寄存器“暂住”,并告诉我,随时准备接收通知出境。 “魔都”寸土寸金,是不会让外来人员在里面长期居住的。
“1+1=”在“魔都”的整个旅程,其实是一个很短的刹那。在“魔都”里,所 有时序电路的行动都是通过时钟脉冲控制的:
·数据和指令进入寄存器; ·数据和指令移出寄存器;
·完成一个指令译码; ·完成一次加法运算;
时钟“滴答”一次,就会完成一次基本操作,而且,很多操作都是独立并行的比如你可以一边听音乐, 一边做“1+1=”。
这个 Intel Core i7的“魔都”里的时钟是2.8吉赫,也就是28亿分之一秒就“滴 答”一次!“1+1=”在“魔都”里的整个旅程,还不到百万分之一秒。
从小明的指尖,到CPU 内的旅程,虽然非常短暂,但我记得键盘大叔,记得汇编“神器”,记得忙碌、负责的“大BOSS”, 记得走过的宽宽的BUS, 记得住过的“快 捷酒店”寄存器,记得“逻辑门”的三个小黄人和它们的真值表,记得场效应晶体管, 记得“账房”里的半加器和全加器。我忍不住要赋诗一首,以作留念:
键盘大叔他把点阵藏在心里,
你的话他每一句都当作真理。
汇编神器把指令翻译给机器;
控制单元是无所不管的 BOSS; 电脑的BUS 上都是无人驾驶; 逻辑门不认交情它只看真值。
晶体管聚集在这里成千上亿,
半加器全加器不是蛙蛇*兄弟, 只是一群群逻辑门连在一起。
*Adder, 即加法器,在英语中也有蛙蛇的意思。
结果“2”显示出来了
虽然有点依依不舍,最后还是要离 开“魔都”。
这次,大BOSS 让我出去寻找显示器。
第一列的第2点、第7点和第8点 上,是黑点,所以第一个Byte是0100 0011(黑点用1表示,白点用0表示)。
第二列的黑点是第1点、第6点 和第8点,所以第二个Byte是1000
来到I/O 外面,再次见识了方阵, 0101。
一个更大的,而且是液晶 的方阵。
按照十进制,“1+1=” 的结果应该是“2”。
把“2”字描在点阵里, 每一列是一个字节(Byte, 或者8个比特)。
利用类似的方法,也 可以描述图片。加上红绿蓝 (RGB) 三色编码,就能描 述彩色图片。
根据编码,点阵的相应 位置上的液晶点在显示器上 亮起来,“2”就出现了。这是多让人幸福的一刻啊!