假设一个全相联具有足够多Cache块的Cache,在完成WriteMem[100]、WriteMem[100]、ReadMem[200]、WriteMem[200]、WriteMem[100]的访存序列时,利用按写分配和不按写分配两种方法,命中次数和失效次数各是多少?
根据分析所得到的结果如下所示:
不按写分配 | 按写分配 | |
---|---|---|
WrteMem[100] | 失效 | 失效 |
WriteMem[100] | 失效 | 命中 |
ReadMem[200] | 失效 | 失效 |
WriteMem[200] | 命中 | 命中 |
WriteMem[100] | 失效 | 命中 |
不按写分配法:
①WriteMem[100]:直接将数据写入内存中第100个单元,对Cache不作替换和修改;由于第一次使用这个单元,因此一定发生写失效。
②WriteMem[100]:同上,不修改Cache中的内容;Cache中没有对应数据块,发生写失效。
③ReadMem[200]:读内存中第200个单元的数据。将该数据所在的块也调入Cache中。由于还没有使用过这个块,因此发生读失效。
④WriteMem[200]:由于地址单元未200的块已经调入Cache中,因此将将数据写入200对应的内存单元时写命中。
⑤WriteMem[100]:同①和②,因为100所对应的块不在Cache中,因此写失效。
按写分配法:
①WriteMem[100]:第一次写入内存单元为100所对应的数据,这个数据的块一定不在Cache中,因此发生写失效。写入的同时将这个内存单元所对应的数据块调入Cache中。
②WriteMem[100]:第二次写入内存单元为100所对应的数据,由于在①中已经将这个数据块存入Cache中,因此写命中。
③ReadMem[200]:读内存中第200个单元的数据。将该数据所在的块也调入Cache中。由于还没有使用过这个块,因此发生读失效。
④WriteMem[200]:由于内存单元为200的数据块已经调入Cache,因此本次写命中。
⑤WriteMem[100]:由于内存单元为100的数据库已经调入Cache,因此本次写命中。