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

3.6 cache存储器


 

学习步骤:

我会采取以下几个步骤来学习Cache存储器:

  1. 确定学习目标:Cache存储器作为一种高速缓存存储器,通常用于提高计算机系统的运行效率。因此,我需要明确学习Cache存储器的目的,包括了解其原理、结构和应用。

  2. 学习基础知识:在学习Cache存储器之前,需要先掌握计算机组成原理和计算机体系结构等相关基础知识。这些知识包括CPU、存储器、总线、中断、操作系统等,可以通过阅读教材、参考书籍或者网络资源等途径来学习。

  3. 深入学习Cache存储器:学习Cache存储器的过程中,需要了解其工作原理、逻辑结构和映射方式等关键概念。我会首先学习直接映射、全相联映射和组相联映射等不同的映射方式,以及它们的优缺点。然后,我会学习如何利用高速缓存来提高计算机系统的运行效率,包括读取数据、写入数据、替换数据等操作。

  4. 实践练习:在学习Cache存储器的过程中,我会通过实践练习来巩固所学知识。例如,通过搭建计算机系统来实现Cache存储器的应用,或者使用一些仿真软件来模拟Cache存储器的运行过程,以提高自己的实践能力。

  5. 查漏补缺:在学习Cache存储器的过程中,我会及时查漏补缺,通过阅读教材、参考书籍、网络资源或者向专业人士请教等途径来解决自己遇到的问题,以保证学习的质量和效果。

学习目标: 

  1. 理解cache存储器的基本概念和作用,了解为什么要使用cache存储器。
  2. 掌握cache存储器的逻辑结构,包括cache存储器的块大小、块数、标记等关键参数以及cache与主存之间的映射方式。
  3. 理解cache存储器的读写策略,包括写直达和写回两种策略的区别和优劣,了解什么时候应该选择哪种策略。
  4. 掌握cache存储器的替换策略,了解LRU、FIFO等常用的替换算法的优缺点,以及如何选择最适合特定应用的替换策略。
  5. 熟悉cache存储器的预取策略,包括什么是预取、如何预取以及预取的优化技术等。
  6. 熟练掌握cache存储器的性能评估方法,包括cache命中率、命中时间、平均访问时间等指标,以及如何通过调整cache存储器的参数来优化性能。

这些目标可以帮助你全面地理解cache存储器的基本概念、逻辑结构、读写策略、替换策略、预取策略和性能评估方法,从而更好地应用和优化cache存储器。

3.6.1 cache基本原理

Cache是一种高速缓存存储器,常用于加速计算机访问主存储器的速度。它的基本原理是通过在CPU和主存之间插入一层较小但较快的缓存存储器来提高CPU访问主存储器的效率。

Cache的工作方式是将最近被CPU访问过的数据和指令存储在其中,如果CPU要访问的数据或指令已经存在于Cache中,CPU就可以直接从Cache中读取,从而避免了访问主存储器的时间延迟。如果要访问的数据或指令不在Cache中,CPU就需要从主存储器中读取,并将其存储到Cache中,以便下一次访问时可以直接从Cache中读取。

Cache的运作过程可以分为三个阶段:

  1. 缓存访问:当CPU发出一个读写请求时,Cache会首先查看自己是否已经缓存了该数据。如果数据已经存在于Cache中,那么就直接从Cache中读取或写入;如果数据不存在于Cache中,则进入下一个阶段。

  2. 主存访问:当Cache无法命中(即无法从Cache中找到需要的数据)时,Cache会向主存发出一个访问请求,并等待主存响应。如果主存返回了需要的数据,则进入下一个阶段;否则,返回一个缺失异常。

  3. 写回:当Cache中的某些数据被修改后,Cache会在适当的时候将这些数据写回主存。写回可以在缓存替换时进行,也可以在Cache满时进行。

