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

时间:2017-09-21 02:35:43

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

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

1 个答案:

答案 0 :(得分:1)

您可能遇到过 virtqueue 概念。 virtqueue 环具有一定的(有限的)容量,并且,由于某些设备通过同时调度大量大请求可以更有效地工作,间接描述符< / em>功能派上用场,允许这种操作。这个想法只是增加环容量,这是通过在内存中存储间接描述符 并插入其<来实现的。主要virtqueue中的/ em> desciptor(INDIRECT标志设置在这样的描述符上以显示其性质)。因此,当在主环中处理此类间接描述符时,控制权将传递给间接描述符 (它位于由主环中间接描述符addrlen。然后处理来自这样的中的描述符,并且通过当前描述符中缺少NEXT标志来确定的结尾。如果发现未设置标志,则控制权将传递回 virtqueue

所以,粗略地说,它只是一个技巧来代替&#34;由少数描述符在环中的普通描述符,从而增加总容量。因此,间接描述符 - 是环中的普通描述符,它设置了INDIRECT标志并引用了间接缓冲区。后者是一块内存,其中包含要处理的普通描述符的

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