第三章存储系统

存储器概述

存储器的分类

1.在计算机中的作用分类

  1. 主存储器 (Main Memory)

    • RAM (Random Access Memory): 随机访问存储器,这是一种易失性存储器,意味着当电源关闭时,其中的数据会被清除。RAM 可以进一步分为两种类型:
      • SRAM (Static RAM): 静态随机访问存储器,速度快但成本较高,常用于高速缓存。
      • DRAM (Dynamic RAM): 动态随机访问存储器,需要定期刷新数据,速度较慢但成本较低,是主内存中最常见的类型。
    • ROM (Read-Only Memory): 只读存储器,在早期的计算机中用于存储固定的程序或数据,如BIOS。现代计算机中,类似的非易失性存储功能通常由闪存实现。
  2. 辅助存储器 (Secondary Storage)

    • 这些存储设备提供了长期的数据存储,并且通常是非易失性的,即即使在断电后也能保持数据。典型的辅助存储设备包括:
      • 硬盘驱动器 (HDD): 传统的磁盘存储技术,使用旋转的磁盘来存储数据。
      • 固态驱动器 (SSD): 使用闪存技术进行数据存储,提供更快的速度和更好的耐用性。
      • 光盘 (CD/DVD/Blu-ray): 利用激光技术来读写数据。
  3. 高速缓存 (Cache Memory)

    • 这是一种非常快速的小容量存储器,位于CPU与主存储器之间,用于暂时存储最近经常访问的数据或指令,以减少CPU的等待时间。高速缓存可以分为多个层级,例如L1、L2和L3缓存。
  4. 寄存器 (Registers)

    • 寄存器是CPU内部的小型存储单元,用于临时存储数据、地址和状态信息。它们是最快的存储类型之一,因为它们直接位于处理器内部。
  5. 外部存储器 (External Storage)

    • 这些设备用于便携式数据存储和传输,例如USB闪存驱动器、移动硬盘等。

2.存储介质分类 

  1. 半导体存储器 (Semiconductor Memory)

    • 静态随机存取存储器 (SRAM): 快速但成本较高,通常用于高速缓存。
    • 动态随机存取存储器 (DRAM): 成本较低,但需要定期刷新数据,广泛用于主内存。
    • 只读存储器 (ROM): 包括PROM、EPROM、EEPROM等,主要用于存储固定不变的数据和启动程序。
    • 闪存 (Flash Memory): 非易失性存储器,用于固态硬盘(SSD)、USB闪存驱动器等。
  2. 磁性存储介质 (Magnetic Storage Media)

    • 磁盘 (Disk Drives): 包括硬盘驱动器(HDD),使用旋转的磁性盘片来存储数据。
    • 磁带 (Tape Drives): 用于备份和归档的大容量存储,访问速度相对较慢。
  3. 磁芯存储器 (Magnetic Core Memory)

    这是一种早期的非易失性存储技术,现在已经不再使用。
  4. 光存储介质 (Optical Storage Media)

    光盘 (Optical Disks): 包括CD、DVD、蓝光光盘(Blu-ray Discs)等,使用激光技术来读写数据。

3.存取方式分类

  1. 随机存取存储器 (Random Access Memory, RAM)

    这是最常见的类型,允许CPU直接访问任何存储位置而不必按顺序读取其他数据。RAM可以进一步分为:
    • 动态随机存取存储器 (Dynamic RAM, DRAM): 使用电容来存储位信息,需要定期刷新,成本较低。
    • 静态随机存取存储器 (Static RAM, SRAM): 使用触发器电路来存储位信息,速度较快但成本较高。
  2. 顺序存取存储器 (Sequential Access Memory)

    这种类型的存储器要求数据必须按照顺序读取或写入。典型的应用包括磁带存储,其中数据只能按线性顺序访问。
  3. 直接存取存储器 (Direct Access Memory)

    直接存取存储器允许立即访问特定地址的数据,与随机存取存储器类似。这种分类有时与RAM相同,但在某些上下文中也可以指代特定类型的存储介质,如磁盘驱动器。
  4. 只读存储器 (Read-Only Memory, ROM)

    这类存储器只能读取不能写入新数据。ROM有多种类型,包括:
    • 电可擦除可编程ROM (Electrically Erasable Programmable ROM, EEPROM): 可以通过电子方式擦除和重写。
    • 可擦除可编程ROM (Erasable Programmable ROM, EPROM): 可以通过紫外线擦除并重新编程。
    • 可编程ROM (Programmable ROM, PROM): 可以一次性编程。
    • 掩模ROM (Mask ROM): 在制造过程中编程,无法更改。
  5. 顺序加直接存取存储器 (Sequential and Direct Access Memory)

    某些存储介质,如磁带和光盘,可能同时支持顺序存取和直接存取。例如,磁带上的索引点可以帮助快速定位到特定的位置,然后从该位置开始顺序读取数据。
  6. 缓存存储器 (Cache Memory)

    虽然缓存存储器本质上属于随机存取类型,但它的工作方式有所不同。它通常位于CPU与主内存之间,用来存储最近频繁使用的数据,以提高数据访问速度4。

