首页 > 其他分享 >【408精华知识】Cache类题目解题套路大揭秘

【408精华知识】Cache类题目解题套路大揭秘

时间:2024-05-25 23:01:09浏览次数:22  
标签:主存 映射 标记 Cache 地址 解题 相联 408

在这里插入图片描述

有关Cache的题目,需要理解Cache的工作原理,也即给出一个地址,要知道如何在Cache中寻找或者如何将其从主存中复制入Cache,同时理解Cache中具体是如何存储的,包含三种存储方式,分别是直接映射、全相联映射、组相联映射。下面我们就此进行探讨。

先看这张图,详细展示了Cache的工作原理
在这里插入图片描述
接下来我们顺着思路来捋一捋。

CPU给出一个地址(不考虑虚实地址的转换),我们要根据这个地址在主存中找到数据,我们要直接根据这个地址在主存中找吗?当然不是,那要Cache何用,Cache的作用就是缓解CPU与主存之间的速度差异,因为CPU很快,访问主存很慢。

那么我们就先拿着这个地址去Cache中找一找,这个地址可以分为两部分——块号和块内地址(实际物理内存),关于块号页号等知识,请看我另一篇文章:【408精华知识】页、页面、页框、页帧、内存块、物理块、物理页面还傻傻分不清?,块内地址则是用于在一个块内给数据定位,毕竟一个块很大,我们要找的数据仅仅是一小部分,所以要有一个块内的具体定位。

这个块号还可以根据Cache映射方式再次进行划分,其中直接映射可以划分为标记位和块号,全相联映射的块号直接转为标记位,组相联映射可以划分为标记位和组号,为什么这样划分呢?我们知道,直接映射的块号是用原地址的块号除以总块数得到的余数,因此直接映射的块号是可以被“隐含”的,不需要再在标记位中“明示”的,组相联也是一样,其组号是是用原地址的块号除以总组数得到的余数,也是可以被“隐含”的,不需要再在标记位中“明示”的,但是全相联不一样了,全相联是用原地址中的块号去跟Cache中的块一个一个比对标记位,没有可以被“隐含”的部分。

得到标记位后,我们就可以去Cache中进行比对啦!

这里要说下Cache的存储结构,Cache中的一块包含以下几个部分:

  • 有效位:占1位,表示一个块是否在Cache中。比如当电脑开机时,Cache一定是空的,因此有效位是0;
  • 标记位:英文为Tag,来源于直接映射、全相联映射、组相联映射剔除被隐含的块号或组号的部分,是一个块的“名字”;
  • 脏位:也称一致性维护位、修改位等,用于表明这个块有没有被修改过,取决于Cache写命中时的处理策略,如果是全写法(当 CPU 对 Cache 写命中时,必须把数据同时写入 Cache 和主存。当某一块需要替换时,不必把这一块写回主存,用新调入的块直接覆盖即可),脏位为0位,如果是写回法(当 CPU 对 Cache 写命中时,只需改 Cache 的内容,而不立即写入主存,只有当此块被换出时才写回主存),每个 Cache 行必须设置一个1位的脏位,以反映此块是否被 CPU 修改过。
  • 替换控制位:采用直接映射为0位,在采用全相联映射和组相联映射方式时,从主存向 Cache 传送一个新块,当 Cache 中的空间被占满时,就需要使用替换算法置换 Cache行,其中随机替换算法的替换控制位为0位LRU的替换控制位为 log2路数 位
  • 数据:就是在主存中取到的一块中的数据;

用目标地址的标记位与Cache中行的标记位进行比对,如果命中,直接根据块内地址将这行中块内对应数据输出给数据通路;如果没有命中,则要访存,将主存中对应数据输出给数据通路。

在未命中的情况下,输出主存数据给数据通路后,还要将输出块的数据复制到Cache中,因为它可能是常用数据,要判断Cache中是否已满,如果未满,则可装进;如果满了,则要根据替换策略进行替换,将块的内容装进Cache。

