计算机基础:CPU是如何执行程序的?

冯诺依曼模型

根据 冯诺依曼模型 的定义,最简单的计算机基本结构由5部分组成:控制器运算器存储器输入输出

在现代计算机中,控制器运算器都是内嵌在CPU中,而存储器通常指的是内存,输入输出则通常指的是键盘和显示器。

  • CPU有哪些组件?

    CPU通常由控制单元逻辑运算单元寄存器组成。

    • 控制单元:负责根据指令控制CPU工作,例如从内存中读取数据到寄存器,将寄存器中的两个数据进行加和运算等。
    • 逻辑运算单元:负责计算
    • 寄存器:包括 通用寄存器程序计数器指令寄存器
      1. 通用寄存器:用于存放需要运算的数据
      2. 程序计数器:用于存储下一个要执行指令的内存地址
      3. 指令寄存器:用于存放正在执行的指令
  • 明明有了内存为什么CPU还需要寄存器?

    因为CPU 从内存中读取数据的速度 与 直接从寄存器中读取数据的速度 差异是很大的!这是效率和造价等权衡下的层次化设计。

  • 内存扮演什么角色?

    在程序运行时,我们的 "程序本身" 和 "程序数据" 都是存储在 内存 中,这是一段连续的线性区域。
    一个基本的内存存储单位为 1字节(8bit), 每一个字节对应一个内存地址。

  • 总线扮演什么角色?

    总线是将 CPU内存、以及其他设备关联起来,负责他们之间的通信,总线可分为 3 种:地址总线数据总线控制总线

    • 地址总线,用于指定 CPU 将要操作的内存地址
    • 数据总线,用于读写内存的数据
    • 控制总线,用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后自然进行响应,这时也需要控制总线
    image.png

    当 CPU 要读写内存数据的时:

    • 首先要通过「地址总线」来指定内存的地址
    • 然后通过「控制总线」控制是读或写命令
    • 最后通过「数据总线」来传输数据

线路位宽 和 CPU位宽

  • 数据是如何通过线路传输的呢?线路位宽对效率有哪些影响?

    其实是通过操作电压,低电压表示 0,高压电压则表示 1。
    如果构造了"高低高"这样的信号,对应的二进制数据就是"101" ,十进制则表示"5"。

    如果只有一条线路,那么二进制数据"101"的需要传输3次,这样的效率通常是不可接受的。
    那怎么办呢?只要多条线路一起传输就好!

    32位CPU 的[数据总线]位宽通常是 32条,意味着一次性能从内存读取 4字节 的数据。
    32位CPU 的[地址总线]位宽通常是 32条36条, 意味着cpu最大的内存寻址能力是 2^32=4G2^40

  • CPU通常有 32位64位, 它们的差异是啥?

    这里的位指的是"位宽", 即CPU一次运算能计算的数据量。

    这里以32位CPU为例,32位CPU一次能计算4字节,能计算的最大整数 = 2^32 - 1 = 4294967295

    当然,这并不意味着32位计算机只能进行小于4294967295的计算!
    例如使用32位CPU进行加和2个64位大小的数字,CPU会先把原数字拆为高位低位2个数字,先进行低位数字加和,算出进位,然后再进行高位数字加和,再加上低位数字加和的进位,最后拼接得到结果。

程序执行的基本过程

程序实际上是一条一条指令,所以程序的运行过程就是把每一条指令一步一步的执行起来,负责执行指令的就是 CPU 了。

  • CPU 执行程序是怎么样的?

    CPU 执行程序的过程如下:

    1. 第一步:
      • CPU读取 [程序计数器] 的值, 这里的值是下一个指令的内存地址。
      • CPU的 [控制单元] 操作 [地址总线] 指定需要访问的内存,并通知内存设备准备数据
      • 数据准备好后通过 [数据总线] 将指令数据传给 CPU
      • CPU 收到内存传来的数据后,将这个指令数据存入到 [指令寄存器]
    2. 第二步:
      • [程序计数器] 的值自增,表示指向下一条指令。这个自增的大小,由 CPU 的位宽决定,比如 32 位的 CPU,指令是 4 个字节,需要 4 个内存地址存放,因此「程序计数器」的值会自增 4;
    3. 第三步:
      • CPU 分析 [指令寄存器] 中的指令,确定指令的类型和参数
      • 如果是计算类型的指令,就把指令交给 [逻辑运算单元] 运算
      • 如果是存储类型的指令,则交由 [控制单元] 执行

    简单总结一下就是,一个程序执行的时候,CPU 会根据程序计数器里的内存地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。

    CPU 从程序计数器读取指令、到执行、再到下一条指令,这个过程会不断循环,直到程序执行结束,这个不断循环的过程被称为 CPU 的指令周期。


参考: CPU 是如何执行程序的?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容