在Cache中,数据通常是以块的形式组织的,块的大小可以根据具体应用进行调整。当一个块被存储在Cache中时,还会同时存储一些元数据,例如该块在主存中的地址、块的状态(是否被修改)、最近访问时间等信息。这些元数据可以帮助Cache进行块的替换、调度和维护。

总之,Cache的基本原理是通过在CPU和主存储器之间插入一个较小但较快的缓存存储器来提高CPU访问主存储器的效率。它的工作方式包括缓存访问、主存访问和写回三个阶段,数据通常以块的形式组织,并且会同时存储一些元数据来帮助Cache进行块的替换、调度和维护。

 

 

3.6.2 主存与cache的地址映射

在计算机中,缓存(Cache)是位于主存储器和处理器之间的高速存储器,用于暂时存放处理器需要频繁访问的指令和数据。为了使缓存的访问速度尽可能的快,常常将其设计为与处理器直接相连,而与主存储器之间采用缓存地址映射方式进行交互。

常见的缓存地址映射方式有三种:直接映射、全相联映射和组相联映射。

直接映射是指将主存地址的一部分直接映射到缓存地址中,每个主存块都只能映射到缓存中的一个固定位置,当需要读取一个主存块时,先将其地址通过哈希函数映射到缓存地址中,然后访问该位置即可。由于每个主存块只能映射到固定的一个位置,因此在缓存容量有限的情况下,会存在缓存冲突的情况,即多个主存块映射到相同的缓存位置,需要采用替换算法来确定替换哪个缓存块。

全相联映射是指所有的主存块都可以映射到任何一个缓存位置,因此每个缓存位置都可以存储任意主存块,缓存访问时需要遍历所有的缓存块进行查找。由于缓存位置数量有限,同样存在缓存冲突和替换算法的问题。

组相联映射则是将缓存分为多个组,每个组中包含多个缓存块,一个主存块可以映射到任意一个组中,但只能存储在该组的某个缓存块中。与直接映射相比,组相联映射减少了缓存冲突的可能性,而与全相联映射相比,可以降低查找的时间。

在实际应用中,通常采用组相联映射作为主流的地址映射方式,因为它兼顾了直接映射和全相联映射的优点,并且易于实现。

 

3.6.3 cache的替换策略 

在 Cache 中,如果 Cache 中没有被请求的数据,则需要从主存中获取数据。而 Cache 有一个固定的容量,当 Cache 已满时,需要使用替换策略将某些已存在的缓存数据替换出去,以便给新的数据腾出空间。Cache 替换策略的目的是使 Cache 中的数据尽可能多地被使用,从而提高 Cache 命中率,减少对主存的访问次数。

常见的 Cache 替换策略有以下几种:

  1. 直接映射:每个主存块只能映射到 Cache 中的一个固定位置,替换时只能替换这个位置上的块。这种方式简单,但容易发生冲突,导致 Cache 命中率低。

  2. 全相联映射:每个主存块可以映射到 Cache 中的任意一个位置,替换时选择最近最少使用的块。这种方式可以有效避免冲突,但需要更多的硬件实现,比直接映射复杂。

  3. 组相联映射:Cache 被分成多个组,每个组中包含若干个 Cache 行,每个主存块只能映射到一个组中的某个行,替换时只在该组中寻找最近最少使用的块。这种方式结合了直接映射和全相联映射的优点,较好地平衡了命中率和实现复杂度。

以上是常见的 Cache 替换策略,实际中也可以根据具体的应用场景选择合适的替换策略。

 3.6.4 cache写操作

在计算机系统中,cache存储器的写操作策略指的是当CPU写入数据时,这些数据是直接写入主存,还是先写入cache,再由cache写回主存的方式。常见的写操作策略有两种:

  1. 写直达(Write-Through)策略:当CPU写入数据时,cache和主存同时被写入。这样可以保证cache和主存中的数据一致,但写操作需要两次存储器访问,因此写操作的速度会比较慢。

  2. 写回(Write-Back)策略:当CPU写入数据时,只有cache被写入,而不是直接写入主存。当cache中的某个数据块被替换出去时,才将其写回到主存中。这样可以减少写操作的存储器访问次数,提高写操作的速度。但是,由于cache和主存中的数据可能不一致,因此需要在某些情况下进行额外的操作来保证数据一致性。

