计组——彻底搞懂cache主存映射以及cache容量的计算

2023-11-08


cache的工作原理:为了解决CPU和主存之间速度不匹配的问题,从而引入Cache,将某些主存块复制到Cache中。
那么, 如何区分Cache与主存的数据块的对应关系呢?

一、三种映射方式

假设计算机主存大小256MB,按字节编址,数据cache有8行,数据块大小64B。主存数据在cache里应该怎么存放?二者应该建立怎样的对应关系?
【分析】主存和cache是以数据块为单位进行数据交换的,因此主存块大小 ≡ \equiv cache块大小

数据块大小64B(26B),以字节编址,占 6 位;
主存大小256MB(228B),以字节编址,共占28位;

采用不同的映射方式,会对主存地址(28位)有不同的划分方式:

1. 全相联映射

cache的所有行均可用于存放主存任何一块数据
(助记:空位子都可以坐)

缺点:查找最慢,当cache块装满的时候,可能需要遍历所有的cache行

主存地址结构划分:

主存块号 块内地址
22位 6位

查找策略:
假如访问地址为:1…1101 001110

  1. 前22位依次与cache块标记进行对比
  2. 如果标记匹配且有效位为1,则cache命中,访问块内地址为001110的单元
  3. 若cache不命中或有效位为0,则正常访问内存

2. 直接映射

每个主存块只能放到某个固定的cache行,每个主存块所属的cahe行是 主存块号 % cache总行数
(助记:一家公司员工每天都是不假思索直接去自己所属的公司)

缺点:所以多个块会映射到同一行,这样会产生不必要的换入换出,因为即使cache有空行,也不能利用。
(助记:公司有特定技能的人员需要,恰好当前团队没有这样的人才,但是刚好公司人员已经饱和了,那么就得有人先离开,新人再进来,这真是一个悲伤的故事)

针对上例,「0号,8号,16号……」主存块被映射到0号cache行,「1号,9号,17号……」主存块被映射到1号cache行,以此类推……

由于cache行总共8行(23),占 3 位;
而恰好主存块号22位的后三位跟cache行号是一致的,所以将主存块号再拆分:

主存地址结构划分:

主存块号 块内地址
主存字块标记(19位) + cache行号(3位) = 22位 6位

查找策略:
假如访问地址为:0…01000 001110

  1. 根据主存块号后3位确定cache行号
  2. 如果主存块号前19位与cache标记匹配且有效位为1,则cache命中,访问块内地址为001110的单元
  3. 若cache不命中或有效位为0,则正常访问内存

3. 组相联映射

首先要对所有的cache行进行分组,每个主存块只能放到固定的cache组,每个主存块所属的cahe组是 主存块号 % cache总组数

(这种方式是上面两种方式的结合,主存数据先找到自己对应的组,组内的空位随便放,这样既提高了查找效率,又减少了因为冲突而导致的换入换出次数)

仍然针对上例,以 2 路组相联为例,cache行可被划分为8/2=4组(22),组号占 2

「0号,4号,8号……」主存块被映射到0号cache组,「1号,5号,9号……」主存块被映射到1号cache行,以此类推……

而恰好主存块号22位的后 2 位跟cache组号是一致的,于是主存块号就有了另外一种划分方式:

主存地址结构划分:

主存块号 块内地址
主存字块标记(20位) + cache组号(2位) = 22位 6位

查找策略:
假如访问地址为:1…0101 001110

  1. 根据主存块号后2位确定cache组号
  2. 如果主存块号前20位与cache分组内某行标记匹配且有效位为1,则cache命中,访问块内地址为001110的单元
  3. 若cache不命中或有效位为0,则正常访问内存

三种映射方式附图:
在这里插入图片描述

二、cache容量计算

由于Cache行数比主存块数少得多,因此Cache只能存放主存中的一部分信息,于是Cache要为每一块数据增加一个标记项,来指明它是主存中哪一块的副本,所以在计算cache容量时,需要同时分析标记项位数和cache数据块的位数。

1. 先计算cache行标记项位数

每个cache行都会对应一个标记项,用于标记当前cache行保存的数据状态,cache行标记项包含:

有效位 标记位 脏位 替换控制位
1bit 主存字块标记 1bit 与替换算法有关

