地址映射变换机构是将CPU送来的主存地址转换为Cache地址。由于贮存和Cache的块大小相同,块内地址都是相对于快的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存块号与Cache块号之间的转换。
1.直接映射
上图中Cache为8行,主存为256行。Cache被分为8块,因此在主存中每8块可以看成一个轮回,主存可以分为32个轮回。
优点:实现简单。只需要利用主存地址的某些位直接判断,就可以确定所需字块是否在Cache中。
缺点:1)不够灵活,由于每个主存块只能固定地对应某个Cache块,即使Cache内还空着许多位置也不能占用,所以存储空间得不到充分利用。
2)冲突概率高(抖动);例如3号Cache要频繁的切换对应11,19,27号主存。
识别:
α. CPU访存指令指出一个内存地址,该内存地址包含tag,块号,字等字段。
β. 根据内存中的块号c找到Cache中对应的块号i(Cache中的块号=主存中的块号 mod Cache中的块数)
*若相符合且有效位为‘1’,表示命中,然后用内存地址的低b位在Cache中读取所需的字即可。
*若不符则需要从主存中读取所需要的块来替换Cache中旧的块,同时将信息送往CPU,并且修改标记位
2.全相联映射
全相联映射允许主存中每一个字块映射到Cache中的任何一块的位置上,如下图
优点:1) 由于全相联映射允许主存的每一字快映射到Cache中的任何一个字快,因此Cache的命中率可以提高
2)通俗地说,全相联映射就是“有位置可以坐”,见笑了块的冲突率,进而提高了Cache的利用率。
缺点:1)tag的位数增加了,访问Cache时主存字块标记需要和Cache的全部“标记”进行比较。
识别:
α. CPU访存指令指出一个内存地址,该内存地址包含块号,字等字段。
β. Cache所有行的标记位和内存地址的块号一同送入比较器中比较(由于主存中有块,则需要8位来作为标记位)
3.组相联映射
组相联映射是对直接映射和全相联映射进行折中的一种方式。
*注意事项:
1)当组相联只有一组时,此时组相联映射就等同于全相联映射:每组只有一块时就等同于直接映射。
2) 在组相联映射中,主存地址高位到低位划分成三部分:标记tag||组号||块内字地址
3)块内字地址(块大小) 组号(Cache组数) 标记tag=主存地址的其余位
识别:
α. CPU访存指令指出一个内存地址,该内存地址包含tag,组号,字等字段
β. 通过组号找到Cache中对应的组,然后将Cache中组的每一块tag和内存地址的tag比较是否符合
牛刀小试
1.容量为64块的Cache采用组相联映射方式,字块大小为128个字,每4块为一组如果主存为4K块,按字编制,那么主存地址位和主存标记位为多少?
主存地址位=字块大小×块数=128×4K=位
主存地址位()=主存标记位×Cache组位(64/4)×字块位数(128)
主存标记位=8位
2.Cache用组相联映射,一块大小为128B,Cache共64块,4块分一组,主存有4096块,主存地址共需多少位?
主存地址位=字块大小×块数=128*4096=位
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)