~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/core-api/idr.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 .. SPDX-License-Identifier: GPL-2.0+
  2 
  3 .. include:: ../disclaimer-zh_CN.rst
  4 
  5 :Original: Documentation/core-api/idr.rst
  6 
  7 :翻译:
  8 
  9  周彬彬 Binbin Zhou <zhoubinbin@loongson.cn>
 10 
 11 :校译:
 12 
 13  司延腾 Yanteng Si <siyanteng@loongson.cn>
 14  吴想成 Wu Xiangcheng <bobwxc@email.cn>
 15  时奎亮 Alex Shi <alexs@kernel.org>
 16 
 17 ======
 18 ID分配
 19 ======
 20 
 21 :作者: Matthew Wilcox
 22 
 23 概述
 24 ====
 25 
 26 要解决的一个常见问题是分配标识符(IDs);它通常是标识事物的数字。比如包括文件描述
 27 符、进程ID、网络协议中的数据包标识符、SCSI标记和设备实例编号。IDR和IDA为这个问题
 28 提供了一个合理的解决方案,以避免每个人都自创。IDR提供将ID映射到指针的能力,而IDA
 29 仅提供ID分配,因此内存效率更高。
 30 
 31 IDR接口已经被废弃,请使用 ``XArray`` 。
 32 
 33 IDR的用法
 34 =========
 35 
 36 首先初始化一个IDR,对于静态分配的IDR使用DEFINE_IDR(),或者对于动态分配的IDR使用
 37 idr_init()。
 38 
 39 您可以调用idr_alloc()来分配一个未使用的ID。通过调用idr_find()查询与该ID相关的指针,
 40 并通过调用idr_remove()释放该ID。
 41 
 42 如果需要更改与一个ID相关联的指针,可以调用idr_replace()。这样做的一个常见原因是通
 43 过将 ``NULL`` 指针传递给分配函数来保留ID;用保留的ID初始化对象,最后将初始化的对
 44 象插入IDR。
 45 
 46 一些用户需要分配大于 ``INT_MAX`` 的ID。到目前为止,所有这些用户都满足 ``UINT_MAX``
 47 的限制,他们使用idr_alloc_u32()。如果您需要超出u32的ID,我们将与您合作以满足您的
 48 需求。
 49 
 50 如果需要按顺序分配ID,可以使用idr_alloc_cyclic()。处理较大数量的ID时,IDR的效率会
 51 降低,所以使用这个函数会有一点代价。
 52 
 53 要对IDR使用的所有指针进行操作,您可以使用基于回调的idr_for_each()或迭代器样式的
 54 idr_for_each_entry()。您可能需要使用idr_for_each_entry_continue()来继续迭代。如果
 55 迭代器不符合您的需求,您也可以使用idr_get_next()。
 56 
 57 当使用完IDR后,您可以调用idr_destroy()来释放IDR占用的内存。这并不会释放IDR指向的
 58 对象;如果您想这样做,请使用其中一个迭代器来执行此操作。
 59 
 60 您可以使用idr_is_empty()来查看当前是否分配了任何ID。
 61 
 62 如果在从IDR分配一个新ID时需要带锁,您可能需要传递一组限制性的GFP标志,但这可能导
 63 致IDR无法分配内存。为了解决该问题,您可以在获取锁之前调用idr_preload(),然后在分
 64 配之后调用idr_preload_end()。
 65 
 66 IDR同步的相关内容请见include/linux/idr.h文件中的“DOC: idr sync”。
 67 
 68 IDA的用法
 69 =========
 70 
 71 IDA的用法的相关内容请见lib/idr.c文件中的“DOC: IDA description”。
 72 
 73 函数和数据结构
 74 ==============
 75 
 76 该API在以下内核代码中:
 77 
 78 include/linux/idr.h
 79 
 80 lib/idr.c

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php