前面讲过,与主存容量相比,Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位。为了把主存块放到Cache中,必须应用某种方法把主存地址定位到Cache中,这一过程称为地址映射。“映射”一词的物理含义是确定位置的对应关系,并用硬件来实现。这样当CPU访问存储器时,它所给出的一个字的存储器地址就会自动变换成Cache的地址。由于采用硬件,这个地址变换过程很快,软件人员丝毫感觉不到Cache的存在。
地址映射的方式通常有直接映射方式、全相联映射方式和组相联映射方式3种。
1.直接映射方式
直接映射方式是指主存中的每一个块只能被放置到Cache中唯一的一个指定位置,若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去。直接映射方式是最简单的地址映射方式,成本低,易实现,地址变换速度快,而且不涉及其他两种映射方式中的替换算法问题。但这种方式不够灵活,Cache的块冲突概率最高,空间利用率最低。
直接映射的规则如图3-20所示。如主存的第0块、第8块,只能映射到Cache的第0块;而主存的第1块、第9块,只能映射到Cache的第1块,依次类推。
直接映射的关系可定义为
j=i(modN)
其中,j是Cache中的块号,i是主存中的块号,N为Cache的块数。
例3-2:设有一个Cache的容量为2K字,每个块为16字,求:
(1)该Cache可容纳多少个块?
(2)如果主存的容量是256K字,则有多少个块?
(3)主存的地址有多少位?Cache地址有多少位?
(4)在直接映射方式下,主存中的第i块映射到Cache中哪一个块中?
(5)进行地址映射时,存储器的地址分成哪几段?各段分别有多少位?
解:
(1)Cache中有2 048/16=128个块。
(2)主存有256K/16=16 384个块。(www.xing528.com)
(3)主存的容量是256K=218字,所以主存字地址为18位。Cache容量为2K=211字,所以Cache字地址为11位。
(4)主存中的第i块映射到Cache中第i(mod 128)个块中。
(5)存储器的字地址分成三段:区号、块号、块内字地址。区号的长度为18-11=7位,块号为7位,块内字地址为4位。
2.全相联映射方式,
如图3-21所示,全相联映射方式允许主存中的任意一个块映射到Cache存储器的任何一个字块位置上,也允许从已被占满的Cache存储器中替换出任何一个旧块,当访问一个块中的数据时,块地址要与Cache块表中的所有地址标记进行比较以确定是否命中。在调入数据块时,存在着一个比较复杂的替换策略问题,即决定将数据块调入Cache中的什么位置,将Cache中哪一块数据调出到主存。
这只是一个理想的方案,实际上很少采用。主要由于采用全相联映射方式时标记的位数增加比较多,使Cache标记容量加大,当访问Cache时,需要和Cache的全部标记进行比较才能判断出所访主存地址的内容是否已在Cache中。由于Cache速度要求高,通常由按内容寻址的相联存储器完成,所需硬件逻辑电路很复杂,以至于无法用于Cache中。这种方式的优点是灵活,Cache的块冲突概率小,空间利用率高,但是地址变换速度慢,而且成本高,实现起来比较困难。
图3-20 直接映射方式
图3-21 全相联映射方式
3.组相联映射方式
组相联映射方式是将主存空间按Cache大小等分成区后,再将Cache空间和主存空间中的每一区都等分成大小相同的组。让主存各区中某组中的任何一块,均可直接映射到Cache中对应组的任何一块位置上,即组间采取直接映射,而组内采取全相联映射。
组相联映射实际上是全相联映射和直接映射的折中方案,也可以说是上述两种映射方式的一般形式,当组的大小为1时就变成了直接映射,反之,当组的大小为整个Cache的大小时就变成了全相联映射。所以其优点和缺点介于全相联和直接映射方式的优缺点之间。
组相联映射规则如图3-22所示。主存分成2区,每区4组,每组2块;Cache分为4组,每组2块。主存的第9块将可以映射到Cache的第0块或第1块的位置上。
图3-22 组相联映射方式
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。