4.信息的可保存性分类

  1. 易失性存储器 (Volatile Memory)

    易失性存储器的特点是在电源关闭后会丢失其存储的数据。这类存储器通常用于需要快速读写操作的场合。主要包括:
    • 静态随机存取存储器 (SRAM): 用于高速缓存,速度比DRAM更快,但成本更高。
    • 动态随机存取存储器 (DRAM): 主要用于计算机的主内存,需要定期刷新以保持数据不丢失。
  2. 非易失性存储器 (Non-Volatile Memory)

    非易失性存储器能够在电源关闭后仍然保持其存储的数据。这类存储器通常用于长期存储数据。主要包括:
    • 磁芯存储器 (Magnetic Core Memory): 早期的非易失性存储技术,现在已经不再使用。
    • 光学存储介质: 如CD、DVD和蓝光光盘(Blu-ray Discs),使用激光技术来读写数据。
    • 磁性存储介质: 如硬盘驱动器(HDD)、磁带等,使用磁性材料来存储数据。
    • 闪存 (Flash Memory): 是一种常用的非易失性存储技术,广泛应用于固态硬盘(SSD)、USB闪存驱动器和各种嵌入式系统中。
    • 只读存储器 (ROM): 早期的ROM包括掩模ROM、PROM、EPROM和EEPROM。随着技术的发展,这些类型的ROM逐渐被闪存所取代。

 存储器的性能指标

  1. 存储容量

    指存储器可以容纳的二进制信息量。通常以字节(Byte)为单位,如 KB(千字节)、MB(兆字节)、GB(吉字节)、TB(太字节)等。存储容量越大,能够存储的数据就越多。
  2. 存储速度

    • 数据存取时间:从存储器接到读/写指令到完成读/写操作所经历的时间。
    • 存储周期:连续两次独立的存储器操作(如读或写)所需的最小间隔时间。存储周期越短,存储器的速度越快。
  3. 数据传输率

    单位时间内存储器与外部(如 CPU)之间传输的数据量,通常以每秒传输的字节数(B/s)来表示。
  4. 可靠性

    指存储器在规定时间内正常工作的概率。可靠性高的存储器能够减少数据丢失和错误的风险。
  5. 功耗

    存储器工作时消耗的电能,对于移动设备和一些对能耗有严格要求的系统来说,功耗是一个重要的考虑因素。
  6. 价格

    单位存储容量的成本。在满足性能需求的前提下,价格越低越好。

多级层次的存储结构 

算机系统的多级层次存储结构是为了平衡性能和成本而设计的。这种结构通常包括多个层级的存储器,每个层级具有不同的性能特征。下面是从最接近处理器到最远离处理器的顺序介绍这些层级:

  1. 寄存器 (Registers)

    • 位置:位于CPU内部。
    • 特点:速度最快,容量最小。
    • 用途:用于暂存数据、指令和状态信息。
    • 示例:通用寄存器、指令寄存器、状态寄存器等。
  2. 高速缓存 (Cache Memory)

    • 位置:位于CPU内部或非常接近CPU。
    • 特点:速度快,容量较小。
    • 用途:存储最近常用的数据和指令。
    • 示例:L1、L2 和 L3 缓存。
  3. 主存储器 (Main Memory)

    • 位置:位于主板上。
    • 特点:速度快于磁盘存储,容量较大。
    • 用途:存储正在运行的程序和数据。
    • 示例:DRAM (动态随机存取存储器)。
  4. 辅助存储器 (Secondary Storage)

    • 位置:位于主板外,通常通过总线或其他接口连接。
    • 特点:非易失性,容量大,速度较慢。
    • 用途:存储操作系统、应用程序和文件数据。
    • 示例:HDD (硬盘驱动器)、SSD (固态驱动器)。
  5. 远程存储 (Remote Storage)

    • 位置:不在本地计算机上,通过网络访问。
    • 特点:非易失性,容量极大,访问速度受网络影响。
    • 用途:存储备份数据、云存储服务。
    • 示例:云存储服务、NAS (网络附加存储)。
  6. 离线存储 (Offline Storage)

    • 位置:物理上与计算机分离。
    • 特点:非易失性,容量大,访问速度最慢。
    • 用途:长期归档数据。
    • 示例:磁带库、光盘库。

