比较写回法与写直达法的优缺点如下:
1、可靠性,写直达法要优于写回法。这是因为写直达法能够始终保持Cache是主存的正确副本。如果Cache发生错误,可以从主存得到纠正。而写回法当发生图3.43所示的两种情况时,在一段时间内,Cache并不是主存的正确副本。
2、与主存的通信量,一般情况下,写回法少于写直达法。原因可以从两方面来分析。一方面,由于Cache的命中率一般很高,对于写回法,CPU的绝大多数写操作只需写Cache,不必写主存。另一方面,当写Cache发生块失效时,可能要写一个块到主存,而写直达法每次只写一个字到主存。而且,即使是读操作,当Cache不命中时,写回法也可能因为发生块替换而要写一块到主存。
总的来看,写直达法是把写主存的开销化在每次写Cache时再增加一个比写Cache要长得多的写主存操作上。而写回法是把写主存的开销集中在当发生Cache块失效时,可能要一次性地写一个块到主存。到底哪一种方法与主存的通信量更少,可以看下面的一个简单例子。
据统计,在访问存储器的操作中,写操作一般要占10%到34%,这里假设为20%。Cache的命中率为99%。每块为4个字,主存的字长为一个字。当Cache发生块替换时,有30%块需要写回到主存,其余的块因为没有被修改过而不必写回主存。则对于写直达法,写主存的信息量为20%;而对于写回法,写主存的信息量为:(1-99%)×30%×4=1.2%。因此,与主存的通信量,写回法要必写直达法少10多倍。
另外,无论是写回法,还是写直达法,当出现写Cache不命中时,都有一个是否要把包括所写字在内的一个块从主存读入Cache的问题。一般有两种方法。一种是"不按写分配法",这种方法在发生写Cache不命中时,只把所要写的字写入主存,而包括所写字在内的一个块不从主存读入Cache。另一种是"按写分配法",这种方法在写Cache不命中时,除了完成把所写字写入主存之外,还要把包括所写字在内的一个块从主存读入Cache。这两种方法效果对于写回法和写直达法有所不同,但差别不大。目前,一般在写回法中采用按写分配法,而在写直达法中采用不按写分配法。
3、控制的复杂性,写直达法比写回法简单。写回法要在块表中为每一块设置一个修改位,而且要对修改位进行管理和判断。而写直达法不需要设置修改位。另外,由于写直达法能够始终保持Cache是主存的正确副本。一旦Cache发生错误,可以从主存得到纠正。因此,Cache通常只需要采用简单的奇偶校验即可。而对于写回法,Cache中的块必须自己独立保证正确性,因此要采用相对比较复杂的纠错码。
4、硬件实现的代价,写回法要比写直达法好。在写直达法中,因为每次写操作都要写主存,因此为了节省写主存所花费的时间,通常要采用一个高速小容量的缓冲存储器,把要写主存的数据和地址先写到这个缓冲存储器中。在每次读主存时,也要首先判断所读的数据是否在这个缓冲存储器中。而写回法的硬件实现代价相对比较低。
目前,很多单处理机都采用写回法,主要目的是为了减少Cache与主存之间的通信量。也有不少的单处理机采用写直达法,目的是为了硬件的控制比较简单。而几乎所有的多处理机都采用写直达法。例如,IBM
3033、IBM 370/168、VAX-11/780、Honeywell 66/60、honeywell 66/80 等机器采用写直达法。而Amdahl
的所有机器,IBM 3081等机器采用写回法。