高速缓冲存储器Cache中所采用的主要技术及实现(二)

3)组相连地址映像

组相连地址映像方法是直接地址映像和全相连地址映像的折中方法。它把Cache中的所有槽号分成若干组,每一组又包含若干个槽号。这样当主存数据块读入Cache中时,首先要找该数据块在Cache中的槽的组号,然后再进行组内译码找到确切的槽号,最后再进行数据块内的译码工作进而找到相应的数据单元。

(2)换算法

当一个新的主存块要写入Cace中已有数据块占用的槽号时,就存在了数据块之间的替换问题。对于直接地址映像,只有一种选择,即直接替换特定槽中己有的旧数据块。对于全相连和组相连地址映像,就要综合考虑从允许替换的多个槽号中替换哪一个最合理的问题。目前实现这种替换的算法有很多种,现就比较常用的算法加以简要介绍。

1)近期最少使用的算法(LRU)

该替换算法总是替换掉Cache中最长时间没有用过的数据块,这种算法的核心思想同样利用了程序访问的局部性原理。如果程序正在访问一个数据块中的数据,那么它在最近相关的数据访问操作在已读到Cache中的该数据块中的可能性是最大的,体现了近期概率的问题。同样,若很长时间没有访问Cache中的某个槽号中的数据块了,那么,在今后的操作中不再访问该数据块中的数据的可能性也是最大的。因此在新的数据块读入时,替换掉该长时间没有访问的数据块是较为合理的。采用这种替换算法,数据块的命中率相当的高。

2)先进先出(FFO)

该算法总是替换掉在Cache中存放时间最久的数据块。注意不要与LRU方法混淆,最近最少使用的数据块不一定就是最先进入Cache中存放时间最长的数据块。FFO算法,实际上是利用了数据结构中的“队列结构”。该算法的硬件实现可通过一个循环移位寄存器就可做到。

3)随机替换(RANDOM)

这种算法不考虑使用情况,在Cache中通过一个随机数来选择一个槽中的数据块来替换。

所有在CPU一Cache-一主存层次上的替换算法都是由硬件来实现的,不需要用户的干预:而对于主存一Cache-一辅存层次上的替换算法一般都由操作系统来实现。

(3)写入策略

高速缓冲存储器Cache中的内容是主存中的一小部分内容的副本,应该和主存中的数据内容保持一致。在数据处理的过程中势必要修改Cache中数据块内的数据(即发生CPU的写操作),这样Cache中的内容就会与主存中的相应数据块中的数据有所不同。除CPU之外,其他设备大多与主存中的数据打交道,这种数据的不一致性必然会产生严重的后果。故此,设法保证Cache中的数据与主存中相应数据块的内容的一致性就十分必要,且必须保证数据的一致性。如何保证这种数据的一致性就是写入策略的问题。下面介绍主要的Cache一主存层次的写入策略。

1)全写法WT(WRITE-THROUGH)

用这种写入策略时,在写入数据时需要同时写入Cache和主存中相应的数据块。如果在多处理机中存在多个Cache,要保证所有Cache中包含要写入数据块的内容同时得到刷新。如主存中的某个数据块经写入后内容改变了,那么凡是在Cche中包含该数据块的内容都应该作废。显然这种方法中存在过多的写入操作,它势必造成系统执行效率的降低,影响整个系统的速度。为了改变这种状况,可在系统内增设一些缓冲寄存器,用于接受CPU送来的写入数据和地址,从而不过多地占用CPU的写入时间周期,以后由这些缓冲寄存器在下一个时钟周期到来时自动写入主存即可。

2)回写法WB(WRITE-BACK)

采用这种写入策略进行写操作时,只修改Cache中的内容,而不修改主存中的内容。只有当已发生过写入数据的数据块被替换掉时,才将这个被修改过的数据块回写到主存之中,最后才能从主存中调入新的数据块,从而把这个在Cache中的数据块替换掉。然而这种策略存在一个主要的问题:主存中的部分内容在操作的过程中可能已经作废,如果使用可能会引起错误。如果要保证使用过程中数据的有效性,I/O设备也应该从Cache中读/写信息。但是这样做又会使硬件的设计实现的复杂度增加,制造成本增大,势必会使Cache成为计算机系统设计的“瓶颈”。

总的来说,高速缓冲存储器Cache在计算机系统中起到两个方面的作用:在单处理机(含1个CPU)中,它可以弥补主存与处理机在处理速度方面不匹配的矛盾:在多处理机中,它可以减轻互联网络中信息传送负担的作用。

豫ICP备19006514号 网站地图 免责声明:如果侵犯了你的权益,请发邮件至:419017772@qq.com,我们会及时删除侵权内容,谢谢合作!
error: Content is protected !!