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

Memory Systems_ Cache, DRAM, Disk (2010)-学习笔记2-Caches, ‘Caches,’ and “Caches”

“缓存”这一概念在计算机各个层面(硬件和软件)被广泛使用,并且在不同领域中虽然具体实现不同,但核心目的是一致的:提高数据访问效率、减少延迟、提升性能

image

​ 上排展示了硬件缓存的配置,下排则展示了一些软件缓存的例子。

图 1.1(a) 展示的是一个通用处理器核心及其缓存。

​ 软件(比如程序)认为自己直接访问的是主内存里的数据(DRAM),但实际上,缓存会自动“拦截”这些访问请求,先检查自己有没有请求的数据,如果缓存里有,就直接返回,避免去慢速的DRAM读写;如果缓存里没有,才去访问DRAM并把数据放入缓存。

图 1.1(b) 展示了通用缓存的另一种配置方式,其中缓存在逻辑上/或物理上被划分为两个独立的分区

  • 一个分区仅用于存储指令
  • 另一个分区仅用于存储数据

对缓存进行分区可以改善其行为。例如:

  • 为每个分区分别提供一条独立的总线,给它们分别配独立的总线,指令和数据可以同时高速传输,带宽大约能翻倍,处理器能更快拿到需要的内容。
  • 指令通常是固定长度(比如32位),把指令缓存专门用来存这类固定长度的东西,就不用设计复杂的逻辑去支持变长的读取操作,硬件更简单,效率更高。

图 1.1(b) 描述的就是Harvard 架构的缓存配置,或者称为分离指令/数据缓存(Split I-Cache/D-Cache),这种结构常见于现代 CPU 尤其是 L1 缓存层

这种设计的主要优势是:

  • 提高并行性(可以同时取指和访数);
  • 减少资源冲突;
  • 提高性能,尤其对嵌入式系统和实时系统更有意义。

图 1.1(c) 展示的是另一种分区配置,这种配置在大多数数字信号处理器(DSP)架构中都可以见到。这类缓存是内存空间的扩展不像前面提到的两种缓存组织方式,它们对软件不是透明的。这里需要注意的一个主要点是:这两个分区都用于存储数据。这种配置在 DSP 中是非常有价值的,因为许多 DSP 算法(例如有限冲击响应(FIR)滤波器等点积计算)需要非常高的数据带宽,它们在每个时钟周期中都要从内存中取出两个不同的数据操作数。所以,DSP通过这种“两个数据缓存分区”的设计,满足了高速并行读取数据操作数的需求,提高了处理效率。

图 1.1(d) 展示了一个典型的多处理器系统中的缓存层次结构(cache hierarchy)

  • 每个处理器核心都有自己私有的缓存
  • 而在连接到后备存储(DRAM)之前的最后一级缓存(Last-Level Cache, LLC)所有核心共享的

图 1.1(e) 展示了两种不同类型的缓存:

  • 操作系统缓存:操作系统会将它从磁盘中读取的块(block)存储在主存(内存)中,作为缓冲区缓存(buffer cache)的一部分。当应用程序从文件中读取或向文件写入数据时,这些请求并不是直接交给磁盘处理,而是由缓冲区缓存来响应的。
  • 磁盘自身的缓存:此外,现代磁盘本身也实现了自带缓存。这些缓存不受操作系统控制,而是自主运行的(autonomous)

图 1.1(f) 展示了另一种由操作系统维护的缓存

​ 当需要将域名解析为 IP 地址时,操作系统不一定每次都直接请求 DNS 服务器。这些域名解析结果(即 DNS 映射)可以被缓存在本地,从而避免不必要的网络请求。类似地,主机(hosts)和子网(subnets)的路由信息也通常会缓存在本地

图 1.1(g) 展示了两种不同类型的缓存:

  • 浏览器缓存:每个网页浏览器通常都会维护一个本地缓存,用于存储下载过的网页文档。
    这些文档通常会保存在本地磁盘上,并作为操作系统缓冲区缓存(如图 1.1(e))的一部分缓存在主存中
  • Web 代理缓存:当用户发出一个访问某个 Web 服务器的请求时,
    该请求可能并不会真正发送到服务器。一个Web 代理服务器(proxy)可能会拦截这个请求,并\代表服务器直接返回响应。这种代理行为类似于图 1.1(a)、(b)、(d) 所描述的透明缓存(transparent caches)。

image

​ 这两种机制(透明缓存 transparent cache划区内存 scratch-pad memory)是如何融入微处理器的内存模型的,如图 1.2 所示,图中用的是固态内存(如处理器缓存和无标签 SRAM,tagless SRAM)作为示例。

通用内存模型(General-purpose memory model)

  • 拥有单一命名空间(single namespace),这个命名空间由所有内存结构共享
  • 命名空间中的任意数据项(datum)都可以出现在任意缓存中
  • 举例来说:你可以通过一个虚拟地址访问主存中的数据,但该地址的数据也可能被缓存到了 L1、L2、L3 中——它们在逻辑上是等价的。

划区内存模型(Scratch-pad memory model)

  • 命名空间被显式划分,用于直接寻址不同的物理存储结构。

  • 举个例子:右侧的 DSP(数字信号处理器)内存模型中,系统的内存结构(如 RAM、ROM、SRAM 等)被明确放置在命名空间中不同的、互不重叠的位置(disjunct locations)

  • 一个具体的地址只能映射到一个特定的物理存储设备

  • 与透明缓存不同,同一个地址不会同时代表缓存和主存中的副本——地址是绝对的,指向固定的地方。

      				缓存单一性与独立性
    


├─ 缓存定义的灵活性
│ ├─ 单一缓存实体
│ └─ 多个独立缓存集合

├─ 同层级缓存整体分析
│ ├─ 多核CPU的L1缓存
│ ├─ 磁盘缓存
│ └─ 浏览器缓存

├─ 多层缓存视为单一实体
│ ├─ L1、L2、L3层级缓存
│ └─ 与主存(后端存储)区分

├─ 单一缓存拆分分析
│ ├─ 独立缓存块
│ └─ 例如图1.1(a)和(f)缓存

├─ 跨领域通用与互借鉴
│ ├─ 统一“缓存”概念
│ └─ 不同领域解决方案融合

└─ 目标与意义
├─ 建立统一分析框架
└─ 帮助设计和理解缓存系统

http://www.njgz.com.cn/news/82.html

相关文章:

  • JAVA语言学习总结(第25天)
  • hot 100二叉树算法
  • 信号处理__FFT变换
  • LCD显示信号波形
  • 7/26
  • 7.26
  • 盛最多水的容器
  • 练习cf939A. Love Triangle
  • CVE-2023-46604 Apache ActiveMQ 远程代码执行漏洞 (复现)
  • Day26
  • 假期学习
  • 第二十四天
  • 在python虚拟环境中遇到 ​​No module named pip​​ 错误解决方案
  • 从零开始的web前端学习-React
  • tinymce富文本编辑器使用
  • 微软C语言编译器‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
  • Java学习Day26
  • 线性基(个人学习笔记)
  • 花菖蒲 2025.7.26 模拟赛题解
  • 信任的意外反射:深入解析LLVM循环向量化器中的罕见编译错误
  • P1429 平面最近点对(加强版)[骗分解法]
  • 7.26 - GENGAR
  • P4565 [CTSC2018] 暴力写挂 题解
  • 第十二篇
  • 计算机网络——应用层 - 浪矢
  • 《第一节:跟着符映维学C语言---配置c语言开发环境》
  • 再见,大连
  • 影视软件集合分享
  • 7.26总结
  • geogebra 2 进阶