Alex Shi <seakeel@xxxxxxxxx> 于2021年10月15日周五 下午4:21写道: > > On Tue, Oct 12, 2021 at 8:34 PM Yanteng Si <siyanteng01@xxxxxxxxx> wrote: > > > > Translate Documentation/core-api/assoc_array.rst into Chinese. > > > > Signed-off-by: Yanteng Si <siyanteng@xxxxxxxxxxx> > > --- > > .../zh_CN/core-api/assoc_array.rst | 473 ++++++++++++++++++ > > .../translations/zh_CN/core-api/index.rst | 2 +- > > 2 files changed, 474 insertions(+), 1 deletion(-) > > create mode 100644 Documentation/translations/zh_CN/core-api/assoc_array.rst > > > > diff --git a/Documentation/translations/zh_CN/core-api/assoc_array.rst b/Documentation/translations/zh_CN/core-api/assoc_array.rst > > new file mode 100644 > > index 000000000000..8071d9241dc9 > > --- /dev/null > > +++ b/Documentation/translations/zh_CN/core-api/assoc_array.rst > > @@ -0,0 +1,473 @@ > > +.. include:: ../disclaimer-zh_CN.rst > > + > > +:Original: Documentation/core-api/assoc_array.rst > > + > > +:翻译: > > + > > + 司延腾 Yanteng Si <siyanteng@xxxxxxxxxxx> > > + > > +:校译: > > + > > + > > + > > +.. _cn_core-api_assoc_array: > > + > > +================== > > +通用关联数组的实现 > > +================== > > + > > +简介 > > +==== > > + > > +这个关联数组的实现是一个具有以下属性的对象容器: > > + > > +1. 对象是不透明的指针。该实现不关心它们指向哪里(如果有的话)或它们指向什么(如果有的 > > + 话)。 > > + > > + .. note:: > > + > > + 指向对象的指针 *必须* 在最小有效位为零。 > > + > > +2. 对象不需要包含供数组使用的链接块。这允许一个对象同时位于多个数组中。相反,数组是 > > + 由指向对象的元数据块组成的。 > > + > > +3. 对象需要索引键来定位它们在阵列中的位置。 > > + > > +4. 索引键必须是唯一的。插入一个与已经在数组中的且具有相同键值的对象将取代旧的对象。 > > + > > +5. 索引键可以是任何长度,也可以是不同的长度。 > > + > > +6. 索引键应该在早期就对长度进行编码,即在任何由于长度引起的变化出现之前。 > > + > > +7. 索引键可以包括一个哈希值,以便将对象分散到整个数组中。 > > + > > +8. 该数组可以迭代。对象不一定会按索引键的顺序出现。 > > + > > +9. 数组可以在被修改的时候进行迭代,只要RCU的读锁被迭代器持有。然而,请注意,在这种情 > > + 况下,一些对象可能会被看到不止一次。如果这是个问题,迭代器应该锁定以防止修改。然 > > + 而,除非删除,否则对象不会被错过。 > > + > > +10. 数组中的对象可以通过其索引键进行查询。 > > + > > +11. 当数组被修改时,对象可以被查询,前提是进行查询的线程持有RCU的读锁。 > > + > > +该实现在内部使用了一棵由16个指针节点组成的树,这些节点在每一层都由索引键的小数点进行索 > > +引,其方式与基数树相同。为了提高内存效率,可以放置快捷键,以跳过本来是一系列单占节点的地 > > +方。此外,节点将叶子对象指针打包到节点的空闲空间中,而不是做一个额外的分支,直到有对象 > > +需要被添加到一个完整的节点中。 > > + > > +公用API > > +======= > > + > > +公用API可以在 ``<linux/assoc_array.h>`` 中找到。关联数组的根是以下结构:: > > + > > + struct assoc_array { > > + ... > > + }; > > + > > +该代码是通过启用 ``CONFIG_ASSOCIATIVE_ARRAY`` 来选择的,以:: > > + > > + ./script/config -e ASSOCIATIVE_ARRAY > > + > > + > > +编辑脚本 > > +-------- > > + > > +插入和删除功能会产生一个“编辑脚本”,以后可以应用这个脚本来实现更改,而不会对ENOMEM造 > > 而不会造成 ``ENOMEM``的风险。 OK,Thanks! > > > +成风险。这保留了将被安装在内部树中的预分配的元数据块,并跟踪在应用脚本时将从树中删除的 > > +元数据块。 > > remove '在', change to "并跟踪应用脚本时..."? OK,Thanks! > > > + > > +在脚本应用后,这也被用来跟踪死块和死对象,以便以后可以释放它们。释放是在RCU宽限期过后 > > +进行的--因此允许访问功能在RCU读锁下进行。 > > + > > +脚本在API之外显示为一个类型为:: > > + > > + struct assoc_array_edit; > > + > > +有两个处理脚本的功能: > > + > > +1. 应用一个编辑脚本:: > > + > > + void assoc_array_apply_edit(struct assoc_array_edit *edit); > > + > > +这将执行编辑功能,插值各种写屏障,以允许在RCU读锁下的访问继续进行。然后,编辑脚本将被 > > +传递给 call_rcu(),以释放它和它所指向的任何死的东西。 > > Forgive my poor memory, why we remove the backquote `` around call_rcu > and others? I am so sorry, I will fix it. > > For the left, > Reviewed-by: Alex Shi <alexs@xxxxxxxxxx> Thank you very much! Thanks. Yanteng