![]() |
|
第七章 存储体系
本章重点是页式虚拟存储器映象及地址变换过程;LRU,FIFO的替换算法;LRU的堆栈分析过程;Cache组相联地址映象和LRU块替换;虚存,Cache的性能分析,要求达到综合应用的水平。本章是重点章。要求掌握的基本概念有:LRU,FIFO ,全相联、直接映象,组相联,快表、命中率,地址变换,页式,段式,段页式管理,虚拟存储器,高速缓存等等。
一、访存的局部性原理(识记)
计算机对存储器的要求是高速度、大容量、低价格。
从大量的统计中得到的一个规律是,程序中对于存储空间90%的访问局限于存储空间的10%的区域中,而另外10%的访问则分布在存储空间的其余90%的区域中。这就是通常说的局部性原理。访存的局部性规律包括两个方面:
1、时间局部性:如果一个存储项被访问,则可能该项会很快被再次访问。
2、空间局部性:如果一个存储项被访问,则该项及其邻近的项也可能很快被访问。
人们为了解决存储器容量和速度的矛盾,应用了访问局部性原理,把存储体系设计成为层次化的结构以满足使用要求。在这个层次化存储系统中,一般由寄存器、高速缓存(Cache)、主存(内存)、外存(硬盘等)组成。其中寄存器是最高层次的存储部件,容量最小,速度最快。寄存器对程序员是不透明的,对它的访问需按寄存器名访问而不是按地址。
二、存储体系构成的基本原理(简单应用)
由于存储体系采用了分层的结构,因此存储体系中各层次之间的数据访问如何的管理就显得相当重要。一般都把管理功能分布在各个层次上,每个层次的存储管理控制器控制这一层和与之相关一层的数据访问。层间传递数据的单位称为块或页。
命中率指命中的访问次数和总访问次数之比、失效率是失效的访问次数和总访问次数之比。命中时间包括判断是否命中所需时间和对上层存储器访存所需时间,失效时间则包括对下层存储器的访问时间和将下层存储器中数据调入上层存储器所需时间(传输时间)
存储器设计的目标是降低平均访问时间而不是单单提高命中率。也就是说层次化存储器的速度性能指标是访存的平均时间。另外还有带宽(频宽)、存储周期等指标。
平均访问时间=命中时间+失效时间×失效率
层次化存储体系必须解决的三个问题:
1.定位问题:数据块在较高层存储器中存放在哪个位置?怎样确定并且找到该块?这是块的标识和寻址问题。一般用查表法来映象块或页的定位、标识和寻址。
2.替换问题:不命中时,要从下层调入上层数据块,若上层满,则此时如何将上层中的数据置换出去?什么方法好。这就是替换策略的问题。
3.更新问题:在需要写访问时,何时将上层中得到的结果写到下层存储器中? 因为上层数据在经过运算后比下层的数据新,则这种写的方式就是为了解决上下层数据一致性的问题。
本章的内容就是围绕着这三个问题的解决而展开的。解决好这三个问题,层次化存储体系管理的主要问题也就解决了。
三、高速缓冲存储器(Cache)(综合应用)
这一节的内容就是讲述关于Cache高速缓存如何解决上述三个问题展开的内容,其他各层的管理基本上与它的解决办法类似。
高速缓存是位于CPU和主存之间的高层存储子系统。采用高速缓存的主要目的是提高存储器的平均访问速度,从而使存储器的速度也CPU的速度相匹配。
1、Cache的基本工作原理和结构
Cache通常由两部分组成,块表和快速存储器。Cache的基本结构可见教材图7.4,其工作原理是:处理机按主存地址访问存储器,存储器地址的高段通过主存-Cache地址映象机构借助查表判定该地址的存储单元是否在Cache中,如果在,则Cache命中,按Cache地址访问Cache.否则,Cache不命中,则需要访问主存,并从主存中调入相应数据块到Cache中,若Cache中已写满,则要按某种算法将Cache中的某一块替换出去,并修改有关的地址映象关系。
从这个工作原理我们可以看出,它已经涉及到了两个问题。首先是定位、然后是替换的问题。
Cache的存在对程序员是透明的。其地址变换和数据块的替换算法均由硬件实现。通常Cache被集成到CPU内以提高访问速度。
2.下面就要展开来讲述Cache中是如何进行地址映象和变换的。(综合应用)
因为处理机访问都是按主存地址访问的,而Cache的空间远小于主存,如何知道这一次的访问内容是不是在Cache中,在Cache中的哪一个位置呢? 这就需要地址映象,即把主存中的地址映射成Cache中的地址。让Cache中一个存储块(空间)与主存中若干块相对应,如此,访问一个主存地址时,就可以对应地知道在cache中哪一个地址了。地址映象的方法有三种:直接映象、全相联映象和组相联映象。
直接映象就是将主存地址映象到Cache中的一个指定地址。任何时候,主存中存储单元的数据只能调入到Cache中的一个位置,这是固定的,若这个位置已有数据,则产生冲突,原来的块将无条件地被替换出去。
全相联映象就是任何主存地址可映象到任何Cache地址的方式。在这种方式下,主存中存储单元的数据可调入到Cache中的任意位置。只有在Cache中的块全部装满后才会出现块冲突。
组相联映象指的是将存储空间的页面分成若干组,各组之间的直接映象,而组内各块之间则是全相联映象。
下面将三种地址映象方式进行对比。
| 直接映象 | 全相联映象 | 组相联映象 | |
| 过程 | (1)主存地址分成区号、块号、块内地址 (2)在主存地址中截取与Cache地址对就部分作为Cache地址 (3)以块号为地址访问目录表读出区号与主存地址中区号比较 (4)若相等,命中 (5)若不相等,块失效,停止Cache访问。访主存,并调块 |
(1)主存地址分成主存块号和块内地址 (2)用主存块号同目录表相联比较 (3)若相同,则取出Cache块号,Cache块号与块内地址拼接成Cache地址,访问Cache (4)若无相同的,则产生缺块、调块 |
(1)主存地址分区号、组号、块号、块内地址 (2)用组号选出一组 (3)对该组用区号+块号全相联比较 (4)或找不到,则块失效 (5)若找到一样,则将读出的Cache块号与组号和块内地址拼接形成Cache地址。 |
| 目录表 | 长:Cache大小 宽:主存地址位-Cache地址位 |
长:Cache 大小 宽:(主存块号+Cache块号)位 主存块号位参与比较 |
长:2ncbCache大小 宽:(区号+2块号)位 (区号+块号)位参与与比较 |
| 优点 | (1)硬件省,目录表小,成本低 (2)访问Cache与访问区号表同时进行 |
(1)块冲突最低 (2)Cache空间利用率最高 |
集中全相联和直接映象的优点弥补他们的缺点 |
| 缺点 | (1)块冲突概率很大 (2)Cache空间利用率很低 |
(1)映象表太长 (2)查表速度慢 |
块冲突仍大于全相联 利用率低于全相联 目录表大于直接方式 |