在使用写回策略的cache中,通常需要使用一些额外的硬件来保证数据一致性。例如,可以为每个cache块设置一个有效位和一个修改位。当某个cache块被读入时,有效位被设置为1,修改位被设置为0。当该cache块被写入时,有效位仍然保持为1,但是修改位被设置为1。当该cache块被替换出去时,如果修改位为1,则需要将该cache块的数据写回到主存中,以保证数据的一致性。

 

 3.6.5 Pentium 4 的cache组织

Pentium 4 是英特尔公司于2000年推出的一款处理器,其cache组织如下:

  1. Level 1 (L1) Cache:分为数据缓存和指令缓存两部分,每个缓存大小均为8KB,采用4路组相联的方式,每路大小为2KB。

  2. Level 2 (L2) Cache:大小为256KB或512KB,采用8路组相联的方式,每路大小为32KB,运行频率与CPU主频相同。

  3. Level 3 (L3) Cache:大小为2MB或4MB,采用16路组相联的方式,每路大小为256KB。在早期版本中没有L3 Cache,后续推出的Pentium 4 Extreme Edition和Pentium D处理器才开始搭载L3 Cache。

Pentium 4 的cache组织采用分层式结构,即L1 Cache作为第一层,L2 Cache作为第二层,L3 Cache作为第三层,层与层之间采用包含关系,即L2 Cache包含L1 Cache,L3 Cache包含L2 Cache。这样的设计可以提高数据访问效率,减少数据访问延迟。

 3.6.6 使用多级cache减少缺失损失

多级Cache是一种减少缺失损失的策略。其基本思想是在CPU与主存之间增加一层或多层Cache,让缓存能够更好地利用程序访问的局部性原理,从而减少缺失率和缺失开销。

在多级Cache中,每一级的Cache容量和速度都会不同。一般情况下,较小但速度更快的Cache作为L1 Cache,接下来的较大而速度相对较慢的Cache作为L2 Cache,再之后可能还有L3 Cache等。不同级别的Cache之间也可能采用不同的替换算法和写操作策略。

当CPU需要访问数据时,它首先会检查L1 Cache,如果数据在L1 Cache中,则直接返回数据;如果数据不在L1 Cache中,则会向下一级的Cache(如L2 Cache)中查询,以此类推。当数据在Cache中被找到后,它会被加载到更高级别的Cache中,以提高下一次访问的速度。

使用多级Cache的好处在于,它能够减少缺失率和缺失开销,因为更大、更慢的Cache可以容纳更多的数据,并且更快的Cache可以更快地提供数据。这样,访问速度会更快,缺失率和缺失开销也会更小。不过,多级Cache也会增加硬件成本和设计难度,需要考虑多级Cache之间的协作和一致性问题。

 

 

 

 

 

 

 总结:

Cache存储器作为一种高速缓存,其理解和掌握对于计算机体系结构的学习和实践都是至关重要的。以下是Cache存储器的重点、难点和易错点:

重点:

  1. Cache存储器的基本原理:Cache存储器是主存储器的一种高速缓存,用于存储CPU频繁访问的指令和数据。
  2. Cache存储器的地址映射:包括直接映射、全相联映射和组相联映射,不同的映射策略会影响Cache存储器的效率和命中率。
  3. Cache存储器的替换策略:包括最近最少使用算法(LRU)、先进先出算法(FIFO)和随机替换算法等,不同的替换策略会影响Cache存储器的性能。
  4. Cache存储器的写操作策略:包括写回和写直达两种,不同的写操作策略会影响Cache存储器的一致性和性能。
  5. 多级Cache存储器的实现:包括L1 Cache、L2 Cache、L3 Cache等多级Cache存储器的实现和管理,可以有效减少缺失损失和提高系统性能。

