计算机的心脏是 “中央处理器” ,简称 “CPU”。
程序有一个个 “操作” 组成,这些操作叫 “指令”。
因为它们 “指示” 计算机去要做什么。
数学指令,加、减,
CPU 让ALU 进行数学运算。内存指令
CPU 和内存通信,读写值。
重点放在功能,而不是一个根线具体怎么连,一条线链接两个组件,这条线只是所有必须电路的一个抽象,这种高层次视角---叫 “微体系架构”。
如何操作的?
首先,要内存,四个寄存器
image.png
- 4个寄存器,存储临时数据,操作数据。
数据是以二进制存在内存里,程序也可以存在内存里。
- 给CPU 所有的指令分配一个ID。
前四位:操作码
后面的代表数据来自哪里-寄存器或者内存地址。
- 还需要2个寄存器
- 追踪程序运行到哪里了。
叫 “指令地址寄存器”- 当前指令的内存地址。
2.另一个寄存器存当前指令-叫“指令寄存器”。
-
启动计算机 都从0 开始。
image.png
RAM 存放了一个程序,测试
- 取指令阶段,负责拿到指令。
指令地址寄存器 连到RAM ,
寄存器的值为0 ,RAM 返回地址0 的值。
0010 1110 ---》 复制到 指令寄存器
- 解密阶段 :指令拿到 ,搞清楚什么指令,才能执行。
0010 是 OPCODE 操作码 ,LOAD A 指令 :把RAM 的值放入寄存器A。
1110 :RAM 地址,十进制 14
image.png
- 由控制单元解码
image.png
“控制单元” 也是逻辑门组成,识别LOAD A 指令,需要有电路检测操作码是不是0010。
image.png
- “执行阶段”
检测是否 LOAD A 指令的电路,打开RAM 的 “允许读取线” 把地址 14 传过去。
image.png
RAM 拿到值 ,0000 0011 ,十进制的3。
- LOAD A指令把 这个值放入 寄存器 A,其他不受影响。
1.需要一根线,链接4个寄存器。
- 用检测是否 LOAD A 的指令电路,启用寄存器A 的 “允许写入线”。
image.png
- 就把 RAM地址 14 的值,就写进了寄存器 A。
- 指令完成,关闭所有电路。
- 去拿下一条指令。
- 把“指令地址寄存器 ” + 1,执行阶段结束。
LAOD A 是CPU 可以执行的指令之一。
不同的指令使用不同逻辑电路解码。
这些逻辑电路会配置 CPU 内的组件执行对应的操作。
分析解码电路有点繁琐,通过上面例子走过一遍,干脆把 “控制单元” 包成一个整体,简洁一些。
新的抽象:
image.png
控制单元“指挥”组件,取指令 -> 解码 -> 执行。
再走一次
- 取指令
指令地址寄存器 值是 1 ,RAM 对应1 的值是0001 1111
image.png
解码
0001 操作码 对应的是 LOAD B :
从RAM 取值,放入寄存器B
1111 :内存地址是15执行阶段
15 对应RAM 的值是 0000 1110
十进制的14 存入 寄存器B。
image.png
- 指针寄存器 + 1
image.png
下一个:
指令寄存器 是 2 ,对应RAM 是 1000 0100
1000 对应 add 指令, 后面4位不是RAM 地址,而是 两位两位代表两个寄存器。
两位可以代表4个值,可以代表四个寄存器。
第一个地址 01,代表寄存器B 。 ---还没搞明白为啥代表B
第二低地址00 ,代表寄存器A。
就是吧B的值和加到A的里面。
image.png
需要执行加指令,需要用到ALU。
控制单元:负责选择正确的寄存器作为输入,配置ALU 做正确的操作。
对“ADD” 指令,控制单元 启用控制器B作为ALU 的第一个输入。
image.png
启用A作为ALU 的第二个输入
image.png
ALU 可以执行不同的操作,需要控制单元传递ADD操作码,告诉他要做什么。
最后结果要存到寄存器A,但不能直接写入A, 因为新值会进入ALU ,不断和自己相加。
因此,控制单元用一个自己的寄存器暂时保存结果。
image.png
关闭 ALU ,把值写入正确的寄存器A。
3+14 = 17 二进制 0001 0001
最后一件事,把指令寄存器+1 。
最后一个指令 :0100 1101
把寄存器A的值 写入内存RAM 。1101地址 13
image.png
地址写入 RAM ,这次不是“允许读取” 是“允许写入” ,同时打开寄存器A的允许读取,就可以吧把寄存器A的值希尔RAM 。
image.png
CPU 执行了两个数相加,然后写入内存。
刚才过程 人工切换 CPU 的状态,取指令 - 解码 -执行。
CPU 真实切换状态的是 “时钟”,负责 管理 CPU 的节奏。
时钟:以精确的间隔触发点信号,控制单元利用这个信号,推荐CPU内部的操作。 确保按照步骤进行。
不能太快,就是电也需要一定时间传输。
CPU “取指令-解码-执行” 的速度 叫“时钟速度”,单位是-赫兹,标识频率单位。
1 赫兹 = 1秒 一个周期
前面的 4个指令,读取-读取-相加-存储,时钟速度大概是0.003 赫兹
一个指令 3步,
4 x 3/3600 = 0.003
还是 1/3600 = 0.0027 约等于 0.003
第一个单芯片CPU ,Intel 4004
1971 发布的4位CPU
时钟速度 740 赫兹,每秒74万次。
感觉很快了,但和现在处理器相比 不值一提。
1兆赫兹 = 1秒 1百万个时钟周期
现在的手机电脑都是几千兆赫兹。1秒 10亿次的时钟周期。
架构:
image.png
计算机超频
修改时钟速度,加快CPU 的速度。
芯片厂商给CPU 留有余地,可以接受一点 超频,但超频过多会让CPU 过热, 或产生乱码,因为信号跟不上时钟。
image.png
很少有人说降频,但其实降频很有用,有时候没不要让CPU 全速运行。
用户走开 ,或跑性能较低的程序,CPU 降低可以省很多电。
省电:对手机和笔记本,用电池的很重要。
为了省电,现在处理器根据需求,会加快和减慢时钟速度 -- 动态调整频率。
加上时钟CPU 才是完整的,可以放入盒子成一个独立组件。
新的抽象:
CPU 和 RAM 通过地址线、数据线、允许读/写线 进线通信
虽然设计的CPU 是简化版的,但是提到的很多机制,依然存在于现代的处理器里面。
下次讲 加强CPU ,给他它扩展更多指令,开始讲软件。