操作系统中的缓冲 (Buffering)2025年4月22日 | 阅读6分钟 缓冲区是主内存中用于临时存储或保存数据的区域。换句话说,缓冲区临时存储在两个设备之间或应用程序与设备之间传输的数据。将数据临时存储在缓冲区中的行为称为缓冲。 在计算机内部,当在进程之间移动数据时,可能会使用缓冲区。缓冲区可以在硬件中的固定内存位置实现,也可以通过使用软件中的虚拟数据缓冲区来实现,该缓冲区指向物理内存中的一个位置。在所有情况下,数据缓冲区中的数据都存储在物理存储介质上。 大多数缓冲区都在软件中实现,由于其比硬盘驱动器快得多的访问时间,因此通常使用更快的 RAM 来存储临时数据。当接收数据速率与处理数据速率之间存在差异时,通常会使用缓冲区,例如,在打印机假脱机或在线视频流中。 缓冲区通常通过在内存中实现队列或 FIFO (先进先出) 算法来调整时序,同时以一种速率将数据写入队列,并以另一种速率将其读出。 缓冲的目的您在观看 YouTube 视频或直播时会遇到缓冲区。在视频流中,缓冲区代表在视频可以为观看者实时播放之前需要下载的数据量。在计算机环境中,缓冲区意味着将存储一定量的数据,以便在 CPU 使用之前预加载所需数据。 计算机中有许多运行速度各异的设备,需要缓冲区来充当所有交互组件的临时占位符。这样做是为了保持所有设备、程序和进程在此时的运行效率高且无问题。数据缓冲有三个原因: - 它有助于在数据传输的两个设备之间匹配速度。例如,硬盘必须存储从调制解调器接收的文件。我们知道,调制解调器的传输速度比硬盘慢。因此,从调制解调器传入的字节会累积在缓冲区中,当一个文件的所有字节都到达缓冲区后,整个数据将作为一个操作写入硬盘。
- 它有助于具有不同数据传输大小的设备相互适应。它有助于设备在发送或接收数据之前对其进行处理。在计算机网络中,大数据块被分解成小片段并通过网络发送。这些片段在接收端累积在缓冲区中,并被重新组装成一个完整的大消息。
- 它还支持复制语义。通过复制语义,缓冲区中的数据版本保证是系统调用时的数据版本,而不考虑之后对缓冲区中数据的任何更改。缓冲可以提高设备性能。它将一个作业的 I/O 操作与同一作业的计算重叠。
缓冲的类型操作系统中主要有三种缓冲类型:  1. 单缓冲区 在单缓冲区中,只使用一个缓冲区在两个设备之间传输数据。生产者将一个数据块放入缓冲区。之后,消费者消耗缓冲区。只有当缓冲区为空时,处理器才会再次生成数据。  面向块的设备:在面向块的设备中执行以下操作: - 系统缓冲区接收输入。
- 接收输入后,将块传输到用户空间,然后请求下一个块。
- 两个块同时工作。当用户处理一个数据块时,下一个块正在被读取。
- 操作系统可以交换进程。
- 操作系统可以将系统缓冲区的数据记录到用户进程。
面向流的设备:它执行以下操作: - 逐行操作用于滚动终端。用户一次输入一行,行尾带有回车符。
- 逐字节操作用于表单模式终端,其中每次按键都很重要。
2. 双缓冲区 在双缓冲区中,使用两个方案或两个缓冲区代替一个。在这种缓冲中,生产者同时生产一个缓冲区,而消费者消耗另一个缓冲区。因此,生产者无需等待填充缓冲区。双缓冲也称为缓冲区交换。  面向块:双缓冲区的工作方式如下。系统中存在两个缓冲区。 - 驱动程序或控制器使用一个缓冲区存储数据,同时等待其被更高级别的层获取。
- 另一个缓冲区用于存储来自较低级别模块的数据。
- 双缓冲的一个主要缺点是过程的复杂性会增加。
- 如果进程执行快速的 I/O 突发,那么使用双缓冲可能不够。
面向流:它执行这些操作,例如: - 逐行 I/O,用户进程不需要暂停输入或输出,除非进程超出了双缓冲。
- 逐字节 操作,双缓冲相对于两倍长度的单缓冲没有优势。
3. 循环缓冲区 当使用两个以上的缓冲区时,缓冲区的集合称为循环缓冲区。每个缓冲区都是循环缓冲区中的一个单元。与双缓冲相比,使用循环缓冲区可以提高数据传输速率。  - 在这种情况下,数据不会直接从生产者传递给消费者,因为在数据被消耗之前,由于缓冲区的覆盖而导致数据会发生变化。
- 生产者最多只能填充到 x-1 号缓冲区,而 x 号缓冲区中的数据正在等待被消耗。
缓冲如何工作在操作系统中,缓冲区的工作方式如下:  - 缓冲是为了有效处理数据流的生产者和消费者之间的速度不匹配。
- 在主内存中生成缓冲区,以堆积从调制解调器接收到的字节。
- 将数据接收到缓冲区后,数据将作为一个操作从缓冲区传输到磁盘。
- 这个数据传输过程不是瞬时的。因此,调制解调器需要另一个缓冲区来存储其他传入数据。
- 当第一个缓冲区填满时,会请求将其数据传输到磁盘。
- 调制解调器随后将其他传入数据填充到第二个缓冲区,同时将第一个缓冲区的数据传输到磁盘。
- 当两个缓冲区都完成其任务时,调制解调器切换回第一个缓冲区,同时将第二个缓冲区的数据传输到磁盘。
- 两个缓冲区将生产者和数据消费者隔离开,从而最大限度地减少它们之间所需的时间。
- 缓冲还为具有不同数据传输大小的设备提供了变化。
缓冲的优点在任何操作系统中,缓冲在任何进程或任务的执行过程中都起着非常重要的作用。它具有以下优点: - 使用缓冲区可以实现统一的磁盘访问。它简化了系统设计。
- 系统对进行 I/O 操作的用户进程不施加数据对齐限制。通过将数据从用户缓冲区复制到系统缓冲区,反之亦然,内核消除了用户缓冲区特殊对齐的需要,从而使用户程序更简单、更具可移植性。
- 使用缓冲区可以减少磁盘流量,从而提高整体系统吞吐量并降低响应时间。
- 缓冲区算法有助于确保文件系统的完整性。
缓冲的缺点缓冲区并非在所有方面都更好。因此,存在一些缺点,例如: - 拥有精确容纳元素数量所需大小的缓冲区既昂贵又不切实际。因此,缓冲区大多数时间会稍大一些,其余空间会被浪费。
- 缓冲区在任何给定时间的大小都是固定的。当缓冲区已满时,必须使用更大的尺寸重新分配它,并且必须移动其元素。类似地,当缓冲区中有效元素的数量远小于其大小时,必须使用较小的尺寸重新分配缓冲区并将元素移动,以避免过多浪费。
- 使用缓冲区需要在与用户进程之间读写时进行额外的数据复制。传输大量数据时,额外的复制会降低性能。
|