写在后面

这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!

参考资料
[1]王道408教材(2025版)
[2]王道课程资料

标签:主存,映射,标记,Cache,地址,解题,相联,408
From: https://blog.csdn.net/weixin_51193374/article/details/139170844

相关文章

  • 【408精华知识】主存相关解题套路大揭秘!
    讲完了Cache,再来讲讲主存是怎么考察的,我始终认为,一图胜千言,所以对于很多部件,我都是通过画图进行形象的记忆,那么接下来我们对主存也画个图,然后再来详细解读其考察套路~文章目录零、主存的真面目一、按存储方式分类的存储器(一)随机存取存储器(RandomAccessMemory,RAM)1.......
  • Leetcode 力扣97. 交错字符串 (抖音号:708231408)
    给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s=s1+s2+...+snt=t1+t2+...+tm|n-m|<=1交错 是 s1+t1+s2+t......
  • 【全网最全】2024电工杯A题22页参考论文+所以小问配套解题代码+可视化图表
             A题:园区微电网风光储协调优化配置2024电工杯数学建模A题成品论文+Matlab,py双版本解题代码+代码运行高清结果图https://mbd.pub/o/bread/ZpaVlZ1s问题1:各园区独立运营储能配置方案及其经济性分析  (1)分析未配置储能时各园区运行的经济性,包括:购......
  • vscode使用colcon build编译ros2工程时报错:The current CMakeCache.txt directory...i
    之前已经编译好了一个文件夹A下的工程然后复制出一个文件夹B,再次编译时出现了问题,报错ThecurrentCMakeCache.txtdirectory...isdifferentfrom...其实也能猜到就是当路径从A变到B,不匹配导致报错,但是不知道应该在哪里改CSDN上有个文章给出回答:删除build文件夹,当然把log和ins......
  • APS54085 高辉度调光降压恒流芯片 PWM 线性调光 车灯IC
    产品描述 APS54085是一款PWM工作模式,简单、内置功率MOS管,适用于5-100V输入的高精度降压LED恒流驱动芯片。电流2.0A。APS54085可实现线性调光和PWM调光,线性调光有效电压范围0.52-2.55V.PWM调光频率范围100HZ-30KHZ。APS54085工作频率可以通过RT外部电阻编程来......
  • APS54083 大功率深度调光降压恒流驱动IC PWM 线性调光 车灯IC
    特点◆宽输入电压范围:5V~100V◆可设定电流范围:10mA~2000mA◆固定关断时间控制◆内置抖频电路,降低对其他设备的EMI干扰◆过温保护◆调光功能:线性调光/PWM调光◆PWM调光深度小于0.4%◆线性调光深度小于0.8%◆ESOP8封装产品描述:APS54085是一款PWM工作模......
  • springboot2 - ehcache
    介绍ehcache一下在spring环境下的应用。如果是单机系统,ehcache一般是首选方案,想通过切换redis提高性能,意义不大,反而会增加部署和维护负担。工具函数如果想在spring环境下,封装自己的工具函数,下面这些基础代码估计会用到。场景:像是Excel导入数据,需要大批量更新缓存时......
  • SpringCache
    实现了基于注解的缓存功能导入依赖org.springframwork.bootspring-boot-starter-cachespring-boot-starter-data-redis2.7.3@EnableCaching一般放在启动类上,表示我们使用基于注解的缓存功能----开启缓存注解功能@Cacheable一般加在方法上,如果查询到缓存,就返回缓存数据......
  • Linux Buffer/cache清理
    1、清理Buffer/cache缓存文件https://blog.csdn.net/u011066470/article/details/125510817syncsysctl-wvm.drop_caches=1sysctl-wvm.drop_caches=2sysctl-wvm.drop_caches=3定时脚本清理#!/bin/bashMem=$(free-m|awk'NR==2'|awk'{print$4}')......
  • Linux中Cache 和 Buffer 有什么区别?
    Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffercache,本文后续的论述中,统一称为cache......