# 层次化存储结构

计算机系统中的存储结构通常采用层次化的设计,从上到下主要包括以下几个层次:

  1. 寄存器 (Register):

    • 位于 CPU 内部,是速度最快的存储器。
    • 用于暂时存放 CPU 正在处理的数据和地址信息。
    • 容量非常小,一般只有几十到几百个字节。
  2. Cache 存储器:

    • 位于 CPU 和主存储器之间,是一种高速缓存存储器。
    • 用于暂时存放常用的数据和指令,加快 CPU 访问速度。
    • 容量较寄存器大一些,从几 KB 到几 MB 不等。
  3. 主存储器 (Main Memory):

    • 也称为内存或随机存取存储器 (RAM)。
    • 是 CPU 直接访问的主要存储区域,容量较大。
    • 存取速度比寄存器和 Cache 慢,但比磁盘存储器快。
  4. 辅助存储器 (Secondary Storage):

    • 也称为外存或永久存储器,包括硬盘、光盘、U 盘等。
    • 容量大,但存取速度相对较慢。
    • 用于存储大量的程序和数据,供主存储器调用。

这种由快到慢、由小到大的层次化存储结构,充分利用了不同存储介质的特点,提高了整个计算机系统的性能和效率。上层存储器作为下层存储器的缓存,通过数据的局部性原理,大大减少了对下层存储器的访问,从而提高了整体的存取速度。

# Cache - 概念

Cache 是一种高速缓存存储器,它位于 CPU 和主存储器之间,用于暂时存放常用的数据和指令,从而加快 CPU 对数据和指令的访问速度。Cache 的工作原理主要包括以下几个方面:

  1. 数据局部性原理:

    • 时间局部性 - 被访问的数据在短时间内很可能再次被访问。
    • 空间局部性 - 被访问的数据附近的数据在短时间内很可能也会被访问。
  2. Cache 与主存的交互:

    • CPU 首先在 Cache 中查找所需的数据和指令,如果找到 (Cache 命中), 则直接从 Cache 中读取。
    • 如果在 Cache 中找不到 (Cache 未命中), 则从主存中读取数据和指令,并将其复制到 Cache 中。
    • 当 Cache 空间满时,根据一定的替换算法 (如 LRU) 淘汰掉一些数据,腾出空间。
  3. Cache 的组织结构:

    • 按照组相联的方式组织,包括直接映射、全相联、n - 路组相联。
    • 通过标记、组索引、块偏移等字段定位数据在 Cache 中的位置。
  4. Cache 的性能指标:

    • 命中率 - 访问数据在 Cache 中命中的概率。
    • 平均访问时间 - 包括命中时间和未命中时的主存访问时间。

通过 Cache 的设计,可以大幅提高 CPU 与主存之间的数据传输速度,提升整个计算机系统的性能。现代 CPU 中通常配备有 L1、L2、L3 等多级 Cache, 层次更加丰富。

# 局部性原理

局部性原理是计算机系统中非常重要的一个概念,它描述了程序在执行过程中对存储器的访问模式。主要包括以下两种类型的局部性:

  1. 时间局部性 (Temporal Locality):

    • 这种局部性指的是,如果某个数据项被访问,那么在不远的将来它很可能被再次访问。
    • 产生时间局部性的原因包括:
      • 程序中存在循环、递归等结构,同一段代码会被多次执行。
      • 变量在程序中的生命周期较短,在较短时间内会被重复访问。
    • 利用时间局部性可以将频繁访问的数据保存在速度较快的存储器 (如缓存) 中,提高访问效率。
  2. 空间局部性 (Spatial Locality):

    • 这种局部性指的是,如果某个数据项被访问,那么在它附近的数据项在不远的将来也很可能被访问。
    • 产生空间局部性的原因包括:
      • 程序中存在顺序执行的结构,按照地址顺序访问内存。
      • 数据结构中存在相邻元素的访问,如数组、链表等。
    • 利用空间局部性可以将相邻的数据一起加载到较快的存储器中,提高访问效率。

计算机系统的层次化存储结构,如 CPU 缓存、虚拟内存等,都是充分利用局部性原理来提高系统性能的结果。程序员在设计程序时,也要充分考虑局部性原理,通过合理的数据结构和算法设计来提高程序的执行效率。