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

在这里插入图片描述

有关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]王道课程资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

clion/pycharm 安装中文

楼主版本 2024.1 mac 操作系统,理论上不同版本和不同操作系统操作应该大同小异 首先找到插件的位置 方式一 1、进入工程,右上角找到设置 2、找到插件(欢迎界面也能找到这个) 方式二 在欢迎界面找到插件 最后 插件商店搜索 l…

矩阵乘法不满足交换律-反证法

假定有2个矩阵A和B A*B 不等于 B*A 手写证明: A*B为 B*A为 由此可以看出,矩阵乘法不满足交换律!!

Python | Leetcode Python题解之第100题相同的树

题目: 题解: class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

centos7和centos8安装mysql5.6 5.7 8.0

https://dev.mysql.com/downloads/repo/yum/ 注意构造下http://repo.mysql.com/mysql-community-release-el*-*.noarch.rpm 【以centos7为例】 安装mysql5.6 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5…

初识Qt:从Hello world到对象树的深度解析

Qt中的对象树深度解析 Hello world1.图形化界面创建命令行式创建在栈上创建在堆上创建为什么传文本需要QString,std::string不行吗?那为什么要传入this指针?为什么new后不用显示调用delete函数呢,不会造成内存泄漏问题吗&#xff…

国产操作系统上使用SQLynx连接数据库 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上使用SQLynx连接数据库 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天我们将探讨如何在国产操作系统上使用SQLynx。这是一款功能强大的数据库管理工具,可以帮助用户高效地管理和操作数据库。本文将详细介绍…

2024 电工杯高校数学建模竞赛(A题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的数学建模团队,我们将为你带来2024电工杯数学建模竞赛(B题)的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解…

Docker搭建mysql性能测试环境

OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…

NLP(18)--大模型发展(2)

前言 仅记录学习过程,有问题欢迎讨论 Transformer结构: LLM的结构变化: Muti-head 共享: Q继续切割为muti-head,但是K,V少切,比如切为2个,然后复制到n个muti-head减少参数量,加速训练 atte…

STM32-串口通信波特率计算以及寄存器的配置详解

您好,我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台,本着大家一起互相学习的心态而建立,不太成熟,希望志同道合的朋友一起来,抱歉打扰您了QQ群372991598 串口通信基本原理 处理器与外部设备通信的两种方式 并行…

flume使用实例

1、监听端口a1.sources.r1.type netcat 配置文件nc-flume-console.conf # Name the components on this agent a1 表示jvm进程名 a1.sources r1 a1.sinks k1 a1.channels c1 # Describe/configure the source a1.sources.r1.type netcat a1.sources.r1.bind node…

《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二

易采游戏网5月24日消息,在刚刚过去的四月,全球手游市场迎来了一场收益的盛宴,其中《王者荣耀》以其惊人的吸金能力,以2.34亿美元的月收入在全球手游排行榜上位列第二。4月5日,这款由腾讯游戏开发的多人在线战斗竞技游戏…

软考考前前怎么复习?

有一些经验,可以和大家分享一下。 软考的考试内容 软考包含许多科目,共分为五大类,27个专业。 软考的等级不同,考试内容也有所不同。初级和中级考试只包括两门科目,而高级则需要考三门科目。每门科目满分75分&#x…

knife4j-swagger

文章目录 knife4j-swagger第 1 步:引入 jar 包第 2 步:添加注释来开启 knife4j第 3 步:验证问题解决新增功能:ApiOperationSupport 注解新增功能:DynamicParameters 注解忽略参数属性 knife4j-swagger knife4j 是 Swa…

W801 实现获取天气情况

看了小安派(AiPi-Eyes 天气站)的源码,感觉用W801也可以实现。 一、部分源码 main.c #include "wm_include.h" #include "Lcd_Driver.h"void UserMain(void) {printf("\n user task \n");Lcd_Init();Lcd_Clea…

Qt官方示例---opengl

文件相对路径:Examples\Qt-5.9.1\opengl 2dpainting cube computegles31 contextinfo hellogl2 hellowindow paintedwindow qopenglwidget qopenglwindow textures threadedqopenglwidget

VirtualBox设置共享文件夹,用于在Window11 和 Ubuntu22 中共享文件,2024亲测可用

VirtualBox设置共享文件夹,用于在Window11 和 Ubuntu22 中共享文件,2024亲测可用 Windows操作 1、新建文件夹,用于共享 Linux操作 1、添加共享文件夹 共享文件夹路径:选择Windows系统中你需要共享的文件夹 共享文件夹名称&am…

ROS2入门21讲__第07讲__节点:机器人的工作细胞

目录 前言 通信模型 案例一:Hello World节点(面向过程) 运行效果 代码解析 创建节点流程 案例二:Hello World节点(面向对象) 运行效果 代码解析 创建节点流程 案例三:物体识别节点 …

小蓝和小青在做数字破解游戏

小蓝和小青在做数字破解游戏,设某图案由m*n的0和1点阵组成,依照以下规则破解连续一组数值,从点阵图第一行第一个符号开始计算,从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,…

Nuxt3 实战 (七):配置 Supabase 数据库

前言 这个章节我们要先把数据库的环境配置好,古人云:工欲善其事,必先利其器。 这两天我一直在网上寻找最适合 Nuxt 的数据库,之前在做个人项目时经常用的是 Mysql 和 MongoDB,也用过 ORM 框架比如:Sequel…