存储器(六)

来源:互联网 发布:怎么给淘宝供货 编辑:程序博客网 时间:2024/06/08 07:40

这篇文章主要讲述的是 Cache - 主存地址映射 和 替换算法。

一、Cache - 主存地址映射

Cache - 主存 地址映射指的是:主存中的块可以放在Cache的哪个或者哪几个块里面。包括三种方式。

(1) 直接映射

主存中共任意一个给定的块只能映射到或者只能装载到某一个块之中。

这种方式是用Cache当尺子在主存里面量, 将主存分成若干个区, 每个区的大小都与Cache相等。 在一个区中, 每个块的位置

确定, 比如:主存中的字块0只能放在Cache的字块0的位置 ,字块1只能放在字块1的位置。Cache中存放的是同一个区里面的字块。

当CPU传送地址到主存里面去数据时, 地址包括三部分, 分别为:主存字块标记、Cache字块地址、字块内地址。CPU给出一个地址

可以直接定位到Cache该块号里面的地址, 那么怎么判断该字块是否为需要的字块呢? 比较标记里面存储的区是否一致, 如果命中,

那么可以直接定位到该地址。 如果未命中, 则说明没有加到Cache里面, 这种方式结构简单, 缺点是Cache利用率非常低。

2. 全相联映射

这种方法是:主存里面的每一个字块都可以放在Cache里面的任意一个地方就, 当CPU传送地址过来时, 就要和Cache的每一个

块号都进行比较, 如果命中, 则说明加到Cache里面, 反之则没有。 这种方法的优点是:增加了Cache的利用率, 但是比较电路会

很复杂, 因为要和每一个地址都进行比较, 还有比较时间也会比较长。

3. 组相联映射

先把Cache分成块, 然后将这些块分成若干个组, 每组中包含2、 4、 8 甚至 16 块。然后将主存分区, 每个区的大小与Cache

里面的组数是相同的。也就是说Cache被分成多少组, 主存储器的每个区就包含多少块。映像的时候, 主存里面的第0块可以放到

Cache里面第0组的任何一个区。 也就是说在主存里面的块号直接决定放在Cache里面的组号, 但是具体是Cache哪个块则不确定。

在确定CPU给定的地址是否在Cache里面时, 只要确定CPU给出主存地址的区号、块号, 然后根据块号寻找Cache当中的组号, 一个

组会包含几个区, 依次比较就好了; 如果Cache里面有, 那么则命中。 这样就不需要与Cache里面每一个标记都比较了。

这种方法就是直接相联与全相联的折中。

二、 替换算法

当一个内存块可以放在Cache里面的位置全部都被占领了, 那么就需要把某一个块替换出去, 将需要的块装进Cache中;这时候

就需要选择哪一个块替换出去, 这就是替换算法。 这里介绍了两种算法:

(1)先进先出(FIFO)

这种算法认为, 最早进来的块是目前最不需要的块, 所以先将这个块替换出去。 但是这个算法是有问题的, 最先进来的不

一定是目前最不需要的。 这种例子在现实生活中也很容易找到。

(2)近期最少使用(LRU)算法

就是将近期就不常用的块替换出去。 这个算法在网上有很多例子。


Cache - 地址映射小结:

直接映射:某一块主存块只能固定到某一块缓存块上不灵活

全相联映射:某一主存块可以映射到任意一块缓存块上成本高(因为电路实现复杂)

组相连映射:某一主存块可以映射到某几块缓存块上二者的折中。

原创粉丝点击