Contents

Linux中的缓冲区和高速缓存

1. 概述

在本教程中,我们将了解缓冲内存和高速缓存以及它们之间的区别。众所周知,Linux 文件系统缓冲区和缓存的使用使输入和输出 (I/O) 操作更快。

但是,在讨论缓冲区和缓存之间的区别之前,我们需要了解它们是什么以及它们是如何操作的。

2. 缓冲

缓冲是将数据预加载到称为缓冲内存的内存保留区域的过程。

**缓冲存储器是主存储器 (RAM) 中的临时存储区域,用于存储两个或多个设备之间或应用程序与设备之间传输的数据。**缓冲补偿了数据发送方和接收方之间传输速度的差异。

只要应用程序或传输数据的设备之间的传输速度不同,系统就会自动在 RAM 中创建缓冲区。缓冲区累积从发送方接收到的数据字节,并在准备好时将其提供给接收方。

打印长文档时,缓冲区很有用。系统会自动创建一个缓冲区并用文档数据填充它,这样它就不必在处理下一页之前等待打印机。

**在计算机网络中,缓冲区在数据碎片和重组中很有用。**从发送者的角度来看,系统将一大块数据分解成小数据包,然后通过网络发送。在接收器端,系统创建一个缓冲区,收集碎片数据包并将它们重新组合成原始格式。

**缓冲支持应用程序输入或输出 (IO) 的复制语义。**让我们假设一个应用程序有一个要写入硬盘的缓冲区并且它执行*write()*系统调用。如果应用程序在系统调用返回之前更改了缓冲区数据,则复制语义会在最后一次系统调用时提供数据的版本。

缓冲区以三种能力执行:

  • 有限容量:缓冲内存大小是有限的,如果已满则阻止发送者
  • 无限容量:缓冲内存大小是无限的,可以接受来自发送者的任意数量的数据
  • 零容量:缓冲内存大小为零,阻塞所有发送方,直到收到数据

3. 缓存

缓存是临时存储给定资源副本的过程,以便更快地处理对同一资源的后续请求。

高速缓存是一种快速的静态随机存取存储器 (SRAM),计算机芯片可以比标准动态随机存取存储器 (DRAM) 更有效地访问它。它可以存在于 RAM 或硬盘中。在 RAM 中缓存称为内存缓存,而在硬盘中缓存称为磁盘缓存。

磁盘缓存是有利的,因为如果系统崩溃,硬盘中的缓存数据不会丢失。但是,与内存缓存相比,磁盘缓存中的数据访问速度较慢。

磁盘缓存大小的范围可以从普通硬盘中的 128 MB 到固态磁盘 (SSD) 中的 1 GB。

每当程序向硬盘请求数据时,系统首先会检查缓存。如果请求的数据不存在于高速缓存中,它只会检查硬盘。这极大地改进了数据处理,因为直接从硬盘访问它的速度较慢。

缓存可以支持对大量信息的随机访问。此外,高速缓存还使用复杂的算法来帮助决定保留或删除哪些数据。

我们可以使用free 命令来检查缓冲内存和缓存内存的大小:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       6.4Gi       170Mi       402Mi       1.1Gi       573Mi
Swap:         2.0Gi       589Mi       1.4Gi

我们通过*-h*标志以人类可读的格式显示结果。在这种情况下,RAM 中的缓冲存储器和高速缓存存储器的总大小为 1.1GB。

高速缓存内存相对于 RAM 可能较小,但它对系统的总体性能有显着影响。

4. 缓冲区和缓存之间的主要区别

让我们看一下缓冲区和缓存之间的一些主要区别:

缓冲 缓存
仅存在于 RAM 中 存在于 RAM 或硬盘中
补偿交换数据的两个程序之间的速度差异 加快访问频繁请求的数据
存储原始数据 存储原始数据的副本
RAM中的普通临时存储位置 RAM 或硬盘中的快速存储位置
由动态 RAM 制成 由静态 RAM 制成