Algorithm 自适应替换缓存算法

Algorithm 自适应替换缓存算法,algorithm,caching,cloud,policies,page-replacement,Algorithm,Caching,Cloud,Policies,Page Replacement,我试图实现自适应替换缓存算法,但是,我在阅读文献,我不能理解该算法。谁能给我解释一下那个算法? 我看到它使用两个列表L1表示频率,L2表示最近度。但是L1和L2列表的T1,B1和T2,B2,我不明白 在本文中,我看到了这些信息 T1和T2保存正在缓存的实际数据。T1保存所有被引用一次的数据(页面)。T2保存已被引用2次或以上的页面。B1是一个重影列表,用于记住哪些页面曾经在T1缓存中。B2相同,仅适用于T2缓存。当您将T1和B1一起添加时,您会得到一组(称为L1)对缓存的或当前缓存的页面的引用,

我试图实现自适应替换缓存算法,但是,我在阅读文献,我不能理解该算法。谁能给我解释一下那个算法? 我看到它使用两个列表L1表示频率,L2表示最近度。但是L1和L2列表的T1,B1和T2,B2,我不明白


在本文中,我看到了这些信息

T1和T2保存正在缓存的实际数据。T1保存所有被引用一次的数据(页面)。T2保存已被引用2次或以上的页面。B1是一个重影列表,用于记住哪些页面曾经在T1缓存中。B2相同,仅适用于T2缓存。当您将T1和B1一起添加时,您会得到一组(称为L1)对缓存的或当前缓存的页面的引用,因为它们被引用了一次。L2也是如此,只是它包含了至少被引用过两次的页面引用

T1和T2共享一组固定大小的插槽(每个插槽可以容纳一页),我们使用B1和B2来决定如何在T1和T2之间共享这些插槽。这就是ARC自适应的原因——自动调整谁获得最多的插槽。如果B1持有对同一页面的多个引用,这意味着我们不允许T1持有其页面足够长的时间,应该允许它有更多的插槽来应对这种情况。B2也是如此


我不想在这里解释整个算法,但这至少是我对ARC列表的理解。

我想强调一些关键想法,并帮助您理解本文的叙述。这将有助于你对ARC有一些直觉

我们从大小为c的LRU缓存开始。除了页面缓存之外,我们还维护一个大小为c的缓存目录T,它只是描述缓存中页面的元数据数组。例如,页面元数据包含页面在存储介质中的物理地址

现在,请注意LRU不耐扫描。如果进程提取一系列c页,缓存中的每个页都将被逐出。这不是很有效,我们希望能够针对最近性和频率进行优化

关键思想#1:将缓存拆分为两个列表:T1和T2。T1包含最近使用的页面,T2包含经常使用的页面。这是抗扫描的,因为扫描会导致T1清空,但T2大部分不受影响

当缓存已满时,算法必须选择从T1或T2驱逐受害者。请注意,这些列表不必具有相同的大小,我们可以根据访问模式智能地为最近的页面或频繁的页面提供更多缓存。你可以在这里发明你自己的启发法

关键思想2:保持额外的历史记录。让B1和B2分别跟踪从T1和T2移出的页面的元数据。如果我们观察到T1中有许多缓存未命中,而B1中有命中,那么我们会对收回感到遗憾,并将更多的缓存提供给T1

ARC保留一个数字p以在T1和T2之间分割缓存

关键思想#3:在T1中缓存未命中和B1中命中时,ARC将p增加 . 这是“delta”或“后悔率”,它将B1中的命中概率与B2中的命中概率进行比较,假设在所有页面上均匀分布