最近我在Linux内核中读取virtio代码。我在源代码中遇到了“间接缓冲区”和“间接描述符”。我想知道“间接”是什么意思?
答案 0 :(得分:1)
您可能遇到过 virtqueue 概念。 virtqueue 环具有一定的(有限的)容量,并且,由于某些设备通过同时调度大量大请求可以更有效地工作,间接描述符< / em>功能派上用场,允许这种操作。这个想法只是增加环容量,这是通过在内存中存储间接描述符 表 并插入其<来实现的。主要virtqueue中的/ em> desciptor(INDIRECT
标志设置在这样的描述符上以显示其性质)。因此,当在主环中处理此类间接描述符时,控制权将传递给间接描述符 表(它位于由主环中间接描述符的addr
和len
。然后处理来自这样的表中的描述符,并且通过当前描述符中缺少NEXT
标志来确定表的结尾。如果发现未设置标志,则控制权将传递回 virtqueue 。
所以,粗略地说,它只是一个技巧来代替&#34;由少数描述符在环中的普通描述符,从而增加总容量。因此,间接描述符 - 是环中的普通描述符,它设置了INDIRECT
标志并引用了间接缓冲区。后者是一块内存,其中包含要处理的普通描述符的表。
另请注意,间接描述符表中的描述符本身不能是间接的。