1.找到数据的指针。(指针可能会存放在寄存器中,所以这一步就已经包括寄存器的全部工作了)
2.将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址转换成实际的物理地址。
3.物理地址送往内存控制器(Memory Controller)。由内存控制器找出该地址在哪一根内存插槽上。
4.确认数据在哪一个内存块上,从该块读取数据
5.数据先送回内存控制器,再送回CPU,然后开始使用。
现在的CPU一般有3级缓存架构(后面会讲到),为什么需要CPU Cache呢?因为CPU震荡的频率太快了,快到主存跟不上了。这样在处理器时钟周期内,CPU常常要等待主存,浪费资源。所以Cache的出现,是为了缓解CPU和内存之间速度的匹配问题
带有CPU Cache的CPU执行计算的流程:
1.将程序和数据加载到主内存中。
2.将指令和数据加载到CPU Cache。
3.CPU执行指令,将结果写到CPU Cache。
4.CPU Cache写回到主内存中。
CPU Cache的意义在何处?
1.时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问。
2.空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能会被访问。
在CPU访问存储设备时,无论是存取数据或者是存取指令,都趋于聚集在一片连续的区域中,被称为局部性原理。
说到这里,我要说一个协议,CPU多级缓存一致性协议(MESI)。这个协议用于保证多个CPU Cache之间缓存共享数据的一致性。我的电脑就有CPU三级缓存,后面会详细介绍CPU三级缓存。
在CPU里面,缓存是以缓存行(Cache line)的形式存在。Cache line缓存存储数据的单元,每个Cache line有4种状态,分别是Modified(修改)、Exclusive(独占)、Shared(共享)、Invaild(无效)。一个Cache line有64Byte(字节,一个字节等于8bit)
4种状态详细说明如下
对于M和E状态而言总是精确的,它们和该缓存行的真正状态是一致的,而S状态可能是非一致的。如果一个缓存将处于S状态的Cache line作废了,而另一个缓存实际上独享了该Cache line,但该缓存却不会将该Cache line设置为E状态。
这是因为其他缓存不会广播它们作废该Cache line的通知,同样由于缓存并没有保存该Cache line的Copy数量,即便有这种通知也无法确定自己是否已经独享了该缓存行。
可以看出E状态是一种投机性优化。如果一个CPU想修改一个处于S状态的Cache line,总线事务需要将所有Cache line的Copy变成Invalid状态,而修改E状态的缓存不需要使用到总线事务。
关于CPU的计算机基础知识
存储单元是以字节为单位的,1B=8b 1KB=1024B 1MB=1024KB 1GB=1024MB
2^32 = 4GB 2^64=1800万TB
比如64位的操作系统只是字节的64位,数据总线是64根,真正决定内存大小的是地址总线的数目,即寻址空间。
数据总线:
1.是CPU与内存或者其他器件之间的数据传送的通道。
2.数据总线的宽度决定了CPU和外界的数据传送速度。
3.每条传输线一次只能传输1位二进制数据,比如32位操作系统,32根数据线一次可传送32位二进制数据,也就是4个字节。
4.数据总线是数据线数量之和。
地址总线:
1.CPU是通过地址总线来执行存储单元的。
2.地址总线决定了CPU所能访问的最大内存空间大小。比如32位操作系统有32根地址线,那么CPU就能访问2^32=4GB存储单元。
3.地址总线是地址线数量之和。
控制总线:
1.CPU通过控制总线对外部器件进行控制。
2.控制总线的宽度决定了CPU对外部器件中的控制能力。
3.控制总线是控制线数量之和。
来总结一波,每个CPU芯片都有很多管脚,这些管脚和总线相连。也就是说这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能。
地址总线的宽度决定了CPU寻址能力。
数据总线的宽度决定了CPU与其他器件进行数据传送时一次数据传送量。
控制总线的宽度决定了CPU对系统中其他器件的控制能力。