作者在书中谈论缓冲区缓存时 -UNIX操作系统的设计,说的是
缓冲区始终位于哈希队列中,但它可能位于也可能不位于空闲列表中。
空闲列表中可能根本没有使用过的缓冲区怎么办?它们不是只是免费列表的一部分吗?
书中介绍的数据结构与讨论的类似这里
这本书讨论了 UNIX System V。
答案1
“那么缓冲区中的缓冲区呢?空闲列表那可能根本没有被使用过?他们不就是这样吗空闲列表的一部分?”
我相信你已经回答了你自己的问题!来自同一文本:
“当系统启动时,每个缓冲区都会被放入空闲列表中。”
“……它可能在免费列表中,也可能不在免费列表中。”
它在系统初始化时位于空闲列表中,因为它是免费的!但当系统消耗一个缓冲区并将其放入哈希队列以供使用,然后将其扔回空闲列表时,情况可能并非如此。
哈希队列有点像在说“是的,我已经看到了这个并以某种方式使用了它。”这并不一定意味着它已经从缓冲区队列中处理完毕。
措辞有点混乱,我不得不挖掘你引用的文字。为了清楚起见,我正在查看第 40/41 页。
答案2
空闲列表是一种用于在缓冲区高速缓存中搜索未锁定和空闲缓冲区的算法。该数据结构主要用于写入缓冲区。因为对于写入,您可以选择任何缓冲区,而对于读取,则需要特定的缓冲区。
现在,空闲列表中存在的所有缓冲区可能不为空,但肯定已解锁。此外,所有缓冲区都存在于哈希队列中,但不存在于空闲列表中。
因为在安装时,管理员会被询问队列的数量,然后决定将所有缓冲区放入这些队列中。因此,系统必须将所有缓冲区列在哈希队列中。