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 制成 |