王道408---计算机组成原理--存储系统--高速缓冲存储器 章节疑问以及解答

一、直接映射

ps:以直接映射为主讲
0
 
0
 
0

我们需要明白的是

1、主存与cache的块(页)大小是相等的,所以图中的块内地址所能表示的大小应该等于块大小,若块大小为1KB,那么块内地址的位数应该为10位
2、一个cache行一定包括了 标记位数、一块数据的大小、有效位。根据题目要求可能还要考虑 脏位、替换控制位。一般常考的就这些。其中替换控制位可能不止占一位,后文中会讲到
 

小例子

假设cache 的大小为1MB,块大小为4KB,主存位数为32位。那么我们就能提取信息:
1、块内地址为 12 位
2、cache行位数为 (2^20) / (2^12) = 8
3、标记位即为 32-12-8 = 12位
如果我们要把地址为0x12345678H的单元调入Cache,那么对于其映射的地址结构有:
0x12345678H == 0001 0010 0011 0100 0101 0110 0111 1000
cache的块内地址: 0110 0111 1000 == 0x678H 这个地址不管是在主存的块内还是在cache的块内都是一样的
cache行号为: 0100 0101 == 0x45H 我们也可以通过 mod (2^8) 来做,是一样的
标记为: 0001 0010 0011 == 0x123H
可以看到,映射的Cache地址结构可以直接通过分析 主存地址得到,十分明了
 

注意点

1、0x12345678H 地址装入Cache的地址是 0100 0101 0110 0111 1000 == 0x45678 也就是 cache的大小所占的位数,也表示了每一cache行可以表示 2^20个地址,2^12 行正好表示 2^32个地址
2、对于二进制 0001 0010 0011 01 把他转化成16进制的结果是: 048DH !!! 注意大坑
 

二、替换控制位的位数

替换控制位又叫替换算法控制位
 

问题

在cpu缓存中使用的LRU替换算法需要多少位呢?

解决方法

对于n路相连的缓存来说,LRU每个缓存块需要的位数为log2(n),那么每个组需要的位数就为nlog2(n)。(原文:Assuming you mean a 4-way set-associative cache:A “perfect” LRU would essentially be assigning each line an exact index in the order of usage. You can also think of that as an “age”. So each of the 4 elements would require an index of 2 bits (since we need to count 4 distinct ages) stating its location in the LRU order - this means 2 bits * 4 ways, per each set of the cache.In the general case of n ways, you’d need log2(n) bits per line, or nlog2(n) bits per set.
By the way, there are cheaper ways to reach an almost-LRU behavior, see for e.g. Pseudo LRU which would only require 3 bits for the entire set in your case (or in general: #ways - 1))

比如

四路组相连Cache使用LRU算法的替换控制位为2位
那么八路组相连Cache 就应该是3位
PS: 替换控制位好像只用于 LRU算法,类似于随机替换策略就不会使用 替换算法控制位
 

三、为什么写回法搭配写分配法 ,全写法搭配非写分配法?

1、介绍

写回法指的是若写cache则仅修改cache’中的内容直到cache被换出时才修改主存中的内容,而全写法是修改cache时同时修改主存。
写分配法是把这个未在cache中的块,加载到cache中后在进行写,而非写分配法指的是直接把这个块在主存中写不进行调块。

2、为什么写回法搭配写分配法?(cache与主存之间采用)

以写不命中的角度考虑
若搭配非写分配法,写未命中时会直接修改主存中的内容,若一直有新的写入会一直修改主存。
若搭配写分配法,写未命中会调入cache并修改,之后的新的写会直接修改cache,直到被替换后再写入主存中。
相比较而言选择写分配法。

3、为什么全写法搭配非写分配法?(各级cache之间采用)

仍然以写不命中的角度考虑
若搭配写分配法,写未命中会调入cache并修改,之后的新的写入会同时修改cache和主存。
若搭配非写分配法,写未命中时会直接修改主存中的内容,若一直有新的写入会一直修改主存。
相比较而言选择非写分配法。
 

四、TLB与cache谁先被访问到的问题

1、介绍

Cache是用于缓存CPU常用的数据和指令的,分别称为dcache(data cache)和icache(instruction cache)
TLB(Translation Lookaside Buffer)是用于缓存虚拟地址到物理地址的映射关系的,保存了当前进程页表项,一旦切换进程,TLB里的数据全部作废

2、访问先后关系

2种情况都有可能,这取决于TLB与Cache的先后顺序
如果TLB介于 CPU 和 Cache之间,其实就是MMU介于CPU和Cache之间,则是先访问TLB后访问Cache且此时访问Cache使用的是物理地址,这种情况称为物理Cache。如果TLB介于 Cache和Memory之间,即MMU介于Cache与Memory之间,则是先访问Cache后访问TLB且此时访问Cache使用的是虚拟地址,这种情况称为逻辑Cache(注意:实际上此时可以同时向Cache发出请求,如果Cache命中则最好,如果Cache未命中此时MMU可以进行地址转换以便于Cache未命中后的从内存中获取数据)

一般来说,程序访问某虚拟地址时,先用TLB获取虚拟地址对应物理地址的页表项,之后再用物理地址通过cache访问主存

3、王道408题目

这应该也是 王道408 计算机组成原理P120 T10 :
对于由高速缓存、主存、硬盘构成的三级存储体系,CPU访问该存储系统时发送的地址为 ()
A、高速缓存地址 B、虚拟地址
C、主存物理地址 D、磁盘地址
选C的原因吧
 

五、页框、主存块的区别

参考: https://i.cnblogs.com/posts/edit;postId=17574368

 一般来说页框要比主存块大


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/p/17574368.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(1340)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示