* 有效位:(一定有)固定占 1 位,由于cache未装进数据块时,主存字块标记默认为0,所以有效位是为了区分当前cache块是没装数据还是装了一个主存第0的数据
* 标记位:(一定有)主存字块标记位数,用于标识当前cache行存放的主存哪一行数据,计算方法见上
脏位:(特定条件下才有)也叫一致性维护位,只有当cache写策略采用 写回法 时,该位生效并且占 1
替换控制位: (特定条件下才有)或叫替换算法位,用于标记替换cache哪一行会被换出,在cache替换策略中,当采用 LRU和LFU替换算法 时,这个控制位会作为被换出的依据。
脏位和替换控制位相关:计组——cache替换算法及cache写策略

注意:由于Cache是相联存储器,是按内容寻址的,并没有划分地址结构,Cache行标记项里面子项的顺序不需要刻意追究。

2. 再计算cache块位数

题目中一般会以各种方式较为直观的给出,cache块大小和主存块大小是一致的,很方便算出一个块所占据的位数。
数据位:由于主存块和cache块的交换是以 为单位,所以数据位即就是一个数据块的数据位数。

3. 计算cache行的位数

c a c h e 行的位数= c a c h e 行标记项位数+ c a c h e 块位数 cache行的位数=cache行标记项位数+cache块位数 cache行的位数=cache行标记项位数+cache块位数

⭐⭐⭐注意:2021年408考察了这个知识点,见下面[真题嗅探]部分

4. 最后计算cache总容量

根据cache总容量和cache块大小求得cache行数,最后
c a c h e 总容量 = c a c h e 行数 × c a c h e 行的位数 cache总容量=cache行数\times cache行的位数 cache总容量=cache行数×cache行的位数
c a c h e 总容量 = c a c h e 行数 × ( c a c h e 行标记项位数 + c a c h e 块位数 ) cache总容量=cache行数\times(cache行标记项位数+cache块位数) cache总容量=cache行数×(cache行标记项位数+cache块位数)

三、真题嗅探

【例】(2020年408)主存地址32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联,直写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB。
【分析】主存块大小为64B=26B,则块内地址占6位,再根据主存地址32位,可知主存块号占32-6=26位,32位主存地址划分为:

主存块号 块内地址
26位 6位

8路组相联 --> 每个分组包含8个块(每个分组都会进到特定的Cache组)
再由数据块大小32KB --> 总共有32KB/64B=512块,8块一组,512/8=64=26个分组,组号占6位
主存块号进一步被划分为:字块标记和组号
得到最终的地址结构:

字块标记 组号 块内地址
20位 6位 6位

LRU替换算法,淘汰最近最久未访问的Cache块,当一个分组内8个块已满时,要进行选择淘汰,8个块需用3位进行标记,因此LRU占3位

题目中给出采用直写策略,那么数据发生变更时,会同时修改Cache和主存,因为不需要修改位(脏位)。

那么对应的Cache行标记项结构

有效位 标记位 脏位 替换控制位
1bit 20位 0位 3位

Cache块的匹配过程

若CPU最先开始访问地址为0001003H的指令:

字块标记 组号 块内地址
00000000000000010000 {\color{blue} 0000 0000 0000 0001 0000} 00000000000000010000 000000 {\color{DarkOrange} 0000 00 } 000000 00 0011

步骤:

  1. 首先根据组号,组号为0
  2. 检查0号分组内的Cache行,有效位均为0,因此Cache访问缺失
  3. 然后去主存读取 00000000000000010000 {\color{blue} 0000 0000 0000 0001 0000} 00000000000000010000 000000 {\color{DarkOrange} 0000 00 } 000000 主存块,并将其整块放入Cache第0组的任意一行
  4. 将Cache行标记项的有效位设为1,标记位设为 00000000000000010000 {\color{blue} 0000 0000 0000 0001 0000} 00000000000000010000,并修改LRU位
  5. 之后再访问该指令,根据组号找到Cache分组,再根据标记位找到对应的Cache块(此时有效位是1),再根据块内地址 000011 在Cache行中读出指定的数据。

【例】(2021年408)若计算机主存地址为32位,按字节编址,cache数据区大小为32KB,主存块大小为32B,采用直接映射方式和回写(Write back)策略,则cache行的位数至少是()
[分析]这里采用「直接映射方式」,特点是:多个块会映射到同一行,这样会产生不必要的换入换出,只要缺页发生,就一定会发生替换,因此不需要替换算法位,故我们不考虑这个替换算法位。

评论区有位同学很严谨,发现并指出了这里的先前的错误分析,这里已做修正.

第一步,确定主存地址划分
主存块大小=32B,按字节编址 --> 字块内地址占5位
主存块大小=cache块大小=32B,cache数据区大小为 32KB --> cache总共有32KB/32B=1K行
cache主存采用直接映射方式 --> cache行号占10位
所以字块内标记占32-10-5=17位
因此主存地址划分如下:

