一、冯诺依曼模型
冯诺依曼模型分为5个组成部分:
- 中央处理器(CPU)
- 内存
- 输⼊设备
- 输出设备
- 总线
CPU可以分为:控制单元,逻辑运算单元和寄存器。
其中,控制单元负责控制 CPU ⼯作,逻辑运算单元负责计算,⽽寄存器可以分为多种类,每种寄存器的功能⼜不尽相同。
寄存器又可以分为:指令寄存器,通用寄存器和程序计数器等
总线可以分为:控制总线,地址总线和数据总线。
地址总线传的是内存中的地址,数据总线传的是对应地址的内存数据,控制总线传的是控制信号,例如:中断。
二、CPU
32 位和 64 位 CPU 最主要区别在于⼀次能计算多少字节数据: 32位一次4字节。64位一次8字节,称为CPU位宽
CPU 的位宽越高,一次能读取的内存指令越多
CPU Cache 也在CPU里,分为L1,L2和L3。L1体积最小,离CPU最近
为什么CPU里有了内存还需要寄存器?
因很简单,因为内存离 CPU 太远了,⽽寄存器就在 CPU ⾥,还紧挨着控制单元和逻辑运算单元,⾃然计算时速度会很快。
说白了就是就近原则,离得近,办事效率快
二、寄存器
寄存器的分类的?
通⽤寄存器 ,⽤来存放需要进⾏运算的数据,⽐如需要进⾏加和运算的两个数据。
程序计数器 ,⽤来存储 CPU 要执⾏下⼀条指令「所在的内存地址」,注意不是存储了下⼀条要执⾏的指令,此时指令还在内存中,程序计数器只是存储了下⼀条指令的地址。
指令寄存器 ,⽤来存放程序计数器指向的指令,也就是指令本身,指令被执⾏完成之前,指令都存储在这⾥。
三、总线
总线的分类?
地址总线 ,⽤于指定 CPU 将要操作的内存地址;
数据总线 ,⽤于读写内存的数据;
控制总线 ,⽤于发送和接收信号,⽐如中断、设备复位等信号,CPU 收到信号后⾃然进⾏响应,这时也需要控制总线;
当 CPU 要读写内存数据的时候,⼀般需要通过两个总线,⾸先要通过「地址总线」来指定内存的地址;再通过「数据总线」来传输数据;一来一回
地址总线并不是只有一条,有多少条,线路就有多少位宽,如果地址总线只有 1 条,那⼀次只能操作 2 个内存地址,如果想要 CPU 操作 4G 的内存,那么就需要 32 条地址总线,因为 2 ^ 32 = 4G 。线路位宽就是32
CPU 的位宽最好不要⼩于线路位宽,因为 32位 CPU ⼀次最多只能操作 32 位宽的地址总线和数据总线。所以32 位 CPU 最⼤只能操作 4GB 内存,就算你装了 8 GB 内存条,也没⽤。地址总线传的慢,你CPU处理的再快也没用啊,数据跟不上
并不是说CPU的位宽,越高越好。如果计算的数额不超过 32 位数字的情况下,32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下,64 位的优势才能体现出来。
四、执行过程
第⼀步,CPU 读取「程序计数器」的值,这个值是指令的内存地址,然后 CPU 的「控 制单元」操作「地址总线」指定需要访问的内存地址,接着通知内存设备准备数据,数据 准备好后通过「数据总线」将指令数据传给 CPU,CPU 收到内存传来的数据后,将这个 指令数据存⼊到「指令寄存器」。 第⼆步,CPU 分析「指令寄存器」中的指令,确定指令的类型和参数,如果是计算类型 的指令,就把指令交给「逻辑运算单元」运算;如果是存储类型的指令,则交由「控制单 元」执⾏; 第三步,CPU 执⾏完指令后,「程序计数器」的值⾃增,表示指向下⼀条指令。这个⾃ 增的⼤⼩,由 CPU 的位宽决定,⽐如 32 位的 CPU,指令是 4 个字节,需要 4 个内存地 址存放,因此「程序计数器」的值会⾃增 4;