每一层都旨在满足不同性能需求和成本预算。靠近处理器的层级具有更高的速度和较小的容量,而远离处理器的层级则具有更大的容量和较低的速度。这种多级层次结构有助于优化系统的整体性能,同时控制成本。例如,CPU可以直接访问寄存器和高速缓存中的数据,而无需访问较慢的主内存或磁盘存储器,从而提高了系统的响应速度和效率。

半导体随机存储器

半导体随机存储器(Random Access Memory,RAM)是一种可读可写的存储器,主要包括静态随机存储器(Static Random Access Memory,SRAM)和动态随机存储器(Dynamic Random Access Memory,DRAM)。

  1. 静态随机存取存储器 (Static Random Access Memory, SRAM)

    • 特点:使用触发器电路来存储位信息,不需要刷新。
    • 优点:速度快、功耗低、稳定。
    • 缺点:成本高、密度低。
    • 用途:通常用于高速缓存(L1、L2、L3缓存)。
  2. 动态随机存取存储器 (Dynamic Random Access Memory, DRAM)

    • 特点:使用电容来存储位信息,需要定期刷新。
    • 优点:成本低、密度高。
    • 缺点:速度较SRAM慢。
    • 用途:主要用于主内存。
  3. 同步动态随机存取存储器 (Synchronous Dynamic Random Access Memory, SDRAM)

    • 特点:与系统时钟同步,以提高数据传输速率。
    • 用途:现代计算机系统中的主流DRAM类型。
  4. 双倍数据速率 SDRAM (Double Data Rate SDRAM, DDR SDRAM)

    • 特点:在每个时钟周期的上升沿和下降沿传输数据,从而提高数据传输速率。
    • 版本:DDR1、DDR2、DDR3、DDR4、DDR5。
    • 用途:广泛应用于个人电脑、服务器等。
  5. 扩展数据输出 RAM (Extended Data Out RAM, EDORAM)

    • 特点:在读取操作期间可以连续输出数据,提高数据吞吐量。
    • 用途:在一些较旧的系统中使用。
  6. 突发式 EDO DRAM (Burst EDO DRAM)

    • 特点:结合了EDO和突发模式(burst mode)的优点。
    • 用途:主要用于一些旧系统。
  7. 异步动态随机存取存储器 (Asynchronous Dynamic Random Access Memory)

    • 特点:不与系统时钟同步。
    • 用途:主要用于一些特殊应用,如某些嵌入式系统。

主存储器

主存储器(Main Memory),也称为物理内存或RAM(Random Access Memory),是计算机系统中用于暂时存储数据和程序指令的主要存储区域。它是CPU可以直接访问的存储器,用于存放当前运行的程序及其相关数据。主存储器通常由半导体存储器构成,主要分为两种类型:静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM)。

DRAM芯片和内存条

DRAM(Dynamic Random Access Memory,动态随机存取存储器)是现代计算机中最常用的主存储器类型之一。DRAM芯片是构成DRAM内存条的基本单元,而内存条则是将多个DRAM芯片组装在一起,以便安装在计算机的主板上。下面分别介绍DRAM芯片和内存条的相关细节。

DRAM芯片

DRAM芯片是一种使用电容来存储数据的半导体存储器。由于电容会随时间自然放电,因此需要定期刷新以维持数据的完整性。DRAM芯片通常采用标准封装形式,如BGA(Ball Grid Array,球栅阵列)或TSOP(Thin Small Outline Package,薄型小型封装)等。

DRAM芯片的关键特性:
  • 容量:单个DRAM芯片的容量通常为几百兆位(Mb)到几千兆位(Gb)。
  • 速度:包括存取时间和存取周期,决定了数据读取和写入的速度。
  • 功耗:随着技术的进步,DRAM芯片的功耗也在逐渐降低。
  • 刷新周期:电容需要定期刷新以避免数据丢失,刷新周期定义了刷新的频率。

内存条

内存条(也称为RAM条或DIMM,Dual In-line Memory Module,双列直插式内存模块)是将多个DRAM芯片组合在一起形成的模块,可以直接插入计算机主板上的内存插槽中。