字块内标记 cache行号 块内地址
17位 10位 5位

第二步,确定cache行对应标记项
采用回写法,脏位1位

有效位 标记位 脏位 替换控制位
1位 17位 1位

第三步,得到cache行的位数
cache行位数=cache数据块位数+对应标记项位数
=32B+19bit
=32*8bit +19bit
=275bit

无它,惟有勤习之~各位加油!

感谢你的认真阅读,如果你觉得这篇文章对你有用,欢迎点赞和加关注。
如果你在计算机408的学习过程中还有难懂的问题,欢迎在评论区留言,我会在空闲时间挨个整理更新出来~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计组——彻底搞懂cache主存映射以及cache容量的计算 的相关文章

  • 数据结构算法分析怎么写_408数据结构算法设计题分析!

    算法设计题是408数据结构的必考题 xff0c 一般有14分左右 xff0c 相当于7道选择题 很多考生反映在做算法设计题时很茫然 xff0c 尤其是跨考的考生 xff0c 表示读完题目后完全没有思路 xff0c 不知从何下手 虽然这些题目
  • 计算机保研复习专业课篇(408+数学+部分专业课)

    1 计组 1 xff09 总线是什么 1 xff09 总线是一组能功能部件之间分时共享的公共信息传送线路 分时 共享是它的两大特点 2 xff09 分时是指同一时刻只能有一个部件向总线上发出信息 3 xff09 总线分为三大类 xff1a
  • 计算机保研面试常见问题(408数据结构简答题)

    1 什么是时间复杂度 xff1f O xff08 n xff09 的O代表了什么 xff1f 答 xff1a 时间复杂度是指执行算法所需要的计算工作量 xff0c 可以用于描述一个程序的规模 O xff08 n xff09 中的O表示的是最
  • 计算机保研面试常见问题(408操作系统简答题)

    1 操作系统的特点和功能是什么 xff1f 答 xff1a 操作系统的特点是并发 共享 虚拟 异步 其中 xff0c 并发和共享是操作系统主要的特点 操作系统的功能主要包括 xff1a 处理机管理 存储器管理 设备管理和文件管理等 操作系统
  • 计算机保研面试常见问题(408计算机网络简答题)

    1 能介绍一下OSI七层模型各层之间的功能与对应的协议吗 xff1f 答 xff1a OSI七层模型自底向上依次是 xff1a 物理层 数据链路层 网络层 运输层 会话层 表示层 应用层 各层的功能与相应的协议有 xff1a 物理层 xff
  • 2014年408专业算法题

    文章目录 0 结果1 题目2 思路附录 0 结果 1 题目 2 思路 二叉树的带权路径长度 xff08 WPL xff09 的计算方法有两种 xff1a 1 xff0c 定义 xff1a W P L 61
  • 2017年408专业算法题

    文章目录 0 结果1 题目2 思路附录 0 结果 1 题目 2 思路 因为要转换为中序表达式 xff0c 因此使用中序遍历 在中序遍历的过程中 xff0c 对于当前访问的非空结点p xff0c 则先输出 34 xff0c 然后递归调用左子树
  • 异常处理的返回

    异常处理的返回 异常可以分为四类 中断 interrupt 陷阱 trap 故障 fault 和终止 abort 这几种异常处理之后又有不同的返回方式 总的来讲 类别 原因 异步 同步 返回行为 中断 来自I O设备的信号 异步 总是返回到
  • 数据结构—快速掌握如何手动求解关键路径

    看到一道题 分析如何手动求解关键路径 文末有题目出处 如上图 红点表示状态 边表示活动及其所需要的时间 这是用箭线表示活动 节点表示事件的一种网络图绘制方法 也称为双代号网络图 AOA 下面我们将利用其它快捷方法求出关键路径 方法一 逆推法
  • VsCode配置之verilog

    原文 https blog csdn net qq 39498701 article details 84668833 步骤一 更换Vivado自带文本编辑器 第一步 打开Vivado 再Tool菜单中 打开Settings 第二步 在Se
  • 计组——大端方式和小端方式以及边界对齐相关题目

    大端方式和小端方式相关题目 1 大端方式和小端方式 2 边界对齐 3 真题嗅探 1 大端方式和小端方式 大端方式 现代人正常的阅读顺序 从左向右 小端方式 古代人的阅读顺序 联想一下对联横批或牌匾 从右至左 虽然小端方式是从右至左 但不是完
  • 算法(二)

    目录 0 前言 1 海明码的使用 2 理解海明码需要明白的知识 a 奇偶校检法 b 异或运算 3 海明码的原理 a 海明码原理的概述 b 多个校检位的设计 c 校检位个数的计算 d 海明码的总结 4 举例 a 计算校检码的个数 b 计算每一
  • 计组

    目录 一 知识点 1 寻址方式什么 2 根据操作数所在的位置 都有哪些寻址方式 3 直接寻址 4 立即寻址 5 隐含寻址 6 相对寻址 7 寄存器 8 寄存器 寄存器型 RR 寄存器 存储器型 RS 和存储器 存储器型 SS 9 基址寻址方
  • [Error] invalid operands to binary ^ (have ‘double‘ and ‘float‘)

    C C 中不能直接使用 在C C 中不能使用 来表示指数 只能用 如果想使用指数 只能建立循环多次相乘或者直接用乘法写出多个 下面是我的代码 注释部分为原来使用的指数形式 会报以上错误 或者引用数学函数 在前面加上 include
  • 计算机网络知识汇总(超详细)

    目录 第一章 概念 组成 功能 和 分类 计算机网络概念 计算机网络功能 计算机网络的组成 计算机网络的分类 总结 标准化工作及相关组织 标准化工作 标准化工作相关组织 总结 计算机网路的速率 带宽 吞吐量 1 速率 2 带宽 3 吞吐量
  • 2017 408选择题错题

    2017 408选择题错题 1 下列函数的时间复杂度是 int func int n int i 0 sum 0 while sum lt n sum i return i sum i 等于 sum sum i sum 0 i 0 sum
  • 王道——计算机网络

    第一章 以太网典型网络 协议 网络设备 网络体系结构 计算机网络 概念 网络包含计算机网络 计算机网络 分散的具有独立功能的计算机系统 通过通信设备与线路连接起来 由功能完善的软件实现资源共享和信息传递的系统 在端系统上安装软件 实现资源共
  • 【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系

    目录 无符号跳转表示法 有符号跳转表示法 无符号跳转表示法详解 有符号跳转表示法详解 无符号跳转表示法 小于 大于等于 小于等于 大于 有符号跳转表示法 小于 大于等于 小于等于 大于 无符号跳转表示法详解 我在学习这部分的最大的困惑点就是
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 【408】计算机学科专业基础 - 计算机组成原理

    一 计算机系统概述 复习提示 本章是组成原理的概述 考查时易针对有关概念或性能指标出选择题 也可能综合后续章节的内容出有关性能分析的综合题 掌握本章的基本概念 是学好后续章节的基础 部分知识点在初学时理解不深刻也无须担忧 相信随着后续章节的

