最近我正在阅读linux内核中的virtio代码。我在源代码中遇到了“间接缓冲区”和“间接描述符”。我想知道“间接”是什么意思?
最佳答案
您可能已经遇到过virtqueue概念。 virtqueue环具有一定的(有限)容量,并且,由于某些设备可以通过并发分派(dispatch)大量大请求来更有效地工作,间接描述符 功能可以方便地允许这种操作。这个想法只是增加环容量,这是通过在内存中任何地方存储间接描述符表并插入其 主 virtqueue 中的描述符(在此类描述符上设置 INDIRECT 标志以显示其性质)。因此,当在主环中处理此类间接描述符时,控制权将传递给间接描述符表(驻留在由主环中的间接描述符的addr
和len
)。然后,处理此类表中的描述符,并且表的结尾由当前描述符中是否缺少NEXT
标志来确定。当发现该标志未设置时,控制权将传回virtqueue。
所以,粗略地说,这只是一个技巧,用少数描述符“替换”环中的普通描述符,从而增加整体容量。因此,间接描述符 - 是环中的普通描述符,它设置了INDIRECT
标志并引用间接缓冲区。后者是一 block 内存,其中包含要处理的普通描述符表。
另请注意,间接描述符表中的描述符本身不能是间接的。
关于data-structures - 什么是间接缓冲区和间接描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46334546/