前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】软考高级-架构设计师 007-存储技术(Cache)

【愚公系列】软考高级-架构设计师 007-存储技术(Cache)

原创
作者头像
愚公搬代码
发布2024-05-11 00:09:05
1280
发布2024-05-11 00:09:05
举报
文章被收录于专栏:愚公系列-考试考证

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

Cache(发音为“cash”)是一种高速数据存储层,存在于计算机的存储器层次结构中,它的作用是暂时存储近期被访问的数据和指令,以便于快速访问。由于Cache的访问速度远高于主存储器(如RAM)和辅助存储设备(如硬盘或SSD),利用Cache可以显著减少数据访问的平均时间,从而提高计算机系统的整体性能。

🚀一、Cache

🔎1.高速缓存Cache

🦋1.1 工作原理

Cache工作的基本原理是基于程序运行时的局部性原理,包括时间局部性和空间局部性:

  • 时间局部性:如果一个数据被访问,那么在不久的将来它很可能再次被访问。
  • 空间局部性:如果一个数据被访问,那么它附近的数据也很可能被访问。

根据这两个原理,Cache通过存储最近和/或频繁访问的数据和指令,使得CPU在大多数情况下能够直接从Cache中获取数据,而不是从较慢的主存中获取。

🦋1.2 类型

Cache可以根据存储位置、目的和内容被分为几种类型:

  • 根据存储位置:分为内部Cache(或一级Cache,L1 Cache)和外部Cache(包括二级Cache,L2 Cache,以及三级Cache,L3 Cache)。L1 Cache位于处理器内部,速度最快,容量相对较小;L2和L3 Cache容量较大,位于处理器外部,但仍然比主存快得多。
  • 根据目的:分为指令Cache用于存储指令,数据Cache用于存储数据,和统一Cache(或混合Cache),同时存储指令和数据。
  • 根据内容:分为全相联Cache、直接映射Cache和组相联Cache,这些分类描述了数据在Cache中的存储方式,影响着Cache的效率和复杂度。

🦋1.3 管理

Cache的管理涉及到几个关键的策略,包括替换策略(如最近最少使用(LRU)算法),写策略(写回(Write-Back)和写通(Write-Through))和映射策略(如直接映射、全相联映射和组相联映射)。

🦋1.4 重要性

在现代计算机架构中,Cache是提高处理器性能的关键技术之一。随着处理器速度的提高和多核处理器的普及,高效的Cache设计和管理变得越来越重要。通过有效利用Cache,可以大大减少处理器访问内存的延迟,提高程序运行的速度。

🦋1.5 练习

1、在CPU内外常设置多级高速缓存Cache其主要目的是( )。(2019下半年试题)

A.扩大主存的存储容量

B.提高CPU访问主存数据或指令的效率

C.扩大存储系统的容量

D.提高CPU访问外存储器的速度

解析:

A. 扩大主存的存储容量:Cache的目的不是为了扩大主存储器的容量,而是为了缓存主存中频繁访问的数据和指令,以减少CPU的等待时间。

B. 提高CPU访问主存数据或指令的效率:这是Cache的主要目的。通过在CPU和主存之间设置多级Cache,CPU可以更快地访问到最近或最频繁使用的数据和指令,因为Cache的访问速度远高于主存储器。

C. 扩大存储系统的容量:Cache的设计并非为了扩大整个存储系统的容量,而是为了优化访问速度和效率。

D. 提高CPU访问外存储器的速度:虽然Cache可以间接影响到CPU访问外存储器(如硬盘或SSD)的速度,因为经常访问的数据可以被缓存在主存或Cache中,减少了对外存的访问需求。然而,Cache的直接目的是提高访问主存中的数据和指令的效率,而不是直接提高对外存储器的访问速度。

因此,正确的答案是 B. 提高CPU访问主存数据或指令的效率。这反映了Cache在计算机存储层次结构中的作用,即为CPU提供快速访问内存中数据和指令的途径,从而提高整个系统的性能。

🔎2.Cache的地址映像方法

🦋2.1 概念

🦋2.2 练习

1、Cache的地址映像方式中,发生块冲突次数最小的是( )。(2015年上半年)

A.全相联映像

B.组相联映像

C.直接映像

D.无法确定

解析:

Cache的地址映射方式主要有三种:直接映射、组相联映射(又称为n路组相联映射)、全相联映射。它们在处理块冲突(即两个或多个内存地址需要映射到同一Cache行的情况)的能力上有所不同。

A. 全相联映像:在全相联映射方式中,任何一个内存块都可以被映射到Cache中的任何位置。这种映射方式提供了最大的灵活性,从理论上讲,它能最小化块冲突的发生,因为它不受固定位置的限制。但是,全相联映射的实现成本较高,因为它要求更复杂的硬件来检索和定位数据。

