关于CPU对Cache的访存操作 浅解

news2025/1/14 19:42:58

最近在做计算机组成原理关于高速缓存处理器的相关习题,由于一开始没有完全理解导致做题时特别崩溃。在做错无数次题后我感觉自己有必要总结一下自己对Cache的理解,以防以后再忘记。

一 | 前因

1 为什么需要Cache?

首先我们需要明白为什么需要使用Cache。在CPU访存时,其实是要取主存中存储的数据,但由于 CPU的访问速度远远大于主存的读、取数据的速度,所以需要在他们之间使用一种更快的介质作为缓存,将我们当前常用和与当前访问的数据空间相接近的数据存储到这个缓存中。

在上面这段话中,我们常用到的缓存就是 高速缓冲存储器Cache ;而利用数据在存储空间上的邻近的这种思想叫做 空间局部性原理 ;利用当前使用数据在未来很可能还会用到的这种思想叫做 时间局部性原理

2 Cache是什么?

Cache通常由SRAM构成,其位于存储器层次结构的顶层,这也就意味着它的 速度很快、容量较小、价格较高 。在速度上应该仅次于寄存器,有着一器之下,好几器之上的地位。

3 Cache如何起作用?

当CPU发起读请求时,会先在Cache中查找数据(假设是找一个字),如果找到了,则称为 访存地址在Cache中命中 。此时就对Cache进行读操作,就不需要访问主存了;若没有命中,则再访问主存,并把此字所在的块一次性从主存调入Cache

以上过程均由 硬件实现 。【注:有些计算机也会同时访问Cache和主存,优点是可以提高平均访问时间,缺点是设计结构更复杂】

二 | Cache与主存

1 Cache和主存中都存些什么?

为了便于Cache和主存交换信息,Cache和主存都被划分为相等的 。Cache块又叫做Cache行,每个“块”由若干字节组成,块的长度被称为块长。

从一的解释中,我们可以知晓Cache只是为了加快CPU对主存中数据的访问的中间介质,所以在Cache中存储的数据是主存中最活跃的部分数据的副本。由于计算机中存储的都是01数据,所以只需要明白Cache和主存分别存储与什么相关的01位代码即可,也即,明白它们的存储地址结构即可。

2 关于主存和Cache的存储地址结构

因为Cache比主存小,所以无法一对一映射。而访存地址都是与主存地址保持一致的,所以我们需要能够从主存地址推得其Cache中存储地址的映射方式。通常有三种方式:①直接映射 ②全相联映射 ③组相联映射。详细映射方式在此不介绍,需要注意的是 它们的地址结构都是主存中存储的地址结构 。而不是Cache中的。

直接映射 地址结构:

全相联映射 地址结构:

组相联映射 地址结构:

其中,块内地址计算方式取决于单个块的容量以及计算机编址方式(没说明就是按字节编址)。如若每个Cache块的容量为2bB,则块内地址为b位。

Cache行号和组号很容易根据Cache的行数和组数算出,如Cache有2c行,则Cache行号占c位。

然后再根据主存总容量,设为2kB,则总的地址长度就应为k位,那么可以得到,直接映射中标记的位数为 k - b - c;

Cache的地址结构通常如下:

  • 有效位:又称为装入位,用来表示对应页面是否在Cache中
  • 脏位:又称为修改位,用来表示页面是否被修改过 (当不考虑一致维护性时,则没有该位)
  • 替换控制位:当使用替换算法时,需要用控制位表示使用时间长短 (当不使用替换算法时,则没有这位,如采用直接映射)
  • 标记位:用于表示是主存中哪一块的副本

根据Cache的地址结构,我们可以将Cache的总容量划分为两部分,如下:

  1. 存储容量(即存储的数据)
  2. 标记阵列容量(包括有效位、脏位、替换控制位、标记位)

通常题目中给出Cache行长xxB,指的都是存储容量。

如果你看懂了,希望能给作者点一个免费的赞,鼓励一下。如果还有没理解的欢迎在评论区一起交流。作者能力有限,若有错误,还望斧正。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Shader:闪烁

