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

07《缓存》计算机组成与体系结构 系列课

目录

深入了解缓存内存

缓存的重要性

游戏中的存储需求与主内存

虚拟内存和按需分页

现代系统中的多级缓存

缓存级别的大小与速度

缓存相关的术语

缓存命中与未命中

页面命中与缺页

局部性原理

结语


深入了解缓存内存

大家好,欢迎来到今天的课程。上节课,我们学习了06《内存接口:解答往年试题》计算机组成与体系结构 系列课。今天我们将深入了解缓存内存。但在深入之前,我们先来理解一下它的重要性。现在让我们开始学习吧。

缓存的重要性

在之前的讨论中,当我们谈到命中率或命中比时,我们看到在一个包含100条指令的程序代码中,有80条被带入主存储器。你可能会想,为什么我们不直接将整个100条指令的代码都放入内存中呢?让我通过一个更现实的例子来说明这个问题。

游戏中的存储需求与主内存

  • 游戏示例:GTA 5、使命召唤:无限战争、现代战争2019重启版、杀手2(2018年重启版)。
  • 存储空间:这些游戏的存储需求几乎达到了100GB,现代战争2019重启版甚至需要超过200GB的存储空间。
  • 主内存需求
    • GTA 5:4GB
    • 使命召唤系列(无限战争/现代战争):8GB
    • 杀手2:16GB

虚拟内存和按需分页

这是因为我们的操作系统提供了虚拟内存和按需分页的概念。当我们在玩这些游戏或者从技术上讲,当处理器正在执行这些游戏的代码时,它们并不需要一次性地加载全部100GB的代码。这就是它的美妙之处。

正因为如此,即使主内存相对较小,我们仍然可以毫无问题地运行这些游戏。

为了更好地理解这个概念,我们用了仅100条指令的代码段作为例子。

现代系统中的多级缓存

现在让我们谈谈缓存。

为了便于理解,在之前的讨论中我提到缓存内存作为一个单一单元。

但准确地说,现代系统通常有多级缓存。如今的系统架构中,一般使用三级缓存:L1、L2 和 L3 缓存。

  • L1缓存:自诞生以来就内置于处理器本身。
  • L2缓存:最初集成在主板上,但现在也成为了处理器的一部分。
  • L3缓存:嵌入在处理器中,由处理器的所有不同核心共享。

随着技术的进步,我们见证了多核处理器的兴起,如双核、四核乃至八核等。这些术语描述了微处理器内部核心的数量,是现代微处理器分类中的一个重要方面。在计算机体系结构中,这样的设计使得处理器能够同时处理多个任务或线程,从而显著提升了计算效率和性能。

自L1缓存诞生以来,它就一直内置于处理器本身之中,作为最接近CPU核心的数据存储区域,提供了最快的访问速度。随着技术的发展,L2缓存被引入以进一步提升性能。最初,L2缓存通常是安装在主板上的独立组件;然而,随着时间推移,为了提高效率,L2缓存也逐渐集成到了处理器内部。

如今,在多核处理器架构中,每个核心都拥有自己的L1和L2缓存,这有助于减少数据访问延迟并提高单个核心的工作效率。

至于L3缓存,它同样嵌入在处理器芯片之内,但与L1和L2不同的是,L3缓存由所有核心共同使用。这种共享的设计,旨在优化跨核心的数据交换,对于需要频繁访问同一数据集的应用程序来说尤为重要。

通过了解这些缓存级别及其作用,我们可以更好地理解现代处理器是如何通过多层次缓存系统,来实现高效数据管理和加速计算过程的。

缓存级别的大小与速度

  • L1缓存:最小但最快。
  • L2缓存:用于存储访问频率次高、但因空间限制而无法纳入L1缓存的数据。
  • L3缓存:最大,被称为共享缓存。

在大小方面,L1是最小的,但它也是所有缓存中最快的。 L2缓存紧随其后,用来存储那些访问频率次高、但因空间限制而无法纳入L1缓存的数据。 最后,L3缓存是最大的,也被称为共享缓存。

希望你现在对不同级别的缓存有了清晰的理解。 在之后的讨论中,为了简化起见,我们大多假设只有一个缓存。 不过,在解释与缓存级别相关的数值问题时,我会提供各级别的详细说明。

缓存相关的术语