随机推荐

  • 2022年陕西省中等职业学校技能大赛网络搭建与应用赛项《 服务器配置及应用竞赛报告单 》

    2022年陕西省中等职业学校技能大赛 网络搭建与应用赛项 服务器配置及应用竞赛报告单 网络搭建与应用赛项执委会及专家组 2022年5月20月
  • 爬虫 — Js 逆向案例三凡科网登录

    目标网站 https i fkw com ta 3 需求 找到密码加密的过程 进行加密 案例分析 1 抓到向服务器发请求的数据包 输入错误的账号和密码 测试密码可以输入123456 如果发现加密后的密码为 e10adc3949ba59abb
  • 顺序表中的查找,插入,删除操作

    已知一个顺序表L 其中的元素递增有序排列 1 查找第一个值等于e的元素 并返回其下标 int findElem Sqlist L int e int i for i 0 i
  • 闭环系统的零极点图判定稳定性_控制系统的稳性分析.ppt

    控制系统的稳性分析 当特征方程的根均为负实根或实部为负的共轭复根时 系统稳定 先假设K的大致范围 利用roots 函数计算这些K值下特征方程的根 然后判断根的位置以确定系统稳定时K的取值范围 程序如下 k 0 0 01 100 for in
  • 软件设计模块之间7种耦合关系

    一般来说 模块之间的耦合有七种类型 1 根据耦合性从低到高为非直接耦合 数据耦合 标记耦合 控制耦合 外部耦合 公共耦合和内容耦合 2 两个模块之间没有直接关系 它们之间的联系完全是通过主模块的控制和调用实现的 这种耦合为 非直接耦合 3
  • 抖音快手短视频推广方式

    之前的快手短视频主要集中在三四线城市以及农村等消费力不强的用户群体上 没能有力的抓住主流用户的眼光 如今在一二线城市大放异彩的抖音短视频让厂商们再也无法无视短视频对于用户的吸引力 有了短视频这一全新渠道 怎么更为有效的利用渠道成了各级厂商新
  • Ubuntu16.04 + Titan XP + cuda8.0 + cudnn5.1 + opencv3.3.0 + caffe

    1 安装Ubuntu16 04 制作一个启动盘之后BIOS切换到U盘启动就好辣 跟着提示走 需要注意的是安装系统的时候不能插网线 否则界面会在选择时区那里一直循环 2 NVIDIA显卡驱动 如果直接添加源然后sudo apt get ins
  • 17种安全native反调试收集

    这个资料是我去年刚接触安卓安全时整理的 90 的反调试都有 基本收集全了 实际还少3种 大部分方法是收集的网络上的资料 来自于 1 Anti debugging Skills in APK wooyun 2 Android逃逸技术汇编 36
  • poj 3278 Catch That Cow bfs+注意范围

    题 错了好几次 分别是 RE 运行时错误 因为访问了下标为 1的数组 定位在搜索 1方向的条件 MLE 内存超限 q push没有筛选 重复的都放进去就会MLE WA 忘记多组样例了 注意 为了防止2的数字太大 要有if temp n lt
  • PHPStorm更改为Apache服务端口,及修改默认的网站目录为PHPStorm的工作目录

    由于最近在学习PHP 当提交表单表单时 总是无法正确找到对应页面 搜索了半天 有人说不要用它内置的服务器 也就是将默认的服务器改为Apache服务器的端口 1 更改为Apache的服务器端口 File Settings 选择Build Ex
  • Linux Mint Qt5 开发环境搭建

    这篇文章原本是我的老师要求写的 他老人家要求要百分之百详细 所以步骤都写的非常详细 适合新手参考 1 下载 Qt5 离线安装包 下载地址 http www qt io download open source 进入后 请注意页面最下方有个
  • DB2 静态 SQL 和动态 SQL 的比较与实践

    转自 http www ibm com developerworks cn data library techarticles dm 0910yangxh index html ca drs cn 1026 引言 SQL 语言作为标准的查询
  • Django(三)接口自动化平台HttpRunnerManager(1)本地部署

    前言 本章主要讲述HttpRunnerManager本地部署 我这里本地是Windows 所以我就在windows下面搭建了 环境 mysql 5 7 django 2 0 3 python 3 6 8 一 HttpRunnerManage
  • 解决phpstudy mysql 启动不了的问题

    1 端口监测 查看3306 的端口是否被占用 如占用 停止进程 2 服务没有启动 因为学习python 我把phpstudy的mysql升级到了mysql8 0 sc delete mysql 删除已经注册的mysql服务 期间升级mysq
  • 微软官网操作系统下载方法

    首先 打开百度官网 https www baidu com 然后 在输入框中输入 微软官网 下载win7 后回车即可 这里以下载win7为例其他操作系统下载方法与其一致 接着 在页面中寻找网站开头地址为微软官网地址 https www mi
  • 正高职称相当于公务员的什么级别?为什么有人说评上正高就值了

    事业编分为管理岗和专技岗 正高级职称就是专技岗的一种 专技岗分为初级岗 中级岗和高级岗 其中高级职称又分为副高和正高 正高级职称相当于公务员中的正处级 也就是大家常说的正县级 正高级职称分为四级 正高一级 正高二级 正高三级和正高四级 正高
  • Kaldi HCLG 深入理解

    1 相关部分包含的主要任务 1 1 WFST Key Concepts determinization minimization composition equivalent epsilon free functional on deman
  • 【1】Midjourney新手必读

    Midjourney官网网站 https www midjourney com 问题一 Midjourney是什么 Midjourney 是 AI 生成算图工具 输入文字就会自动产生图像 目前架设在Discord频道上 问题二 Discor
  • opencv获取多个摄像头名字和编号

    因为项目需要 利用opencv读取多个摄像头 但没法确定摄像头的编号 查看opencv的源码 摄像头的id主要利用了listDevices这个函数 自己把这个函数单独提取出来 根据vector lt gt 中的排序 得到摄像机id int
  • 计组——彻底搞懂cache主存映射以及cache容量的计算

    cache主存映射以及cache容量 一 三种映射方式 1 全相联映射 2 直接映射 3 组相联映射 二 cache容量计算 1 先计算cache行标记项位数 2 再计算cache块位数 3 计算cache行的位数 4 最后计算cache总