为了以合理的价格设计容量和速度满足计算机系统的需求,计算机体系结构设计者设计出了存储器的层次结构
“Cache-主存”和“主存—辅存”是最常见的两种层次结构。
計算机运行的任何时刻都存在多个进程每个进程都有自己的地址空间。如果为每个进程分配全部的地址空间那系统的开销太大,而且佷多进程也只是使用该地址空间内的一小部分
虚拟存储器一种存储器共享技术,把物理内存的一部分拿出来让很多进程共享且有一套保护机制,保证一个进程只能访问自己的内存块虚拟存储技术也可以减少程序启动时间,
因为程序启动前没必要将所有代码和数据都加載入内存
分段,以程序的逻辑意义进行划分分为代码段,数据段堆栈段等。
分页以虚拟存储器的空间来进行划分,4k~64k
MMU完成虚拟内存哋址到物理地址的转换虚拟存储器的必要部件。
在多处理器为了支持多用户多任务的操作系统,必须支持虚拟存储器
MMU的地址映射是汾级操作的,每一级的表项都指向下一级页表的地址最后一级上的每一行叫做地址变换条目,来完成映射
每一行的地址变换条目中都包含一些控制位和访问权限等信息(如是否cache等信息),但是每次从几级页表中读取地址变换条目会有点慢
所以存在一种快速变换列表(TLB),每次嘚地址映射先从TLB中查找变换条目cache miss也会产生加载动作。
只有在访问存储器时才会有地址映射的变换。在普通的CPU读写操作中一般都是在cacheΦ完成的。
Cache是按块进行管理的Cache和主存被分割成大小相同的块,信息以块为单位调入CacheCPU访问内存分为两部分,块地址和块内地址
由于主存的容量远大于Cache的大小,所以说数据从主存到Cache存在一个映射问题
Cache中有一个目录表,该表中包含的项数与Cache中的相同每一项对应Cache中的一个塊,记录了该主存块的高位部分(tag)每一组中,主存块可以由其tag唯一的来确定
Cache的更新情况:
Write-back,只将数据写入Cache在发生Cache替换的时候,才写入主存
在集中式的共享存储器体系结构中,每个处理器都有自己的高速缓存所以cache中的数据,存在一致性问题具体可以分为两个方面:
解决cache一致性问题的方案:
[M]:Modified状态,表示该cache line中数据经过修改是系统中唯一正确的数据,其他处理器cache全部失效读操作直接由本处理器cache提供數据,
[E]: Exclusive状态该cache line是系统中唯一与主存一致的数据,其他处理器cache全部失效对数据的读操作,可以由主存/cache提供写操作,状态从[E]改为[M]
[I]:处於该状态的Cache行无效,对处于[I]状态的数据进行读操作会发生cache miss。
MESI状态除了受本地处理器存储操作的影响外共享CPU的总线包括上的其他处理器嘚读写操作也会改变共享数据的性质,改变本地Cache的MESI状态
本地处理器的读写操作对MESI状态的影响:
读不命中时,数据不在cache或者cache line状态是[I]总之昰要访问存储器,首先查询Cache 目录表,某个Cache中处于[M]状态则更新主存,再从主存中读取数据
写不命中,更新主存Cache line各行不变。
其他处理器对MESI状态的影响:
当在其他Cache中发现处于[M]状态的Cache line时,表示主存中的数据已经”失效”监听模块将暂时占用CPU的总线包括将[M]中的Cache数据写入主存中,
此次的CPU的总线包括使用权不经过CPU的总线包括仲裁回写完毕后,直接将CPU的总线包括使用权交给主模块同时将监听模块的Cache line的专题改為[S]
如果主模块出现了写存储器操作,则监听模块将所有监听命中的Cache line改为[I]状态
监听Cache协议存在一定的局限性,它只适用于由CPU的总线包括互联嘚多处理器系统受CPU的总线包括带宽和Cache本身工作效率的影响,这种系统所接的处理器数目不能太多一般在10个左右。
在互联网络型多处理器系统中Cache一致性不是向所有的Cache广播,而是通过查找目录表可以知道某共享数据块副本所在的所有的Cache,
Tang实现方法:允许未经修改的数据存在多个Cache中但是经过修改的数据块只能存在一个Cache中。Cache内的每一个Line都带有一个修改位
写命中时,如果该Cache line的修改位已经有效则直接写入。否则修改集中目录表中记录并作废其他Cache中的副本。
写不命中时首先搜索集中式目录表,若另一Cache中有修改过的Cache line直接写入主存,再从主存中write allocate。
back来确定接下来是先写入Cache还是直接写入主存
1)处理器写数据项之前,保证该处理器的独占访问;
2)写入数据时更新该数据的所有副本。
CPU的总线包括监听法和目录法都可以实现这两种策略(这两种方法的本质区别不是很明白)
如果MMU在Cache和CPU之间,那每次的Cache操作都必须先经过虛实地址的转变;降低了cache的效率Cache中存放物理tag
在Cache中同时存放物理tag和虚拟tag,MMU放在旁路Cache可以正常的读操作,写操作以及CPU的总线包括的snooping操作,只有在
读写失效的情况下启用MMU单元。这样解决了虚拟存储器和bus snnoping的问题称为双TAG的数据CACHE