一、存储层次结构

存储器的速度跟不上处理器的速度是制约计算机性能的一个重要因素。目前存储器的设计是容量、速度和价格的一个折衷,三者之间存在如下的几个关系:

  • 存取时间越快,每一个“位”的价格越高。
  • 容量越大,每一个“位”的价格越低。
  • 容量越大,存取速度越慢。

设计者通常希望使用能够提供大容量存储的存储器技术。但是为满足性能要求,又需要使用昂贵的、容量相对比较小而具有快速存取时间的存储器。

这个难题的一个解决办法是计算机中不使用单一的存储组件,使用存储器的层次结构。如下图所示,从上到下可以看出几个特点:a)每一个“位”的价格递减;b)容量递增;c)存取时间递增;d)处理器访问存储器的频率递减

                                      计算机系统概述(3)存储

这种结构中,容量大、价格低的慢速存储器作为容量小、价格昂贵的快速存储器的后备,可以通过减少慢速存储器的访问次数,将访问频率高的文件存放快速存储器中减少计算机平均存取时间。说明如下:

假设现在计算机系统中存取两级存储器,第一级存储器容量为1 000个字节,存取时间为0.1μs;第二级存储器包含100 000个字节,存取时间为1μs。假如需要存取第一级存储器中的一个字节,则处理器可直接存取此字节;如果这个字节位于第二级存储器,则此字节首先需要转移到第一级存储器中,然后再由处理器存取。为简单起见,我们忽略了处理器用于确定这个字节是在第一级存储器还是在第二级存储器所需的时间。图1.15 给出了反映这种模型的一般曲线形状。此图表示了二级存储器的平均存取时间是命中率H的函数,H 定义为对较快存储器(如高速缓存)的访问次数与对所有存储器的访问次数的比值,计算机系统概述(3)存储 是访问第一级存储器的存取时间,计算机系统概述(3)存储 是访问第二级存储器的存取时间。可以发现,当第一级存储器的存取次数所占比例较高时,总的平均存取时间更接近于第一级存储器的存取时间而不是第二级存储器的存取时间。例如,假设有95%的存储器存取( H = 0.95 )发生在高速缓存中,则访问一个字节的平均存取时间可表示为:计算机系统概述(3)存储

                                        计算机系统概述(3)存储

由图1.14 的存储器的层次结构可以可以看出,越往上存储器的访问频率越高,这里存在访问的局部性原理:在执行程序期间,处理器的指令访存和数据访存呈现“簇”状(指一组数据集合)。程序中包含许多迭代循环和子程序,一旦程序进人一个循环或子程序执行,就会重复访问一个小范围的指令集合。同理,对表和数组的操作也涉及存取一“簇”数据。在较短的时间内,处理器主要访问存储器中固定的“簇”。因此,可以通过层次组织数据,使得随着组织层次的递减,对各层次的访问比例也依次递减。例如上面的二级存储器的例子,让第二级存储器包含所有的指令和数据,程序当前的访问“簇”暂时存放在第一级存储器中。有时第一级存储器中的某个簇要换出到第二级存储器中,以便为新的“簇”进人第一级存储器让出空间。这样平均下来,大多数存储访问是对第一级存储器中的指令和数据的访问。

二、高速缓存

长期以来,由于处理器和内存的速度不匹配,这个限制已经成为很严重的问题,而且处理器速度的提高一直快于存储器访间速度的提高。理想情况下,内存的构造技术可以采用与处理器中的寄存器相同的构造技术,这样主存的存储周期可以跟得上处理器周期。但这样成本太高,解决的方法是利用局部性原理,即在处理器和内存之间提供一个容量小而速度快的存储器,称做高速缓存。高速缓存可以说是访问速度最快的存储器了。

                     计算机系统概述(3)存储

上图中有一个相对容量大而速度比较慢的内存和一个容量较小且速度较快的高速缓存,高速缓存包含一部分内存数据的副本。当处理器试图读取存储器中的一个字节或字时,要进行一次检查以确定这个字节或字是否在高速缓存中。如果在,该字节或字从高速缓存传递给处理器;如果不在,则由固定数目的字节组成的一块内存数据先被读入高速缓存,然后该字节或字从高速缓存传递给处理器。由于访问局部性现象的存在,当一块数据存入高速缓存以满足一次存储器访问时,很可能紧接着的多次访问的数据是该块中的其他字节。过程流程图如下所示。

                              计算机系统概述(3)存储

高速缓存与内存之间数据的转移以为单位,假设内存由 计算机系统概述(3)存储 个 字组成,每块由 k 个字组成,则一共存在 计算机系统概述(3)存储 个块。高速缓存有 C 个槽,每个槽对应内存中的块,由 k 个字组成。其中 计算机系统概述(3)存储,每个槽都有一个标签以识别当前高速缓存中存储的是内存中的那一块。当一个新块被读入高速缓存中时,由映射函数确定这个块将占据哪个高速缓存单元。读入新块,可能会有块被替换出高速缓存。替换方法应该能够尽量减小替换出的块在不久的将来还会被访问的可能性。映射函数设计得越灵活,就有更大的余地来设计出可以增大命中率的替换算法。最常使用的策略是最近最少被使用策略,当然标识最近最少被使用需要硬件的支持。

                     计算机系统概述(3)存储

还有一种情况就是高速缓存中的内容被修改,需要写回内存。写策略规定何时写入内存。一种极端情况是每当块被更新后就发生写操作;而另一种极端情况是只有当块被替换时才发生写操作。后一种策略减少了存储器写操作的次数,但是使内存处于一种过时的状态,这会妨碍多处理器操作以及I/O模块的直接内存存取。

相关文章:

猜你喜欢
  • 2021-08-24
  • 2021-12-03
相关资源
相似解决方案