Documentation/translations/zh_CN/core-api/circular-buffers.rst

Source file repositories/reference/linux-study-clean/Documentation/translations/zh_CN/core-api/circular-buffers.rst

File Facts

System
Linux kernel
Corpus path
Documentation/translations/zh_CN/core-api/circular-buffers.rst
Extension
.rst
Size
7452 bytes
Lines
211
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0+

.. include:: ../disclaimer-zh_CN.rst

:Original: Documentation/core-api/circular-buffers.rst

:翻译:

 周彬彬 Binbin Zhou <zhoubinbin@loongson.cn>

:校译:

 司延腾 Yanteng Si <siyanteng@loongson.cn>
 吴想成 Wu Xiangcheng <bobwxc@email.cn>
 时奎亮 Alex Shi <alexs@kernel.org>

==========
环形缓冲区
==========

:作者: David Howells <dhowells@redhat.com>
:作者: Paul E. McKenney <paulmck@linux.ibm.com>


Linux 提供了许多可用于实现循环缓冲的特性。有两组这样的特性:

 (1) 用于确定2次方大小的缓冲区信息的便利函数。

 (2) 可以代替缓冲区中对象的生产者和消费者共享锁的内存屏障。

如下所述,要使用这些设施,只需要一个生产者和一个消费者。可以通过序列化来处理多个
生产者,并通过序列化来处理多个消费者。

.. Contents:

 (*) 什么是环形缓冲区?

 (*) 测量2次幂缓冲区

 (*) 内存屏障与环形缓冲区的结合使用
     - 生产者
     - 消费者

 (*) 延伸阅读



什么是环形缓冲区?
==================

首先,什么是环形缓冲区?环形缓冲区是具有固定的有限大小的缓冲区,它有两个索引:

 (1) 'head'索引 - 生产者将元素插入缓冲区的位置。

 (2) 'tail'索引 - 消费者在缓冲区中找到下一个元素的位置。

通常,当tail指针等于head指针时,表明缓冲区是空的;而当head指针比tail指针少一个时,
表明缓冲区是满的。

添加元素时,递增head索引;删除元素时,递增tail索引。tail索引不应该跳过head索引,
两个索引在到达缓冲区末端时都应该被赋值为0,从而允许海量的数据流过缓冲区。

通常情况下,元素都有相同的单元大小,但这并不是使用以下技术的严格要求。如果要在缓
冲区中包含多个元素或可变大小的元素,则索引可以增加超过1,前提是两个索引都没有超过
另一个。然而,实现者必须小心,因为超过一个单位大小的区域可能会覆盖缓冲区的末端并
且缓冲区会被分成两段。

测量2次幂缓冲区
===============

Annotation

Implementation Notes