还是一样的分为UI闪烁和物体闪烁,其中具体可分为:UI闪烁、物体闪烁与半透明闪烁 1,UI闪烁 对于UI 还是一样的,改写UI本身的shader: Shader "UI/YydUIShanShder" {Properties{[PerRendererData] _MainTex("Sprite Texture", 2D) = "white"…

[PM]敏捷开发之Scrum总结

在项目管理中,不少企业和项目团队也发现传统的项目管理模式已不能很好地适应今天的项目环境的要求。因此,敏捷项目管理应运而生,本文将为大家介绍Scrum敏捷项目管理以及应用方法。 什么是Scrum敏捷项目管理 敏捷项目管理作为新兴的项目管理模…

一键生成动漫头像小程序源码-含搭建教程

这款程序用来做小程序矩阵,非常不错,可以把他放到你的其他小程序里,或者其他程序系统来弥补程序的丰富性,拓展可玩性。 很多抖音直播也在玩这个,玩法很简单,可以去参考那些直播间 这款程序没有后台&#xf…

python_PyQt5开发验证K线视觉想法工具V1.2_批量验证

目录 运行情况: ​编辑 结果json文件格式: 代码: 承接 【python_PyQt5开发验证K线视觉想法工具V1.1 _增加标记类型_线段】 博文 地址:python_PyQt5开发验证K线视觉想法工具V1.1 _增加标记类型_线段_程序猿与金融与科技的博客-…

使用node.js 搭建一个简单的HelloWorld Web项目

文档结构 config.ini #将本文件放置于natapp同级目录 程序将读取 [default] 段 #在命令行参数模式如 natapp -authtokenxxx 等相同参数将会覆盖掉此配置 #命令行参数 -config 可以指定任意config.ini文件 [default] authtokencc83c08d73357802 #对应一条隧…

【LeetCode】从中序与后序遍历序列构造二叉树

从中序与后序遍历序列构造二叉树 题目描述算法分析编程代码 链接: 从中序与后序遍历序列构造二叉树 题目描述 算法分析 编程代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : …

Vulnhub靶机DC-2 writeup

靶机介绍 靶机介绍:https : //download.vulnhub.com/dc/DC-2.zip ​ 信息搜集 获取IP地址 扫描靶机的IP的方法 1. nmap -sP 192.168.142.0/24 #nmap进行ping扫描发现存活主机 2. arp-scan -l #基于ARP发现内网存活主机 3. netdiscover -r 192.168.142.0/24 -…

【排序算法】python之冒泡,选择,插入,快速,归并

参考资料: 《Python实现5大排序算法》《六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序》 --代码似乎是C语言 ———————— 本文介绍5种常见的排序算法和基于Python实现: 冒泡排序(Bubble Sort&am…

Vue2 第十七节 Vue中的Ajax

1.Vue脚手架配置代理 2.vue-resource 一.Vue脚手架配置代理 1.1 使用Ajax库 -- axios ① 安装 : npm i axios ② 引入: import axios from axios ③ 使用示例 1.2 解决开发环境Ajax跨域问题 跨域:违背了同源策略,同源策略规定协议名&#xff0…

智能的等价超越了数学的等价

尽管等价关系只是智能的一方面,还有其他一些如语言理解、创造性思维和决策能力等方面都可以作为评估智能的标志。 能否有效产生出等价关系仍然被视为智能出现的最重要标志之一。在认知科学和人工智能领域,智能通常被定义为具备理解、学习、推理和问题解决…

Python系统学习1-3

1、变量 变量:关联一个对象的标识符 学习目标:学会画变量的内存图 命名规则:字母数字下划线,所有单词小写,单词之间下划线隔开 赋值:创建一个变量或改变一个变量关联的数据。 语法:变量名数据&#xf…

【项目流程】前端项目的开发流程

1. 项目中涉及的所有角色及其职责 - PM 产品经理 产品经理(Product Manager,简称PM)负责明确和定义产品的愿景和战略,与客户、用户、业务部门和其他利益相关者进行沟通,收集并分析他们的需求和期望。负责制定产品的详…

使用FreeMarker导出word文档(支持导出图片)

今天跟大家分享一下工作中比较实用的导出word 带图片的功能。 对于在idea开发中我们需要引入以下依赖: 2.对于eclipse 开发我们需要进入对应的jar包 这个必须放在lib下,同样也需要在当前项目的环境是加入该依赖 需要在MEAT-INF加入 首先制定word 导出…

动画响应卡

html代码: <div class"container"><div class"card" style"--clr: #009688"><div class"img-box"><img src"https://www.jq22.com/newjs/img-01.png"></div><div class"content&quo…

RabbitMQ 教程 | 第8章 跨越集群的界限

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

面试热题100(买卖股票的最佳时机)

为什么有人夜里碰到股票问题&#xff0c;辗转反侧睡不着觉&#xff1f;为什么有人看到股票问题心理欢喜直接操作&#xff1f;你是想做哪类人&#xff1f;今天就揭秘股票问题&#xff0c;让你应对股票问题的时候可以如鱼得水。 这种问题一看就是动态规划问题&#xff0c;动态规划…

导入了Junit依赖,但@Test注解依然爆红~

错误描述如下所示&#xff1a; 原因&#xff1a; 解决方法&#xff0c;将<scope>test</scope>删除&#xff0c;再如下所示重新构建项目&#xff1a;

MYSQL视图和mysql触发器(学会并使用day6)

MYSQL视图和mysql触发器 MYSQL视图使用视图的原因视图作用视图规则和限制视图的应用实际操作创建表并查看创建视图视图记录修改修改视图 mysql触发器创建触发器employee表employee02表创建一个触发器t1更新语句并查看employee02表删除触发器查询触发器触发器类型OLD和NEW MYSQL…

用户体验旅程图:改进用户体验的好工具

用户体验旅程图&#xff1a;改进用户体验的好工具 怎么改进体验&#xff0c;是有方法的 用户情绪曲线来衡量用户感觉 趣讲大白话&#xff1a;没有流程刨析&#xff0c;就没法改进 【趣讲信息科技245期】 **************************** 企业管理需要基本的流程的 企业流程简称BP…

“中国网安企业出海20强” | 赛宁网安持续领航国际市场

​​8月2日&#xff0c;斯元商业咨询机构基于对网安行业长期研究数据和公开调研&#xff0c;正式发布了「China’s Top 20 Cybersecurity Tech Going Global」&#xff08;「中国网络安全企业出海20强」&#xff09;研究报告&#xff08;以下简称TOP20报告&#xff09;。 “TO…