3、速度,通常用访问周期T(又称存取周期、存储周期、存取时间等)表示。

    存储系统的访问周期与命中率H的关系非常大。

    命中率:可以简单地定义为在M1存储器中访问到的概率,它一般用模拟实验的方法得到。选择一组有代表性的程序,在程序执行过程中分别统计对M1存储器的访问次数N1和对M2存储器的访问次数N2,然后代入下面的(3-1)关系式计算。

(3-1)

    整个存储系统的访问周期可以用M1和M2两个存储器的访问周期T1,T2和命中率H来表示:

T=H·T1+(1-H)·T2
(3-2)
    
    当命中率H→1时,T→T1,即存储系统的访问周期T接近于速度比较快的M1存储器的访问周期T1。


    假设存储系统的访问效率为:
(3-3)

    访问效率越高,说明存储系统的速度与相对比较快的那个存储器的速度就越接近,这正是我们所希望的。把(3-2)代入(3-3)得到:


    从这个关系式看到,存储系统的访问效率主要与命中率和构成存储系统的两级存储器的速度之比有关。
    因此,可以得出这样的结论:如果要使存储系统的速度与相对比较快的那个存储器的速度接近,有两条途径,一条提高命中率H,另一条是使构成存储系统的两个存储器的速度不要相差太大。
    对于虚拟存储系统,由于两级存储器的速度相差得特别悬殊, 。如果要使访问效率e比较高(如e=0.9),需要有极高得命中率H

    计算得H≈0.999999

    磁盘在物理上是以块为单位(每块512个字节)访问的,在逻辑上通常以1KB以上为单位访问。虽然磁盘存储器的寻址时间很长,但当磁头找到要访问的数据块之后,数据的传输速率还是相当高的。因此,当不命中时,通过操作系统的系统调用,把将要使用的一大批程序和数据都调入主存储器,使得在以后的几万次,乃至几十万次以上的对虚拟存储系统的访问,都能在主存储器中命中。当然,这要求主存储器的容量比较大,能够一次装入比较多的程序和数据,而且,以前装入的程序和数据要能够比较长时间的保存下来,并且能多次使用。这样,尽管两级存储器的速度相差得特别悬殊,一次不命中需要化费比较长的时间来进行调度,然而,由于命中率特别高,整个虚拟存储系统的访问效率还是很高的。
    对于Cache存储系统。由于目前CPU与主存储器的速度相差在两个数量级,如果只用一级Cache,则要求命中率H≈0.999,这实际上是做不到的。通常要采用两级或三级Cache,再加上CPU内部的一些缓冲存储器,如通用寄存器等来提高数据的重复利用率,使得每两级之间的速度比为5左右。例如,取。若要求访问效率e>0.9,则需要命中率H>0.972,这实际上也很难做到。因此,还必须采取其它措施。
     实践证明,采用预取技术可以大幅度提高命中率H。

    预取技术:提前将所需要的数据取出来,在使用时已经可用,具体方法就是在不命中时,当数据从主存储器中取出送往CPU的同时,把主存储器相邻几个单元中的数据(称为一个数据块)都取出来送入Cache中。

    根据程序的局部性原理,CPU以后再对Cache存储系统访问时,命中率就会提高。不难理解有下面的关系式:

    其中n为Cache的块大小与数据重复使用次数的乘积,H是原来的命中率,H'是采用预取技术之后的命中率。

    Cache的块大小一般在2至16个字,预取到Cache中的数据的重复利用率通常大于5次。如果取Cache的块大小为4个字,预取到Cache中的数据的重复利用率为5次,Cache存储系统原来的命中率为H=0.8,则有:n=4×5=20,采用预取技术之后,命中率提高到:

    如果构成Cache存储系统的两级存储器的速度之比为5,则这个Cache存储系统的访问效率e=0.96。