一、冯诺依曼模型
定义计算机基本结构为5个部分:存储器、运算器、控制器、输入设备、输出设备。
运算器和控制器在中央处理器(CPU)里,存储器就是常见的内存,输入输出设备就是计算机外接的设备,比如键盘是输入设备,显示器是输出设备。
1、内存
程序和数据存储在内存里,存储数据的基本单位是字节,1字节等于8位,每个字节对应一个内存地址。
2、中央处理器(CPU)
32位和64位表示位宽,表示CPU一次可以计算的数据量
- 32位CPU一次计算4个字节
- 64位CPU一次计算8个字节
2.1 寄存器
- 通用寄存器:用来存放需要进行运算的数据
- 程序计数器:存储CPU下一条指令的内存地址
- 指令寄存器:存放当前正在执行的指令
2.2 控制单元
负责控制CPU工作
2.3 逻辑运算单元
负责计算
2.4 CPU cache
在CPU里,分为L1、L2、L3 这样的三层高速缓存
3、总线
用于CPU和内存以及其它设备之间的通信
- 地址总线:用于指定CPU将要操作的内存地址
- 数据总线:用于读写内存的数据
- 控制总线:用于发送和接收信号,比如中断、设备复位等信号
4、输入、输出设备
输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。
二、CPU执行程序的过程
第一步:CPU读取程序计数器的值,然后CPU的控制单元操作地址总线指定需要访问的内存地址,接着通知内存设备准备数据,数据准备好后通过数据总线将指令数据传给CPU,CPU收到后将指令数据保存到指令寄存器。
第二步:程序计数器的值自增,表示下一条指令。
第三步:CPU分析指令寄存器中的指令,确定指令的类型和参数,如果是计算类型的指令就把指令交给逻辑运算单元运算,如果是存储类型的指令,则交由控制单元执行。
三、存储器的层次结构
1、寄存器
在CPU里,存储正在运算的数据
2、CPU cacle
在CPU里,分为L1、L2、L3 这样的三层高速缓存,L1离CPU最近访问速度最快,L3最慢。是SRAM静态随机存储器芯片,只要有电数据就可以保持存在,断电就失去数据。
3、内存
是DRAM动态随机存储器,比SRAM容量大,造价便宜。需要定时刷新电容才能保证数据不会丢失。
4、SSD/HDD硬盘
SSD就是固体硬盘,断电后数据还是存在的。HDD是机械硬盘。
四、CPU缓存一致性
如果数据写入 Cache 之后,内存与 Cache 相对应的数据将会不同,这种情况下 Cache 和内存数据都不一致了,于是我们肯定是要把 Cache 中的数据同步到内存里的。将cache写回内存的两种策略:
1、写直达
把数据同时写回内存和cache:
- 如果数据已经在 Cache 里面,先将数据更新到 Cache 里面,再写入到内存里面;
- 如果数据没有在 Cache 里面,就直接把数据更新到内存里面。
写直达的问题是无论数据是否在cache里,每次写操作都会写回到内存,这样会花费大量时间。
2、写回
当发生写操作时,新的数据只写到cacle里,只有当修改过的cache被替换的时候才写回内存。这样减少了数据写回内存的频率。
CPU是多核的,每个CPU都有独立的cache,如何保证多核CPU的缓存一致性?
要解决这一问题,就需要一种机制,来同步两个不同核心里面的缓存数据。要实现的这个机制的话,要保证做到下面这 2 点:
- 第一点,某个 CPU 核心里的 Cache 数据更新时,必须要传播到其他核心的 Cache,这个称为写传播(Write Propagation);
- 第二点,某个 CPU 核心里对数据的操作顺序,必须在其他核心看起来顺序是一样的,这个称为事务的串行化(Transaction Serialization)。
写传播的实现方法:
基于总线嗅探机制的协议:MESI协议
MESI 协议,是已修改、独占、共享、已失效这四个状态的英文缩写的组合。整个 MSI 状态的变更,则是根据来自本地 CPU 核心的请求,或者来自其他 CPU 核心通过总线传输过来的请求,从而构成一个流动的状态机。另外,对于在「已修改」或者「独占」状态的 Cache Line,修改更新其数据不需要发送广播给其他 CPU 核心。
标签:cache,操作系统,Cache,笔记,硬件,指令,内存,数据,CPU From: https://www.cnblogs.com/coooookie/p/17660502.html