现在让我们了解一些与缓存相关的术语。

缓存命中与未命中

  • 缓存命中:如果处理器能够在缓存中找到所需的信息,所需的时间称为命中延迟。
  • 标签目录:用来确定所需信息是否存在于缓存中的一种特定数据结构。
  • 缓存未命中:如果信息不在缓存中,则处理器将在下一级内存即主内存中寻找该信息,并将其带回。这段时间总称作未命中延迟。

第一个术语是缓存命中。 在执行过程中,如果处理器能够在缓存中找到所需的信息,我们就称之为缓存命中。 这个过程所需的时间称为命中延迟。 这里,处理器使用一种特定的数据结构——标签目录【Tag Directory】,来确定所需信息是否存在于缓存中。 如果信息不在缓存中,也就是说信息缺失,我们称之为缓存未命中。 在这种情况下,正如前面所讨论的,处理器将在下一级内存,即主内存中寻找该信息,并将其带回。 同时,也会将信息放置在缓存中。 这段时间总称作未命中延迟

页面命中与缺页

  • 页面命中:如果信息在主内存中找到。
  • 缺页:如果信息也不在主内存中,这种情况称为缺页。
  • 缺页服务时间:操作系统会在辅助存储器中查找信息,并将其带回主内存的过程所需的时间。

顺便提一下,如果信息也不在主内存中,这种情况称为缺页。 如果找到了信息,我们称之为页面命中。 在缺页的情况下,操作系统,作为管理主内存和辅助存储器之间通信的角色,会在层次结构的最后一层,也就是辅助存储器中查找信息,并将其带回主内存。 整个过程称为缺页服务,完成这一过程所需的时间称为缺页服务时间

我们已经知道,相对于其他数据而言,访问频率极高的信息通常会被保留在缓存中。 这种根据访问频率优先化主内存部分以加载到缓存中的做法,是基于局部性原理

局部性原理

  • 空间局部性:如果处理器引用了某个内存位置,那么附近的位置在未来很可能会被引用。
  • 时间局部性:如果某个内存位置被引用过,那么它很可能在未来再次被引用。

简单来说,有两种方法可以帮助处理器决定应该将主内存中的哪些数据放在缓存中。 第一种方法基于空间局部性。 这意味着在某个时刻,如果处理器引用了某个内存位置,那么附近的位置在未来很可能会被引用。 第二种方法基于时间局部性。 这意味着如果某个内存位置被引用过,那么它很可能在未来再次被引用。 这个知识点,在研究缓存替换策略时会更加清晰。

结语

好了,这就是本次课程的内容。

我想既然我们已经学到了缓存内存的组织方式,接下来探讨不同的缓存映射技术以及更深入地理解缓存和主内存之间的交互就会更容易些。

期待下次再见。谢谢大家阅读。


http://www.kler.cn/a/419810.html

相关文章:

  • 组合问题变式——选数(dfs)
  • 点云3DHarris角点检测算法推导
  • Ambrus 游戏工作室将应对气候变暖与游戏变现完美结合
  • 遇到问题:hive中的数据库和sparksql 操作的数据库不是同一个。
  • ONVIF协议网络摄像机客户端使用gsoap获取RTSP流地址GStreamer拉流播放
  • 【设计模式系列】备忘录模式(十九)
  • docker 怎么启动nginx
  • 【C语言】结构体(二)
  • thinkphp自定义分页组件
  • 【Leetcode】26.删除有序数组中的重复项
  • Centos7安装MySQL8.0详细教程(压缩包安装方式)
  • mac终端自定义命令打开vscode
  • kube-proxy的iptables工作模式分析
  • 如何使用Python进行下载对应的视频地址
  • Python学习第十五天--魔术方法
  • Kong API Gateway 深度解析与实战指南
  • 【Linux内核】ashmem pin/unpin
  • Python毕业设计选题:基于django+vue的校园影院售票系统
  • CasaOS个人云存储系统使用Gopeed打造你的私人云端下载中心
  • Spring Boot自定义启动banner
  • 基于深度学习的甲状腺结节影像自动化诊断系统(PyQt5界面+数据集+训练代码)
  • 在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程
  • Makefile 入门指南:构建自动化编译流程
  • java 反射 详解
  • Ubuntu 20.04 下 ROS 工作空间的详解与应用
  • rustdesk远程桌面使用