当前位置: 首页 > news >正文

通过访存地址获取主存数据的过程

目录

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&#xff0…...

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年左右,智能系统接入音箱市场,智能音箱行业在中国市场兴起。但大潮激荡,阿里、小米、百度三大巨头凭借自身强大的资本、技术、粉丝群强势入局,形成三足鼎立态势。经过几年快速普及,智能音箱整体渗透率极高&#xf…...

逻辑与集合论基础及其在编程中的应用

目录 第一篇文章:逻辑与集合论基础及其在编程中的深度应用 引言 命题逻辑与谓词逻辑在编程中的深入应用 集合论及其在编程中的深度运用 函数的概念及其与集合的结合 总结与应用 第一篇文章:逻辑与集合论基础及其在编程中的深度应用 引言 逻辑与集…...

【无标题】为什么 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 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 public int[] intersection(int[] nums1, int[] nums2) {ArrayList<Integer> list new ArrayList<>();Has…...

Metasploit漏洞利用系列(八):MSF渗透测试 - PHPCGI漏洞利用实战

在本系列的第八篇文章中&#xff0c;我们将深入探索如何利用Metasploit Framework (MSF) 来针对PHPCGI (PHP Common Gateway Interface) 的漏洞进行渗透测试。PHPCGI作为一种将Web服务器与PHP脚本交互的方式&#xff0c;其不恰当的配置或老旧版本中可能存在的漏洞常被攻击者利用…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...