B. 组相联映像:组相联映射是直接映射和全相联映射的折中方案,它将Cache分为多个组,每个组包含多行。一个内存块可以映射到一个组内的任何行,但只能是这个组。组相联映射通过增加灵活性减少了块冲突的可能性,但仍然不如全相联映射灵活。

C. 直接映像:直接映射方式下,每个内存块只能映射到Cache的一个特定位置。这种方式实现简单,成本低,但容易发生块冲突,尤其是当两个经常访问的内存块映射到同一个Cache行时。

D. 无法确定:根据以上分析,可以确定最小化块冲突次数的映射方式。

因此,正确答案是 A. 全相联映像。全相联映射因其提供的最大灵活性,在理论上发生块冲突的次数最小,但这种灵活性是以较高的实现成本为代价的。

🔎3.Cache替换算法

🦋3.1 概念

Cache替换算法是一种决定在缓存空间有限的情况下哪些数据被保留、哪些数据被替换的方法。在处理器的Cache或其他缓存系统中,当新的数据需要被载入Cache,但Cache已满时,替换算法就会被用来选择被替换的数据块。几种常见的Cache替换算法包括:

  1. 最近最少使用(LRU,Least Recently Used)
    • LRU算法会淘汰最长时间未被访问的数据块。它基于这样的假设:最近未被访问的数据在将来也不太可能被访问。
    • 实现起来相对复杂,需要跟踪每个数据块自上次访问以来的时间。
  2. 先进先出(FIFO,First In First Out)
    • FIFO算法按照数据块进入Cache的顺序进行淘汰,最早进入的数据块将最先被替换。
    • 实现简单,但可能会淘汰最近才载入并可能再次被访问的数据。
  3. 随机替换(Random)
    • 如其名,随机替换算法随机选择一个数据块进行替换。
    • 实现简单,但可能会移除频繁使用的数据块。
  4. 最不经常使用(LFU,Least Frequently Used)
    • LFU算法淘汰访问频次最少的数据块。
    • 能有效地保留经常访问的数据,但实现复杂,且对历史访问模式过于敏感。
  5. 最近不经常使用(NMRU,Not Most Recently Used)
    • 从最近未被访问的数据块中随机选择一个进行替换。
    • 是一种介于LRU和随机替换之间的折衷方法。
  6. 时钟(Clock)或最近未用(NRU,Not Recently Used)
    • 在LRU的基础上简化实现。数据块在Cache中以循环队列(类似时钟)的形式排列,有一个指针指向最老的数据块。如果这个数据块最近未被访问,则替换它;否则,保留它并将指针移至下一个数据块。

选择合适的替换算法取决于多种因素,如应用场景、Cache的大小、硬件限制和预期的访问模式等。理想的Cache替换策略应该尽量减少缓存未命中(cache misses)的情况,从而提高整体系统性能。

🦋3.2 练习

1、Cache的替换算法中,( )算法计数器位数多,实现困难。

A.FIFO

B. LFU

C. LRU

D. RAND

解析:

在Cache的替换算法中,B. LFU(Least Frequently Used,最不经常使用)算法的实现相对困难,原因在于它需要维护一个计数器来记录每个数据块被访问的频率。与其他替换策略相比,LFU需要更多的计数器位数来准确记录访问频次,并据此做出替换决策。

A. FIFO(First In First Out,先进先出)

  • FIFO算法根据数据块进入Cache的顺序进行替换,实现相对简单。它不需要跟踪每个数据块的使用频率或最近使用情况,因此不涉及复杂的计数器或标记。

B. LFU(Least Frequently Used,最不经常使用)

  • LFU算法通过记录每个数据块的访问频次来决定哪个数据块被替换。它需要为每个数据块维护一个计数器,并在每次访问时更新这些计数器。随着时间的推移,这些计数器的位数可能需要增加以记录较高的频次,这使得LFU的实现相对困难且开销较大。

C. LRU(Least Recently Used,最近最少使用)

  • LRU算法淘汰最长时间未被访问的数据块。尽管它比FIFO和随机替换要复杂,需要跟踪数据块的访问顺序,但与LFU相比,LRU通常不需要记录每个数据块的访问频次,因此实现起来较为简便。

D. RAND(Random,随机)

  • 随机替换算法通过随机选择一个数据块来进行替换,实现非常简单,不需要计数器或跟踪数据块的访问模式。

因此,正确答案是 B. LFU,因为它需要为每个数据块维护一个用于记录访问频次的计数器,这不仅增加了实现的复杂度,还需要更多的位数来准确记录这些信息。


我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、Cache
    • 🔎1.高速缓存Cache
      • 🦋1.1 工作原理
      • 🦋1.2 类型
      • 🦋1.3 管理
      • 🦋1.4 重要性
      • 🦋1.5 练习
    • 🔎2.Cache的地址映像方法
      • 🦋2.1 概念
      • 🦋2.2 练习
    • 🔎3.Cache替换算法
      • 🦋3.1 概念
      • 🦋3.2 练习
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档