计算机结构
冯诺依曼结构
- ==一种将程序指令存和数据一起存储的计算机结构。 该结构隐约指导了将储存装置与中央处理器分开的概念==
设计
- CA(Central Arithmetical)
- 算数单元,当时的计算机主要面向复杂的数值计算,ENIAC/EDVAC的设计初衷都是是为了计算弹道,早期计算机大部分都是为了完成复杂计算而设计制造。
- CC(Central Control)
- 逻辑控制单元,指令的执行,异常的处理,I/O处理等,除了计算以外的所有事情都需要处理,这些都交给了逻辑控制单元。
- M(Memory)
- 比如多级计算需要存储中间数据,执行计算用到的程序,算数单元获取的计算数据等等都需要一个设备来存储,一个内存设备是必要的。
- 为了完成计算,必须将外部数据输入到计算机内部,以及计算完成后将结果输出,因此还需要两个设备,即输入设备和输出设备,以及记录这些输入/输出数据的存储设备。
[!important] 因为冯诺依曼架构数据和程序放置在一起,使得可能出现缓冲区溢出的攻击行为,通过溢出的缓冲区更改程序的执行
哈弗结构
- ==将程序指令和数据分开存储==,减轻程序运行时的访存瓶颈。
混合结构
- 程序和数据地址空间隔离,但可以从程序地址空间读取数据
- 程序和数据地址共享,将程序和数据的缓存分开
当代处理器中将存储单元分为两层,第一层接近CC(控制单元)的存储单元中,将指令和数据存储分开,但是地址空间并不隔离(即程序/数据缓存),与哈佛结构的最大不同就是程序和数据地址空间共用,第二层存储单元为程序和数据共用,采用冯诺伊曼结构,只有在缓存失效时才会访问第二层,不能并行。在一定程度上解决了冯诺伊曼瓶颈,同时兼顾了存储利用率的最大化。
区别
- 冯诺依曼结构有一个存储器,指令和数据存储在该存储器,且只有一条总线用于存取数据。
- 哈佛结构有两个存储器,指令和数据分别存储在指令存储器和数据存储器,有两条总线用于存取数据。可以同时访问指令和数据,效率更高,但是成本更高,开发成本更高
目前
- 大部分单片机使用哈弗结构
- 大部分嵌入式/商用处理器如arm/x86等在L2/L3缓存、内存这一段使用冯诺依曼
你不会为一台电脑购买2倍内存条,一个分给指令存储,一个分给数据存储 操作系统要设计2套内存管理,一套管理指令内存,一套管理数据存储 程序员不用为某个数据到底应该存储在指令内存还是数据内存中而争论
[!quote] 实际上在内存里,指令和数据是在一起的。而在CPU内的缓存中,还是会区分指令缓存和数据缓存,最终执行的时候,指令和数据是从两个不同的地方出来的。你可以理解为在CPU外部,采用的是冯诺依曼模型,而在CPU内部用的是哈佛结构。
大部分的DSP都没有缓存,因而直接就是哈佛结构。
哈佛结构设计复杂,但效率高。冯诺依曼结构则比较简单,但也比较慢。CPU厂商为了提高处理速度,在CPU内增加了高速缓存。也基于同样的目的,区分了指令缓存和数据缓存。
从沙子到cpu
沙子
- 主要成分是SiO2(二氧化硅)
半导体
- 是常温下导电性能介于导体与绝缘体之间的材料。硅是种常见的半导体,硅本身不带电荷(因为正好4个平衡)
- 半导体的关键,是可变性,能在绝缘体与导体之间转化。抽象一点,就是具备对立转化的潜质,得益于电压电场的加持,半导体完成了第二轮对立转化
二极管
- 正向导通,反向阻断
- 向硅中掺杂如N和P,分为两边,使得带不同电荷,如果电流方向和内建电场相同,嘛呢就是导体,不同就变成绝缘体,依赖了硅本身是报到题不带电荷,掺杂电荷形成内部电场的特性
- P是提供电子的,N是接受电子的
三极管
- 使用P结和N结构成
状态
截止状态
放大状态
饱和状态
功能特性
作用
- 三极管在电路中最常用作开关。用作开关时的工作原理:
- 基极是控制端,根据三极管种类是NPN还是PNP,来给基极高电平或者低电平,那么三极管的CE两极就会导通。三极管的工作原理类似于水龙头控制水管通断。
- 相当于使用Ib控制开关,开了之后,电流就是根据Ib决定Ic电流,饱和之后Ib就不变了
- 晶体三极管具有电流放大作用,其实质是三极管能以基极电流微小的变化量来控制集电极电流较大的变化量
门电路
- 使用三极管构成简单的门电路,使用门电路就可以构成加法器
触发器
- 根据输入决定下一阶段的输出,下一阶段是指脉冲的时间,在状态机中经常使用,底层使用门电路.触发器的转移特性决定了它可以很好作为cpu流水线的底层,也是异步电路的基础
- 实际上就是多个锁存器的组装
CPU
- 计算机执行指令的过程可以分为以下三个步骤:
- Fetch(取指),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。
- Decode(译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。
- Execute(执行指令),也就是实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。
周期
时钟周期
- 又称振荡周期,是处理操作的最基本单位。
- 这个是晶振的周期经过放大之后得到的时钟发生器的频率
- 这个周期是流水线的周期,嘀嗒一下状态机向前推进一个,因此周期越短,执行越快,但是发热也越厉害
指令周期
- 取出并执行一条指令的时间。
CPU周期
- 一条指令执行过程被划分为若干阶段,每一阶段完成所需时间。
流水线
- 取指:将指令从存储器中读取出来的过程。
- 译码:从存储器中取出的指令进行翻译的过程.经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File, Regfile )中将操作数读出。
- 执行:指令执行是指对指令进行真正运算的过程
- 访存:存储器访问指令将数据从存储器中读出,或者写入存储器的过程。
- 写回:将指令执行的结果写回通用寄存器组的过程
- 因为一条指令的多个阶段,因此为了提高计算速率,将每个组件和步骤都组装成时序异步电路,这部分的状态转移用的就是触发器,类似
总结
- 通过沙子提炼Si得到半导体
- 半导体加上PN得到二极管和三极管
- 二极管和三极管组合得到基础的门电路(与或非门)
- 门电路构成了锁存器,锁存器有构成了触发器
- 触发器构成了流水线,流水线周期是时钟周期
[!tip] 参考 https://zhuanlan.zhihu.com/p/144345863 https://zhuanlan.zhihu.com/p/519072786 深入了解计算机系统