data-structures - 什么是间接缓冲区和间接描述符?

标签 data-structures linux-kernel virtual-machine linux-device-driver

最近我正在阅读linux内核中的virtio代码。我在源代码中遇到了“间接缓冲区”和“间接描述符”。我想知道“间接”是什么意思?

最佳答案

您可能已经遇到过virtqueue概念。 virtqueue环具有一定的(有限)容量,并且,由于某些设备可以通过并发分派(dispatch)大量大请求来更有效地工作,间接描述符 功能可以方便地允许这种操作。这个想法只是增加环容量,这是通过在内存中任何地方存储间接描述符并插入 主 virtqueue 中的描述符(在此类描述符上设置 INDIRECT 标志以显示其性质)。因此,当在主环中处理此类间接描述符时,控制权将传递给间接描述符(驻留在由主环中的间接描述符addrlen)。然后,处理此类中的描述符,并且的结尾由当前描述符中是否缺少NEXT标志来确定。当发现该标志未设置时,控制权将传回virtqueue

所以,粗略地说,这只是一个技巧,用少数描述符“替换”环中的普通描述符,从而增加整体容量。因此,间接描述符 - 是环中的普通描述符,它设置了INDIRECT 标志并引用间接缓冲区。后者是一 block 内存,其中包含要处理的普通描述符

另请注意,间接描述符表中的描述符本身不能是间接的。

关于data-structures - 什么是间接缓冲区和间接描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46334546/

相关文章:

java - 正确使用带有自定义类的哈希表

linux - 如何在Linux中将大量带有数据(相同格式)的PDF转换为Excel?

memory - Rust - 为什么 malloc/alloc 和更多 'idiomatic' 方法之间的内存使用差异如此之大

data-structures - Redis Cluster 如何处理排序集 ZSET(和其他)的复制?

linux - 模糊测试 Linux 内核 : A student in peril.

c# - 使用 System.Management.Automation 调用 powershell 时如何从远程命令传递警告和详细流?

linux - Linux设备驱动程序是如何加载的?

linux - 切换到 (Linux) 内核模式

azure - 使用 Azure 应用程序网关基于路径将流量路由到容器

sql-server - 从运行在不同虚拟机中的 ASP.NET MVC Web 应用程序执行 SSIS 包