美文网首页
7 | 中央处理器(CPU)

7 | 中央处理器(CPU)

作者: 遗忘的残酷 | 来源:发表于2020-05-20 17:56 被阅读0次

    计算机的心脏是 “中央处理器” ,简称 “CPU”。

    程序有一个个 “操作” 组成,这些操作叫 “指令”。
    因为它们 “指示” 计算机去要做什么。

    • 数学指令,加、减,
      CPU 让ALU 进行数学运算。

    • 内存指令
      CPU 和内存通信,读写值。

    重点放在功能,而不是一个根线具体怎么连,一条线链接两个组件,这条线只是所有必须电路的一个抽象,这种高层次视角---叫 “微体系架构”。

    如何操作的?

    首先,要内存,四个寄存器

    image.png
    • 4个寄存器,存储临时数据,操作数据。

    数据是以二进制存在内存里,程序也可以存在内存里。

    • 给CPU 所有的指令分配一个ID。
      前四位:操作码
      后面的代表数据来自哪里-寄存器或者内存地址。
    image.png
    • 还需要2个寄存器
    1. 追踪程序运行到哪里了。
      叫 “指令地址寄存器”- 当前指令的内存地址。
      2.另一个寄存器存当前指令-叫“指令寄存器”。
    • 启动计算机 都从0 开始。


      image.png

    RAM 存放了一个程序,测试

    • 取指令阶段,负责拿到指令。
      指令地址寄存器 连到RAM ,
      寄存器的值为0 ,RAM 返回地址0 的值。
      0010 1110 ---》 复制到 指令寄存器
    image.png
    • 解密阶段 :指令拿到 ,搞清楚什么指令,才能执行。

    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个寄存器。

    1. 用检测是否 LOAD A 的指令电路,启用寄存器A 的 “允许写入线”。
    image.png
    1. 就把 RAM地址 14 的值,就写进了寄存器 A。
    2. 指令完成,关闭所有电路。
    3. 去拿下一条指令。
    4. 把“指令地址寄存器 ” + 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

    image.png

    最后一件事,把指令寄存器+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 才是完整的,可以放入盒子成一个独立组件。

    新的抽象:

    image.png

    CPU 和 RAM 通过地址线、数据线、允许读/写线 进线通信

    image.png

    虽然设计的CPU 是简化版的,但是提到的很多机制,依然存在于现代的处理器里面。

    下次讲 加强CPU ,给他它扩展更多指令,开始讲软件。

    相关文章

      网友评论

          本文标题:7 | 中央处理器(CPU)

          本文链接:https://www.haomeiwen.com/subject/fjduohtx.html