难点:

  1. 理解Cache存储器和主存储器的地址映射关系以及不同映射策略的优缺点。
  2. 掌握Cache存储器的替换策略,特别是LRU算法的实现。
  3. 理解Cache存储器的写操作策略及其影响,包括一致性和性能方面的问题。
  4. 理解多级Cache存储器的实现原理和管理方法。

易错点:

  1. Cache存储器的地址映射策略选择不当会影响Cache的效率和命中率。
  2. 替换策略的实现不当会影响Cache的性能,特别是LRU算法的实现需要注意细节。
  3. 写操作策略的选择和实现需要注意一致性和性能的平衡。
  4. 多级Cache存储器的实现和管理需要注意不同级别Cache之间的协作和数据一致性。

 

相关文章:

3.6 cache存储器

学习步骤: 我会采取以下几个步骤来学习Cache存储器: 确定学习目标:Cache存储器作为一种高速缓存存储器,通常用于提高计算机系统的运行效率。因此,我需要明确学习Cache存储器的目的,包括了解其原理、结构和…...

Ubuntu零基础安装

Ubuntu零基础安装 首先我们需要安装VM,再安装ubuntu。 1、安装VM 进入VM官网 VM官网地址 选择下载试用版 下载Windows版本 下载完成后,点击安装包进行安装 至此就安装完毕了。 桌面会出现VM的图标。 点击打开,弹出如下画面: …...

热门的常用 API 大全分享

