存储器层次结构的四个问题

(1)块的放置,在较高层中,一个块能够被放置在哪里?(该层表示存储结构层次)

(2)块的标志,如果一个块在较高层中,如何找到它?

(3)块的替换,如果块发生缺失,哪个块被替换?

(4)写时策略.写操作时会发生什么?

一个块可以被放置到cache的什么地方?

直接映射:(块地址)MOD(cache中的块数),每个块只能出现在唯一位置上

全相连映射:一个块可以放置在cache中的任意位置上

组相连:(块地址)MOD(cache的组数), 一个块首先被映射到一个组中,然后它可以被放置在组中的任何一个块中

直接映射,全相连与组相连的关系:

扫描二维码关注公众号,回复: 722759 查看本文章

直接映射是一个简单的1路组相联

一个有m块的全相联cache可以称为m路组相联

大多数处理器的cache采用直接映射,2路组相联或是4路组相联.

如果一个块在cache中,如何找到它?

块地址:块结构中有一个地址标志给出块地址,对每一个块标志进行检查,看其是否与来自处理器的块地址相匹配.考虑到速率,采用并行检查.

有效位:确定块中是否包含有效信息.

cache地址:块地址与块偏移

块地址:标志字段和索引字段

块内偏移是从块中选取数据,索引字段用来选择组,再通过比较标志字段来判断是否命中,标志字段是检查所有的块,全相联没有索引字段.

(i)没有必要对于偏移地址进行比较

(ii)索引字段的比较也是多余的,索引字段标识被检查的组

如果cache缺失,哪个块将被替换?

直接映射:直接替换不命中的块

在组相联与全相联中需要在多块中进行选择

三种基本块替换策略:

(1) 随机替换,产生伪随机数块号

(2) LRU,记录块的访问次数,替换长时间没有被访问的

(3)FIFO,最早进入cache的块被替换

4写操作时会发生什么?

读操作在 cache的访问占大多数.所有的指令都是   通过读操作来获得的,而且大部分的指令是不需要进行存储器写操作的。

块可以在标志位读和比较的同时被读出,读块操作与获得块地址的同时就开始了.如果读命中,块中所需要的信息立刻被传送到处理器

如果发生读取失,只需要将读到的信息丢失即可.

而对于写操作来说,这样做并不适合,只有在标志位有效而且地址命中时,块才能修改。检查标志位不能与写操作同时进行

写操作比读操作花费时间更长.

处理器必须给出写数据的大小,通常在1~8个字节之间,块中只有这个部分的数据能被更改.但是读数据可以读取比所需字节数更多的信息.

cache写策略:

写直达:信息被同时写到cache块和更低一层存储器中

写回法:信息只被写到cache块,只有cache中的该块被替换出去时,信息才会被写回主存中.

重写脏位:

一个块是脏的(在cache中被修改过)

干净的(在cache中没有被修改),如果是干净的,则在下层存储器中与cache包含的信息相同,因此不必被写回.

优点:

写回法:写操作与cache存储器的速度是一致的,而且对于同一块的多次操作仅需要对下一层存储器进行一次操作。

写回法需要较小的存储器带宽,对于其他层次的存储器与存储总线的使用较少,节省了功耗,适用于嵌入式应用程序.

写直达法:cache总是干净的,当发生读缺失的时候,无需对下一层存储器进行写操作(相对于写回法)

下一级存储有最新的当前数据副本,简化了数据一致性,数据一致性对于处理器和IO均很重要.

我们需要利用写回法来减少访问存储器的通信量,有希望通过写直达法来保证存储器层次结构中cache和低层存储器的数据一致性.

在写直达法中:

处理器的操作必须等待写操作完成,此时处理器称为写停顿,减少写停顿的策略是写缓存技术,允许处理器把数据写入到缓冲区之后立即继续工作.

写缺失策略:

写分配:写缺失发生时,内存的块被读到cache中,然后执行上个写命中时的操作

不按写分配:写缺失发生时,仅修改低层存储器的该块,而不将该块取到cache中

原文:http://blog.tianya.cn/post-5953305-102672270-1.shtml

猜你喜欢

转载自2482696735.iteye.com/blog/2261552