# 5.6.1 存储系统的层次结构
为了解决容量、速度和价格之间的矛盾,把各种不同存储容量,不同存取速度,不同价格的存储器,按一定的体系结构组织起来,使所存放的程序和数据按层次分布在各存储器中,形成一多层次的存储系统。
1.Cache-主存层次
在CPU和主存之间设置了一级容量不大,但速度很高的高速缓冲存储器(Cache),简称高速缓存。
从整体看,Cache-主存层次的存取速度接近于Cache的存取速度,但容量是主存的,每位价格接近于主存的每位平均价格。
解决了高速度和低成本之间的矛盾。 这个层次完全由硬件实现,对用户是透明的。
2.主-辅存层次
主-辅存层次通过附加的硬件及存储管理软件来控制。
1.高速缓冲存储器的工作原理
1.程序访问的局部性:时间局部性; 空间局部性
时间局部性:时间上的局部性指的是当前正在使用的信息很可能是后面立刻还要使用的信息,原因是程序循环(重复执行一段代码)
空间局部性:空间上的局部性是指在一个较短的时间间隔内,如果一个单元被访问,则该单元邻近的单元也可能很快被访问。原因是程序的连续存放以及顺序执行,程序中的数组操作。
2.高速缓存的工作原理:
Cache采用SRAM器件,构成小容量高速存储器。
把程序中经常使用的部分存放在Cache中。
使CPU的访存操作大多数在Cache中命中,从而使程序的执行速度大大提高。
# 5.7.2 Cache的读写操作
1.Cache的读操作
当CPU发出读请求时,如果Cache命中,就直接对Cache进行读操作,不主存无关;如果Cache不命中,则仍需访问主存,幵把该块信息一次从主存调入Cache内。
2.Cache的写操作
当CPU发出写请求时,如果Cache命中,有可能会遇到Cache不主存中的内容不一致的问题,例如,由于CPU写Cache,把Cache某单元中的内容从X修改为X’,而主存对应单元中的内容仍然是X,没有改变,所以如果Cache命中,需要进行一定的写处理,处理的方法有:写直达法和写回法。
# 5.7.3 地址映像
高速缓冲存储器的地址映象方法:应用某种函数把主存地址映象为Cache地址,称为地址映象。
⑴全相联映象、⑵直接映象 、⑶组相联映象
1.全相联映射
主存中任何一块均可定位于Cache中的任意一块,可提高命中率,但是硬件开销增加
地址格式:
Cache地址格式
主存地址格式
Cache的Tag内容:
- 主存中与该Cache数据块对应的数据块的块地址。
- 标记位数等于主存块号位数。
地址转换过程:
- 因为全相联映射的主存块可能映射在任何Cache块内,所以根据主存块号,不所有Cache块的标记进行比较,有相等的,说明命中 ,读出Cache块号访问Cache。
- 需要一个目录表来存放映射关系,其容量为Cache 的块数,字长等于Cache块的标记、Cache块号、有效位之和。
2.直接映射
映象规则:
- 式中:K为Cache的块号;I为主存的块号;2c为Cache块数。
- Tag内容是映射到该位置的主存块的主存地址中的区号,因为比较时只需确定映射的是哪一个区中的块。
地址格式:
Cache地址格式
主存地址格式
地址转换过程:
用程序中给出的主存地址中的块号找到Cache 中对应的块,读出块的Tag标记不主存地址给出的区号进行比较,按照以下几种情冴进行判断:
- 如果与主存地址给出的区号相等,且有效位为1,命中。
- 如果区号相等,有效位为0,失效(作废)。
- 区号不相等,有效位为0,Cache块为空,可以直接装入。
- 区号不相等,有效位为1,该块内容有用,写回后,替换。
3.组相联映射
映像规则:
- 将Cache空间分成大小相同的组,让主存中的一块直接映像装入Cache中对应组的任何一块位置上,即主存的块对应Cache的组,采用直接映像,Cache组内采用全相联映像
- J为Cache的组号,I为主存的块号,Q为Cache的组数
地址格式:
Cache地址格式
主存地址格式
Cache的目录表内容是Tag标记(主存区号‘),因为某一个Cache组中的内容可能来自任何一个区的特定块,确定了区号后,区内组号是一定的(因为块到组是直接映像),还需要确定放在Cache组内哪一块(因为组内是全相联映像)
# 5.6.4 替换算法
1.先进先出(FIFO)算法
2.近期最少使用(LRU)算法 :
- 每个Cache单元需要一个计数器跟踪最近访问的数据,每次访问的数据相应的计数器置为0;其余的计数器依次加1。替换最少使用的数据。
# 5.6.5 更新策略
1.写Cache命中时,如何保持Cache不主存中的内容一致?
⑴ 写直达法:每次信息从CPU写入Cache单元中时,也要写回相应的物理内存单元中 。
⑵ 写回法:即数据暂写入Cache,幵用标志将该块注明,等需要将该块替换回到主存时,才写回主存,也称标志交换方式。
2.写Cache不命中时:
(1)按写分配法:把信息写入主存,同时将该块信息装入Cache。
(2)不按写分配法:直接更新物理内存中的值,而不把值装入Cache