内存条的关键特性:
  • 类型:根据不同的标准,内存条有不同的类型,如SDRAM、DDR SDRAM(DDR1、DDR2、DDR3、DDR4、DDR5)等。
  • 容量:内存条的容量由安装在其上的DRAM芯片的数量和每个芯片的容量决定,常见的容量有4GB、8GB、16GB等。
  • 速度:内存条的数据传输速率,以MHz为单位,如DDR4-2133、DDR4-3200等。
  • 带宽:单位时间内可以传输的数据量,通常以GB/s(吉字节/秒)为单位。
  • 电压:不同的内存条需要不同的工作电压,较低的电压有助于降低功耗。
  • 兼容性:内存条需要与主板兼容,确保正确的插槽类型和电压等级。

多模块存储器

多模块存储器(Multi-Module Memory)是一种通过将多个存储模块组织起来以提高存储器系统性能的技术。这种技术通过利用并行性来增加带宽和减少存取时间,特别是在需要处理大量数据的应用中特别有用。下面详细介绍多模块存储器的概念、分类和优势。

多模块存储器的概念

多模块存储器是由多个独立的存储模块组成的存储系统。每个存储模块可以看作是一个独立的存储单元,它们可以并行地执行读写操作。通过这种方式,可以显著提高存储系统的整体性能。

分类

多模块存储器可以根据其组织结构和访问方式分为以下几种类型:

  1. 交叉存取存储器 (Interleaved Memory)

    • 定义:将数据分成多个部分,存储在不同的存储模块中。
    • 特点:可以并行访问多个模块,从而减少存取时间。
    • 示例:如果一个32位的数据被分成4个8位的部分,每个部分存储在一个单独的模块中,则可以同时访问这四个模块来获取完整的数据。
  2. 交错存储器 (Interleaved Memory)

    • 定义:数据按字节或字分组,交错存储在不同的模块中。
    • 特点:通过并行访问多个模块,可以提高数据传输率。
    • 示例:在一个四路交错的系统中,数据的第一个字节存储在第一个模块中,第二个字节存储在第二个模块中,以此类推。
  3. 多体存储器 (Multi-bank Memory)

    • 定义:存储器被划分为多个“体”(bank),每个体可以独立访问。
    • 特点:当一个体正在执行读写操作时,另一个体可以开始新的操作。
    • 示例:现代DDR SDRAM内存条通常包含多个体,允许并发访问以提高性能。
  4. 多端口存储器 (Multi-port Memory)

    • 定义:每个存储模块都有多个端口,允许多个进程同时访问同一模块。
    • 特点:减少了冲突的机会,提高了并发访问的能力。
    • 示例:在多处理器系统中,每个处理器可以有自己的端口来访问共享存储器。
  5. 分布式存储器 (Distributed Memory)

    • 定义:每个处理器或节点都有自己的局部存储器。
    • 特点:通过网络或互连机制连接各节点,实现数据交换。
    • 示例:分布式计算集群或超级计算机中的存储架构。

优势

  • 提高带宽:通过并行访问多个存储模块,可以显著增加数据传输率。
  • 减少存取时间:并行访问可以减少等待时间,从而加快数据读取和写入速度。
  • 增强可靠性:多个模块的设计可以提高系统的容错能力。
  • 灵活性:多模块存储器可以根据需要进行扩展或配置,以适应不同的性能需求。

应用

  • 高性能计算:在超级计算机和大型科学计算中,多模块存储器可以提供必要的带宽和支持。
  • 数据中心:服务器和数据中心需要处理大量数据,多模块存储器可以提高数据处理速度。
  • 嵌入式系统:对于实时系统和嵌入式应用,多模块存储器可以提供必要的性能和响应速度。

主存储器与CPU之间的连接

主存储器(通常称为RAM)与CPU之间的连接是通过一系列的总线和控制器来实现的。这种连接的设计对于确保数据和指令能够高效地在CPU和主存储器之间传递至关重要。下面是关于主存储器与CPU之间连接的一些关键点:

CPU与主存储器之间的总线

  1. 地址总线 (Address Bus)

    • 作用:用于传送地址信息,指示CPU想要访问的存储器位置。
    • 宽度:地址总线的宽度决定了CPU可以寻址的最大内存空间大小。例如,一个32位地址总线可以寻址232232个地址,即4GB的内存空间。
  2. 数据总线 (Data Bus)

    • 作用:用于实际传输数据。
    • 宽度:数据总线的宽度决定了每次传输的数据量。例如,一个64位的数据总线意味着每次可以传输64位的数据。
  3. 控制总线 (Control Bus)

    • 作用:用于发送控制信号,比如读/写命令、中断请求等。
    • 信号:包括读信号(RD#)、写信号(WR#)、片选信号(CS#)、地址锁存使能信号(ALE#)等。

内存控制器

内存控制器是CPU和主存储器之间的重要组成部分,负责管理内存访问的所有方面,包括:

  • 仲裁:决定哪个CPU核心或外围设备有权访问内存。
  • 寻址和数据传输:处理来自CPU的地址信息和数据。
  • 刷新管理:对于DRAM而言,需要定期刷新以保持数据的完整性。
  • 错误校验:使用ECC(Error Correcting Code)等技术来检测和纠正数据错误。

连接方式

  1. 直接连接:早期的计算机系统中,内存控制器集成在CPU外部,通过专用的总线与CPU相连。
  2. 集成内存控制器:现代处理器通常将内存控制器集成在CPU内部,这可以减少内存访问延迟并提高性能。
  3. 北桥芯片:在一些较旧的系统架构中,内存控制器位于北桥芯片中,通过前端总线(Front Side Bus, FSB)与CPU相连。

总线频率与带宽

  • 总线频率:决定了数据总线上的数据传输速度。
  • 带宽:单位时间内可以传输的数据量,通常以GB/s(吉字节/秒)为单位表示。

高速缓存的作用

  • 高速缓存 (Cache Memory):位于CPU和主存储器之间,用于存储最近使用过的数据和指令,以减少CPU访问主存储器的次数。高速缓存分为L1、L2和L3缓存,它们的速度依次递减,容量依次增大。

总结

主存储器与CPU之间的连接是通过地址总线、数据总线和控制总线来实现的。内存控制器负责管理内存访问,并在现代系统中通常集成在CPU内部。此外,高速缓存的存在进一步优化了数据访问的性能。这些组件共同协作,确保数据能够快速准确地在CPU和主存储器之间传输,从而提高计算机系统的整体性能。

外部存储器 

磁盘存储器

磁盘存储器是一种常见且重要的计算机外部存储设备,具有大容量、非易失性等特点。

其主要组成部分包括:

  1. 磁盘:由多个盘片叠加而成,盘片表面涂有磁性材料,用于存储数据。
  2. 磁头:用于读写磁盘上的数据。
  3. 驱动机构:使磁盘高速旋转,以便磁头能够定位到指定的磁道。

磁盘存储器按照工作原理和结构的不同,可以分为以下两类:

  1. 硬盘驱动器(Hard Disk Drive,HDD):通常具有较大的存储容量和相对较低的成本。但由于其包含机械部件,读写数据时存在寻道时间和旋转延迟,导致随机读写性能相对较差。
  2. 固态硬盘(Solid State Drive,SSD):使用闪存芯片存储数据,没有机械运动部件,因此读写速度更快,尤其是随机读写性能显著优于 HDD。但 SSD 单位容量的价格通常较高。

磁盘存储器的性能指标主要包括:

  1. 存储容量:决定了能够存储的数据量大小。
  2. 平均寻道时间:磁头移动到指定磁道所需的平均时间。
  3. 平均等待时间:磁盘旋转到指定扇区所需的平均时间。
  4. 数据传输率:单位时间内传输的数据量。

磁盘阵列(RAID,Redundant Array of Independent Disks)是一种将多个物理磁盘驱动器作为一个逻辑单元进行管理的技术,旨在提高存储性能和/或提供数据冗余。磁盘阵列可以使用传统的硬盘驱动器(HDD)或固态硬盘(SSD)来构建。

RAID 的不同级别提供了不同的性能特征和数据保护级别。以下是一些常见的 RAID 级别及其特点:

  1. RAID 0 (Striping):

    • 描述: 数据被分割成块并分布在多个磁盘上。
    • 优点: 提供最高的数据传输率。
    • 缺点: 没有冗余,任何一个磁盘故障会导致整个阵列数据丢失。
    • 应用场景: 需要高速度但不需要数据保护的情况。
  2. RAID 1 (Mirroring):

    • 描述: 所有数据都会被复制到两个或更多的磁盘上。
    • 优点: 提供完全的数据冗余。
    • 缺点: 存储效率低,因为你只能使用一半的磁盘空间。
    • 应用场景: 关键数据的安全性和快速恢复至关重要。
  3. RAID 5:

    • 描述: 结合了数据条带化和奇偶校验信息,奇偶校验信息分布在所有的磁盘上。
    • 优点: 提供数据冗余和良好的读写性能。
    • 缺点: 写入性能略低,因为每次写入都需要更新奇偶校验信息。
    • 应用场景: 大多数通用应用,如数据库服务器、文件服务器等。
  4. RAID 6:

    • 描述: 类似于 RAID 5,但使用双重奇偶校验,允许同时失效两个磁盘。
    • 优点: 更高的数据冗余,能够容忍两个磁盘同时故障。
    • 缺点: 更高的开销和更复杂的实现。
    • 应用场景: 需要高可靠性和数据保护的应用场景。
  5. RAID 10 (1+0):

    • 描述: 先镜像后条带化,即首先创建镜像对,然后将这些镜像对配置为条带。
    • 优点: 同时提供高数据传输率和冗余。
    • 缺点: 需要至少四个磁盘,存储效率较低。
    • 应用场景: 高性能和数据保护要求较高的应用。

RAID 可以通过专用的硬件控制器(如 NetRAID 控制器)或者通过软件来实现。软件 RAID 可以在大多数操作系统中实现,如 Linux 中的 mdadm 工具。硬件 RAID 通常由特殊的 RAID 卡或集成在主板上的 RAID 控制器来支持。

当选择磁盘阵列时,要考虑的因素包括所需的性能水平、数据冗余的需求、成本预算以及维护和扩展的能力。例如,在视频中提到的使用三块 8TB 西部数据红盘 Plus 组建 RAID 5 阵列的例子,这种配置非常适合家庭和小型企业 NAS 用户,因为它提供了良好的性能和适度的数据保护,同时保持了合理的成本。

 固态硬盘

固态硬盘(Solid State Drive,简称SSD)是一种使用半导体存储技术而非传统的旋转磁盘来存储数据的非易失性存储设备。与传统的硬盘驱动器(HDD)相比,SSD 不包含任何移动部件,这使得它们具有更快的数据访问速度、更低的功耗、更好的抗震能力和更长的使用寿命。

固态硬盘的基本组成

  • 闪存芯片:这是 SSD 中的主要存储介质,通常基于 NAND 闪存技术。
  • 控制器:负责管理数据的读写操作、垃圾回收、磨损均衡等功能。
  • 缓存:有些 SSD 配备 DRAM 缓存来加速数据处理过程。

固态硬盘的特点

  1. 高速度:SSD 的读写速度远超传统硬盘,因为它们没有机械延迟。
  2. 低功耗:由于没有旋转盘片和磁头,SSD 的功耗更低。
  3. 抗震性:没有移动部件意味着它们更耐冲击和震动。
  4. 启动时间短:SSD 几乎可以立即启动,不像 HDD 需要等待盘片加速到正常转速。
  5. 安静:SSD 运行时几乎无声。

接口类型

  • SATA SSD:使用与传统硬盘相同的 SATA 接口,速度受限于 SATA 总线的最大速率(通常为 6 Gbps)。
  • M.2 SSD:这是一种紧凑型的接口标准,通常用于笔记本电脑和小型 PC,支持 PCIe 和 SATA 接口。
  • PCIe/NVMe SSD:利用 PCI Express 总线直接与 CPU 通信,提供极高的数据传输速度。NVMe 是一种专门为 PCIe SSD 设计的协议,优化了延迟和 I/O 效率。

应用场景

  • 个人电脑:用于操作系统、应用程序和游戏加载,提供更快的启动时间和响应速度。
  • 服务器:用于数据库、虚拟化和高性能计算环境,以提升 I/O 密集型任务的性能。
  • 嵌入式系统:适用于需要可靠性和耐用性的工业和移动应用。

高速缓冲存储器

高速缓冲存储器(Cache)是一种特殊的存储器,它位于中央处理器(CPU)和主存储器(Main Memory)之间,用来减少CPU访问主存所需的时间。Cache 存储器的主要目的是提高数据访问速度,从而增强计算机的整体性能。

以下是关于高速缓冲存储器的一些关键点:

  1. 位置与功能

    • Cache 存储器位于 CPU 附近,比主存更靠近 CPU。
    • 它用于存储最近频繁使用的数据和指令,以便 CPU 可以快速访问它们。
  2. 类型

    • L1 Cache:最接近 CPU 的 Cache,速度最快但容量最小。
    • L2 Cache:比 L1 大,速度略慢。
    • L3 Cache:现代处理器可能还包含更大的 L3 Cache,它通常共享给多个 CPU 核心。
    • 除了这些内部 Cache 之外,还有一些系统级 Cache,如最后一级缓存(Last Level Cache, LLC)。
  3. 技术

    • Cache 使用 SRAM(静态随机存取存储器),它比 DRAM(动态随机存取存储器,通常用于主存)更快但成本更高。
    • Cache 使用复杂的算法来决定存储哪些数据,如最近最少使用(LRU)算法。
  4. 特性

    • 命中率:指 CPU 请求的数据在 Cache 中找到的概率。
    • 替换策略:当 Cache 满时,需要有机制来决定哪些数据应该被移除以腾出空间。
    • 写策略:包括写直达(Write-through)和写回(Write-back)两种方式。
  5. 多级层次结构

    • 多级 Cache 结构可以进一步优化性能,通过在不同速度和容量之间做出权衡。
    • 不同级别的 Cache 有不同的命中率、容量和访问时间。
  6. 动态调整策略

    • Cache 系统可能会根据实际工作负载动态调整其行为,以优化性能。
  7. 其他应用

    • 除了 CPU Cache 之外,还有其他类型的 Cache,例如磁盘缓存、网络缓存等。
    • 固态硬盘(SSD)也可能使用 Cache 技术来提高性能,例如通过 SLC Cache(单层单元缓存)来提供更快的写入速度。

高速缓存(Cache)的基本原理是利用存储器访问的局部性原理来提高数据访问效率。这里所说的“局部性”是指程序执行时数据访问的两个重要特性:时间局部性和空间局部性。

时间局部性 (Temporal Locality)

如果一个数据项被访问过一次,则很可能在不久的将来会被再次访问。这是因为程序往往会重复执行某些指令序列,如循环体内的指令。

空间局部性 (Spatial Locality)

如果一个数据项被访问过一次,则它附近的内存地址也很可能被访问。这是因为程序往往连续地访问内存区域,如数组遍历。

基于这两个特性,Cache 的基本原理可以总结如下:

  1. 存储器层次结构

    • Cache 存储器位于 CPU 和主存之间,速度比主存快得多。
    • Cache 的容量通常比主存小很多。
  2. 数据预取

    • 当 CPU 访问某块数据时,该数据以及邻近的数据都会被复制到 Cache 中。
    • 这样做是为了利用空间局部性。
  3. 替换策略

    • 如果 Cache 已满而又有新的数据需要放入时,就需要有一种机制来确定哪些旧的数据可以从 Cache 中移除。
    • 常见的替换策略有:最近最少使用(LRU, Least Recently Used)、先进先出(FIFO, First In First Out)、随机替换(RAND, Random Replacement)等。
  4. 写策略

    • Cache(高速缓存)的写策略定义了如何处理写入操作时的数据一致性问题。在多级存储层次结构中,Cache 作为 CPU 和主内存之间的高速缓冲区,用于减少访问延迟。为了保持数据的一致性,不同的写策略会在 Cache 和主存之间同步数据。

    • 以下是几种常用的 Cache 写策略:

    • 写直达 (Write Through)

      • 原理:每次写操作时,数据不仅写入 Cache 中,也同时写入主存中。
      • 优点
        • 数据始终与主存保持一致,简化了多处理器系统中的缓存一致性问题。
      • 缺点
        • 写操作速度受限于主存的速度。
        • 增加了主存的写流量。
    • 写回 (Write Back)

      • 原理:写操作只更新 Cache 中的数据,而不是立即写入主存。只有当该 Cache 行被替换出去时,才将改动过的数据写回到主存中。
      • 优点
        • 减少了写操作对主存的影响,提高了写操作的速度。
        • 降低了主存的写流量。
      • 缺点
        • 如果发生系统崩溃,可能会丢失 Cache 中的改动数据。
        • 在多处理器系统中,需要复杂的协议来保证一致性。
    • 写分配 (Write Allocate)

      • 原理:如果写操作的目标地址不在 Cache 中,则先从主存中读取该行到 Cache 中,然后执行写操作。
      • 优点
        • 保证了 Cache 和主存的一致性。
        • 对于频繁写入的数据行来说,可以提高命中率。
      • 缺点
        • 增加了写操作的时间,因为需要先从主存中读取数据。
        • 增加了 Cache 的填充程度。
    • 非写分配 (No Write Allocate)

      • 原理:如果写操作的目标地址不在 Cache 中,则直接写入主存而不放入 Cache 中。
      • 优点
        • 减少了 Cache 的填充程度,使得更多的读操作能够命中 Cache。
      • 缺点
        • 可能会导致 Cache 的利用率降低,特别是对于频繁写入的数据行。
    • 写绕过 (Write Around)

      • 原理:与非写分配类似,如果写操作的目标地址不在 Cache 中,则直接写入主存而不放入 Cache 中。
      • 优点
        • 减少了 Cache 的填充程度。
        • 适用于写密集型应用,减少了 Cache 的污染。
      • 缺点
        • 可能导致 Cache 利用率降低。
    • 写合并 (Write Combining)

      • 原理:将连续的写操作合并成一个更大的写操作,以减少对主存的写访问次数。
      • 优点
        • 减少了对主存的写操作次数,从而提高了性能。
      • 缺点
        • 需要额外的硬件支持来识别连续的写操作。
    • 选择合适的写策略

      选择哪种写策略取决于具体的应用场景和设计目标。例如,对于需要高可靠性的系统,写直达可能是更好的选择;而对于需要高性能的系统,写回策略则更为合适。此外,还需要考虑 Cache 的大小、应用的工作负载特性等因素。

  5. 一致性维护

    • Cache 必须保持与主存数据的一致性,确保任何时候 CPU 访问的数据都是最新的。
    • 在多核或多处理器系统中,还需要解决多 Cache 之间的数据一致性问题。
  6. 命中与缺失

    • 命中:当 CPU 请求的数据已经在 Cache 中时,称作 Cache 命中。
    • 缺失:当 CPU 请求的数据不在 Cache 中时,称作 Cache 缺失(miss)。这时需要从主存中获取数据,并将其放入 Cache 中。
  7. 组织方式

    • 直接映射(Direct Mapped):每个主存块只能映射到 Cache 中的一个固定位置。
    • 全相联映射(Fully Associative):主存块可以映射到 Cache 中的任意位置。
    • 组相联映射(Set Associative):介于直接映射和全相联映射之间,每个主存块可以映射到一组 Cache 位置中的任意一个。
  8. 替换算法

    • Cache 替换算法是在 Cache 存储器已满的情况下决定哪些数据块应该被替换出去以腾出空间给新数据的策略。替换算法的选择对 Cache 的命中率有很大影响,进而影响整个系统的性能。以下是一些常见的 Cache 替换算法:

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

      • 原理:当 Cache 满时,替换掉最近最少被访问的数据块。
      • 优点:能很好地反映时间局部性,通常能获得较高的命中率。
      • 缺点:实现起来相对复杂,需要维护每个数据块的访问历史记录。
      • 实现:可以通过双向链表和哈希表结合的方式实现,其中链表头部是最近使用的数据块,尾部是最少使用的数据块。
    • 先进先出 (FIFO, First In First Out)

      • 原理:当 Cache 满时,替换掉最早进入 Cache 的数据块。
      • 优点:实现简单。
      • 缺点:不考虑数据块的使用频率,可能导致频繁使用的数据块被替换掉。
      • 实现:可以使用循环队列来实现 FIFO。
    • 随机替换 (RAND, Random Replacement)

      • 原理:当 Cache 满时,随机选择一个数据块进行替换。
      • 优点:实现简单,不需要额外的硬件支持。
      • 缺点:可能意外替换掉频繁使用的数据块。
      • 实现:使用随机数生成器来选择替换的候选数据块。
    • 最近未使用 (NRU, Not Recently Used)

      • 原理:当 Cache 满时,替换掉最近未被访问的数据块。
      • 优点:实现简单,只需要为每个数据块设置一个标志位。
      • 缺点:可能替换掉近期频繁使用的数据块。
      • 实现:为每个数据块设置一个标志位,当数据块被访问时清零,否则定期检查并替换标志位为 1 的数据块。
    • 最少使用 (LFU, Least Frequently Used)

      • 原理:当 Cache 满时,替换掉访问频率最低的数据块。
      • 优点:更好地反映了数据的使用频率。
      • 缺点:实现复杂,需要维护每个数据块的访问计数。
      • 实现:为每个数据块维护一个访问计数器。
    • 最近不经常使用 (NMRU, Not Most Recently Used)

      • 原理:结合了 LRU 和 LFU 的特点,当 Cache 满时,选择最近使用次数较少的数据块进行替换。
      • 优点:既能反映时间局部性又能反映使用频率。
      • 缺点:实现较为复杂。
      • 实现:需要维护每个数据块的访问历史记录和访问计数。
    • 选择合适的替换算法

      选择哪种替换算法取决于具体的使用场景和 Cache 的设计目标。例如,在追求简单实现的情况下,FIFO 或 RAND 可能是合适的选择;而在追求高性能和高命中率的应用中,LRU 或 LFU 更加适用。

  9. 命中率

    • Cache 的命中率是衡量 Cache 效率的重要指标,指的是 Cache 命中的次数占总访问次数的比例。
    • Cache 的命中率越高,系统性能越好。

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃冰西瓜₍˄·͈༝·͈˄*₎◞

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值