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