通过访存地址获取主存数据的过程
目录
1.根据访存地址在Cache中查找数据
2.如果在Cache中命中
3.如果没有命中
4.数据送CPU
5.做几道题:
主要厘清思路,中间细节需自行补充!
1.根据访存地址在Cache中查找数据
① 访存地址的结构会根据Cache和主存之间的映射方式不同而改变。映射方式有三种:直接映射,全相联映射和组相联映射(这里不细讲,还不清楚的可以到主页搜关键词或者回看书)。
注意:
第一点:
Cache只是保存了主存的一部分副本,主存会将某些主存块复制到Cache中,也就是Cache行中。也就是Cache行的大小等于主存块的大小。所以不能把Cache行想象为一行一行的结构,因为里面包含很多个存储单元。
第二点:
在直接映射中,有下面的关系图,可能会有人误解,Cache是由Cache行号和块内地址组成的,不是这样的。
这里这样画的原因:
Cache的块数(行数)比主存块数小很多,所以表示Cache块的位数肯定比表示内存块的位数小。这里的位数差就可以反映Cache和主存的容量差。(例如,主存块为16块(2^4),Cache块为4块(2^2),那么2^4/2^2=4,主存容量就是Cache容量的4倍)。
假设主存块号为13,Cache总行数为4(也就是只拷贝了主存的4个主存块)。那么其Cache行号=13%4=1。主存块号用二进制表示出来是1101。这里的01,和上面作余求出来的结果是一样的。所以用主存块号的低位就可以计算出Cache的行号,具体用低几位?
那就要看Cache的总行数,例如上面Cache行为4,那么用2位(2^2)就可以表示Cache行号了。
那么主存块号的高位用来作什么呢?主存块号的高位,我们称之为"标记位"。在Cache行中也有相应的标记位。将主存地址的高位的标记位与Cache中的标记位进行匹配。如果匹配成功,且Cache的有效位置"1"。那么就表示"命中"。也就是CPU想要的数据可以在Cache中找到,不需要访存了。
所以Cache数据区的容量比主存小很多,小多少可以看两者位数的差值(差的位数),而两者的差值正好对应tag的位数。例如:根据主存容量是 Cache 容量(当然是数据部分Cache)的 4096 倍。那么tag位就有12(2^12)位。
结论:tag位数=log2(主存大小/Cache数据区大小)
第三点:
那么Cache的真正结构是什么呢?
上面反复提到了Cache的数据区。首先我们要明白,我们常说的Cache块的大小和主存块大小相同实际指的是数据Cache(Cache的数据部分)。例如下图,主存块大小为64B,那么Cache的数据部分就是64B。
相对于主存块,Cache还有额外的标记项,上面的标记项忽略了脏位和替换控制位,实际的Cache行标记项:
在组相联映射中将每组各行的标记项排成一行,将各组从上到下排列,构成一个二维的标记阵列。查找 Cache时就是查找标记阵列的标记项是否符合要求。二路组相联的标记阵列如图
2.如果在Cache中命中
以直接映射为例,首先会根据访存地址的主存块号的低位找到相应的Cache行,接着对比这个Cache行对应的标记位,如果标记位相同,且有效位为"1",则命中。这时根据访存地址的块内地址,在Cache行中存取信息即可。
3.如果没有命中
则需要到主存中找读数据,这就需要将逻辑地址转换为物理地址(涉及操作系统--内存管理内容),并且根据物理地址,在主存中查找相应的数据。
以页式存储管理为例:

拿个题举例:
一分页存储管理系统中,逻辑地址长度为16位,页面大小为4k,现有一逻辑地址为2F6AH(十六进制),页号对应块号如下表,求逻辑地址2F6AH对应的物理地址。

① 将十进制转换为二进制为0010 1111 0110 1010 页号 页内地址
② 由于页面大小(内存块大小)为4K,那么页内地址位数:4K=2^2*2^10=2^12。那么页号位数就是16-12=4位。页号(0010)=2,对应块号是7(0111)。
③ 物理地址:
块号+页内地址:0111 1111 0110 1010 块号 页内地址
④ 最后将这个地址写为16进制就行。
其他的,具有快表的地址变换机构,以及其他的内存管理方式(段式存储管理,段页式存储管理)可以看这篇:(计算机组成原理和操作系统这两部分一定要结合起来学)
http://t.csdnimg.cn/C6fw7
4.数据送CPU
在主存中找到相应数据后,还需要将数据送到Cache行中。将标记设为地址的高位,有效位置"1"
同时将该地址的内容送CPU。
直接映射:对于直接映射,主存中的每一块只能装入Cache的对应行(主存块号%Cache总行数)。所以将数据送到对应Cache行中即可。
全相联映射:将数据送到Cache的任意空闲行中。
组相联映射:送到相应的Cache组内的任意空闲行中。
注意:即使CPU要找到数据对应存在于主存的某个存储单元中,但是CPU还是会读出这个存储单元所在的内存块的一整块信息送到对应的Cache行中。
5.做几道题:

地址映射表,即标记阵列,指的是Cache的标记项(有效位,脏位,替换控制位,标记位),由于这里忽略了脏位和替换控制位,所以只需要考虑有效位(1位)和标记位:
标记位有多少位呢?
根据主存容量是 Cache 容量的 4096 倍。那么tag位就是12位(2^12)。所以标记项就是12+1=13位。
又因为Cache有64块,所以地址映射表大小:64*13bit

这里的有效容量指的就是Cache的数据部分,每块16B,那么Cache行大小=主存块大小=16B=2^4。
① Cache中总共有多少Cache块:2^7*2^10=2^17 2^17/2^4(16B)=2^13
② 总共有多少cache组:2^13/2^3(8路组相联)=2^10
③ 主存地址:标记(剩余部分)+组号(10位)+块内地址(4位)
1234567H=0001 0010 0011 01 00 0101 0110 0111
00010010001101转化为16进制,答案C。

直接映射方式:主存地址:标记+行号+块内地址
① 主存容量(2^20)是Cache容量(2^4*2^10=2^14)的2^6倍,所以标记位为6位。
② 每字32位,块内地址为5位(2^5)
③ 主存地址:0011 0101 0011 0000 0001
010011000换算为十进制:152

组相联映射中,主存地址的组成:标记+组号+块内地址
主存块大小和Cache块大小都增加一倍,那么块内地址位数+1(自己想一下2^2=4是2^1=2的一倍)。
n路组相联表示每组中包含n个Cache行,Cache的总容量不变,Cache的大小增加一倍,那么Cache行数减少一倍,组数自然减少一倍(试想一下,8行2路,则有4组,现在4行2路,则只有2组)。块内地址和组号一增一减,tag位数不变。

直接带选项,拿B选项举例:
直接映射:
① 主存按字节编址,块大小是16B,所以先要计算主存单元在哪个主存块中:
由于主存单元从0开始编号,则48号主存单元,其实是第49个主存单元:49/16=3.065。则存放在第4个主存块中,主存块号是3
② 主存块号是3,再余Cache行数,3%16=3。则存放在3号Cache行。
另一个同理,308/16=19 19%16=3。
组相联映射:
48号存储单元主存块号是3,余Cache组号(8组):3%8=3。
另一个同理:19%8=3。
都存放在3号Cache组中,所以可能发生冲突。