天气/环境 空气质量查询: 查询国内3400个城市的整点观测,获取指定城市的整点观测空气质量。未来7天生活指数:支持国内3400个城市以及国际4万个城市的天气指数数据,包括晨练、洗车、穿衣(12项,有详细说明&a…...

利用粒子群算法设计无线传感器网络中的最优安全路由模型(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 无线传感器网络(WSN)由数十个、数百个甚至数千个自主传感器组成。这些传感器以无线方式嵌入环境中&…...

2023年华东杯数学建模B 题 期货价格相关性问题-思路解析

题目背景: 许多金融标的都有其内在的关联,如何从量价数据找到这种关联是一个有趣的 问题。例如在万得的“煤焦钢矿”板块中,有螺纹钢、铁矿石、不锈钢、热轧卷板、 硅铁、焦煤、焦炭、锰硅、线材 9 个品种。这些品种有些是上下游关系&…...

SAP UI5 之Controls (控件) 笔记三

文章目录 官网 Walkthrough学习-Controls控件1.0.1 在index.html中使用class id 属性控制页面展示的属性1.0.2 我们在index.js文件中引入 text文本控制1.0.3打开浏览器查看结果 官网 Walkthrough学习-Controls控件 Controls控件 在前面展示在浏览器中的Hello World 是在Html …...

哈希表题目:设计地铁系统

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:设计地铁系统 出处:1396. 设计地铁系统 难度 6 级 题目描述 要求 一个地铁系统正在收集乘客在不同站之间的花费时间。他们在使用这些数…...

云时通OMS:为零售品牌商打造高效的全渠道订单管理!

传统的零售企业围绕“人、货、场” 三要素来展开营销,其目标是基于“场”将货销售给更多的人。随着数字技术的应用,新零售模式下的“场”除了传统的线下店铺外,还拓展了多元化的线上渠道,比如小程序、企业APP、第三方平台、电商直…...

有必要给孩子买台灯吗?分享四款高品质的护眼台灯

有必要使用护眼台灯,尤其是有近视现象的孩子们。 现在很多孩子小学就开始近视了,保护视力刻不容缓呀! 很多人不知道,其实劣质光线是最大的眼睛杀手 给孩子随便买便宜的台灯,看着一样能用,其实时间久了 对孩子眼睛的…...

模板方法模式

模板方法模式 模板方法模式定义:使用场景角色定义抽象模板: 为抽象模板,它的方法分为两类AbstractClass1. 基本方法: 也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。2. 模板方法: 可以有一个或几个,一般是一个具体方法…...

基于Yolov5的NEU-DET钢材表面缺陷检测,优化组合新颖程度较高:CVPR2023 DCNV3和InceptionNeXt,涨点明显

1.钢铁缺陷数据集介绍 NEU-DET钢材表面缺陷共有六大类,分别为:crazing,inclusion,patches,pitted_surface,rolled-in_scale,scratches 每个类别分布为: 训练结果如下: 2.基于yolov5s的训练 map值: 2.1 Inception-MetaNeXtStage 对应博客:https://cv2023.blog.csdn.n…...

【HarmonyOS】自定义组件之ArkUI实现通用标题栏组件

【关键字】 标题栏、常用内置组件整合、ArkUI、自定义组件 1、写在前面 在上一篇文章中我们通过Java语言实现了一个通用的标题栏组件,有需要的可以看下,文章地址: 华为开发者论坛 现在很多朋友都已经转战ArkTS语言了,那么今天…...

C#开发的OpenRA游戏的加载地图流程

C#开发的OpenRA游戏的加载地图流程 OpenRA游戏里,地图是一个很关键的数据, 因为地图里包括了地面状态,地面上建筑物状态, 还有玩家在地图上的布局情况,以及各种活动限制的条件。 在OpenRA里,需要把地图目录:OpenRA\mods\cnc\maps 里所有的文件进行加载, 并且保存在缓…...

python ast 详解与用法

目录 基本概念节点类型ast.Assignast.Nameast.Constantast.Callast.Attribute 结点的遍历ast源码示例 结点的修改示例 参考链接 基本概念 在 python 中,我们可以通过自带的 ast 模块来对解析遍历语法树,通过ast.parse()可以将字符串代码解析为抽象语法树…...

Go语言开发小技巧易错点100例(七)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…...

爬虫为什么需要ip

爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制&a…...

RabbitMQ-保证消息可靠性

RabbitMQ-保证消息可靠性 1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback 1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化 1.3.消费者消息确认1.3.1.演示none模式1.3.2.演示auto模式 1.4.消费失败重试机制1.…...

Python教程——Python本地环境安装

文章目录 简介安装Python下载安装验证安装结果 手动添加环境变量安装问题 简介 python官网:https://www.python.org/ Python Windows下载地址:https://www.python.org/downloads/windows/ Python 官方文档:https://www.python.org/doc/ Pytho…...

“智慧交通”转型升级+创新发展策略

随着“互联网交通”的应用创新推陈出新,传统轨道交通行业客户服务中心已难以满足乘客对便捷高效的客户服务需求;节假日人流量激增,客户服务人手不足,交通、站点堵塞、信息更新不及时等问题是常态。因此,“智慧城市”交…...

华为OD机试 - 开放日活动、取出尽量少的球(Python)

题目描述 某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下: 有N个容量一样的小桶等距排开, 且每个小桶都默认装了数量不等的小球, 每个小桶装的小球数量记录在数组 bucketBallNums 中, 游戏开始时,要求所有桶的小球总数不能超过SUM, 如果…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

MySQL 主从同步异常处理

阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示&#xff…...

[特殊字符] 手撸 Redis 互斥锁那些坑

📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...

【Redis】Redis 的持久化策略

目录 一、RDB 定期备份 1.2 触发方式 1.2.1 手动触发 1.2.2.1 自动触发 RDB 持久化机制的场景 1.2.2.2 检查是否触发 1.2.2.3 线上运维配置 1.3 检索工具 1.4 RDB 备份实现原理 1.5 禁用 RDB 快照 1.6 RDB 优缺点分析 二、AOF 实时备份 2.1 配置文件解析 2.2 开启…...