采用全相联映射,主存地址:标记+块内地址
主存块大小为1个字(32位)=4B,所以用2位表示即可。剩余30(32-2)位为标记
Cache容量=存储容量+标记阵列容量
① 题目中已经告知存储容量为32K字数据:2^5*2^10*2^5=2^20
② 题目中采用回写法(脏位1)随机替换策略(不需要替换控制位)。所以每个Cache行的标记项组成:
有效位(1)+脏位(1)+标记位(30)=32
③ Cache块可以存放32K字数据,主存块大小=Cache块大小=1个字。所以Cache块数为
2^15(32K=2^5*2^10)
④ 所以Cache容量:2^20+(1+1+30)*2^15=2^10(1024+1024)=2048K
相关文章:
通过访存地址获取主存数据的过程
目录 1.根据访存地址在Cache中查找数据 2.如果在Cache中命中 3.如果没有命中 4.数据送CPU 5.做几道题: 主要厘清思路,中间细节需自行补充! 1.根据访存地址在Cache中查找数据 ① 访存地址的结构会根据Cache和主存之间的映射方式不同而改变。映射方式…...
sqlite3交叉编译问题(对‘fcntl64@GLIBC_2.28’未定义的引用)
使用rk3568的编译器交叉编译程序,报如下错误: libsqlite3.so:对‘fcntl64GLIBC_2.28’未定义的引用 libsqlite3.so:对‘logGLIBC_2.29’未定义的引用在网上查了下这个问题的原因可能是在GLIBC库2.28版本中, "fcn…...
每天一个数据分析题(四百九十六)- 决策树模型
回归树是可以用于回归的决策树模型,一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。以下哪个指标可用于回归树中的模型比较 A. Adjusted R2 B. F-measure C. AUC D. Precision & Recall 数据分析认证考试…...
七牛云 CDN 视频瘦身,为视频分发「减负增效」
随着智能设备的普及,以及各种以分享视频为主的平台的兴起,人们记录生活、分享故事的方式不再局限于文字和图片,而是越来越多地通过视频来表达。视频也不再需要复杂的制作过程,变得随手可得。 然而,视频在互联网上的爆炸…...
使用html-docx-js + fileSaver实现前端导出word
因为html-docx-js是16年的老库了,它代码里面用到的with语法现在严格模式不允许,用npm直接引入会报错,所以我们需要用其它方式引入 首先要将html-docx-js的代码放到项目中 html-docx-js/dist/html-docx.js at master evidenceprime/html-do…...
Spark2.x 入门:DStream 输出操作
在Spark应用中,外部系统经常需要使用到Spark DStream处理后的数据,因此,需要采用输出操作把DStream的数据输出到数据库或者文件系统中。 这里以《Spark2.1.0入门:DStream输出操作》中介绍的NetworkWordCountStateful.scala为基础…...
Python爬虫——简单网页抓取(实战案例)小白篇
Python 爬虫是一种强大的工具,用于从网页中提取数据。这里,我将通过一个简单的实战案例来展示如何使用 Python 和一些流行的库(如 requests 和 BeautifulSoup)来抓取网页数据。 实战案例:抓取一个新闻网站的头条新闻标…...
linux,ubuntu,使用ollama本地部署大模型llama3,模型通用,简易快速安装
文章目录 前言安装ollama启动ollama运行llama3模型查看ollama列表删除模型通过代码进行调用REST API 前言 在拥有了一条4090显卡后,那冗余的性能让你不得不去想着办法整花活,于是就想着部署个llama3,于是发现了ollama这个新大陆,…...
JS中的encodeURIComponent函数示例
JavaScript中的encodeURIComponent函数用于对字符串进行URL编码。它将字符串中的特殊字符转换为相应的编码形式,以确保字符串可以安全地嵌入到URL中。 使用encodeURIComponent函数时,它会将除了字母、数字、-、_、.、~以外的所有字符都进行编码。编码后…...
8.20 pre day bug
pre-bug1 分号省略 这些语句的分隔规则会导致一些意想不到的情形,如以下的一个示例; let m n f(bc).toString()但该语句最终会被解析为: let m n f(ab).toString();returntrue一定会被解析成 return;true;pre-bug2 Math.random()与Mat…...
位运算专题
分享丨【题单】位运算(基础/性质/拆位/试填/恒等式/思维) - 力扣(LeetCode) Leetcode 3133. 数组最后一个元素的最小值 我的答案与思路: class Solution { public: // 4 --> (100)2 7 --> (0111)2 // 5 --&g…...
HaProxy学习 —300K的TCP Socket并发连接实现(翻译)
HaProxy学习 —300K的TCP Socket并发连接实现(翻译) 1 原文链接2 原文翻译2.1 调整Linux系统参数2.2 调整HAProxy 1 原文链接 Use HAProxy to load balance 300k concurrent tcp socket connections: Port Exhaustion, Keep-alive and others࿰…...
92.WEB渗透测试-信息收集-Google语法(6)
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:91.WEB渗透测试-信息收集-Google语法(5) 监控的漏洞也有很多 打…...
[数据集][目标检测]木材缺陷检测数据集VOC+YOLO格式2383张10类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2383 标注数量(xml文件个数):2383 标注数量(txt文件个数):2383 标注…...
【启明智显分享】智能音箱AI大模型一站式解决方案重塑人机交互体验,2个月高效落地
2010年左右,智能系统接入音箱市场,智能音箱行业在中国市场兴起。但大潮激荡,阿里、小米、百度三大巨头凭借自身强大的资本、技术、粉丝群强势入局,形成三足鼎立态势。经过几年快速普及,智能音箱整体渗透率极高…...
逻辑与集合论基础及其在编程中的应用
目录 第一篇文章:逻辑与集合论基础及其在编程中的深度应用 引言 命题逻辑与谓词逻辑在编程中的深入应用 集合论及其在编程中的深度运用 函数的概念及其与集合的结合 总结与应用 第一篇文章:逻辑与集合论基础及其在编程中的深度应用 引言 逻辑与集…...
【无标题】为什么 pg_rewind 在 PostgreSQL 中很重要?
文章目录 pg_rewind 的工作原理使用 pg_rewind 的要求Basic Usage of pg_rewind重要注意事项:为什么 pg_rewind 需要干净关闭?无法进行干净关闭的情况处理不正常关机结论 pg_rewind 是 PostgreSQL 中的一个实用程序,用于将一个数据库集群与另一个数据库集…...
hostapd生成beacon_ie
配置文件 /data/vendor/wifi/hostapd/hostapd_wlan0.conf 配置参数 AP启动过程:1.上层配置一些参数并根据参数生成配置文件 2.init的时候设置默认参数并加载配置文件上的参数(如果重复,以配置文件上的设置优先) 相关函数及结构…...
leetcode349:两个数组的交集
两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 public int[] intersection(int[] nums1, int[] nums2) {ArrayList<Integer> list new ArrayList<>();Has…...
Metasploit漏洞利用系列(八):MSF渗透测试 - PHPCGI漏洞利用实战
在本系列的第八篇文章中,我们将深入探索如何利用Metasploit Framework (MSF) 来针对PHPCGI (PHP Common Gateway Interface) 的漏洞进行渗透测试。PHPCGI作为一种将Web服务器与PHP脚本交互的方式,其不恰当的配置或老旧版本中可能存在的漏洞常被攻击者利用…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...






