Алгоритмы замещения Кривых Алексей krivykhalexey@mail.ru Зольников Павел pasha.zolnikov@gmail.com Самунь Виктор victor.samun@gmail.com IT Summer SPb 2012 13.07.2012 Оптимальный алгоритм (алгоритм Белади) • Вытеснять те сегменты, которые не понадобятся дольше всего • Идеальный оракул LRU • Least Recently Used • Вытесняем сегмент, который не использовался дольше всего • rLRU ropt aB, где rLRU - количество страниц, замещенных LRU, B – размер кэша, a-константа • Недостаток: Использует слишком мало информации Random Replacement • Замещает случайно выбранный сегмент • Был реализован в ARM процессорах • Главное преимущество - простота LFU • LFU – Feast Frequently Used • Вытесняем элемент, к которым обращались меньше всего раз • Недостаток: Имеет тенденцию хранить страницы, которые были популярны в прошлом. LRU/K • LRU/1 = LRU • Преимущества – Использует больше информации, чем LRU, при K >1 – Основан на понятии «старение», учитывающем, только последние K обращений • Недостаток: – Cложность – Необходим вспомогательный алгоритм для неопределенного случая Backward K-distance • Имеем к моменту времени t строку запросов r1 , r2 ,..., rt • bt ( p, K ) x, если rt x p, и было в точности K-1 значений i, таких, что t x i t где ri p • bt ( p, K ) , если p не появлялось K раз в строке r1 , r2 ,..., rt LRU/K замещение • В качестве жертвы выбираем сегмент, для которого bt ( p, K ) максимальное • Неопределенная ситуация возникает, если сегментов с bt ( p, K ) больше одного, в этом случае необходимо использовать вспомогательный алгоритм 2Q • 2Q – 2 Queue • Как и LRU/K имеет тенденцию оставлять только популярные страницы • Как утверждает Theodore Jonson из университета Флорида, работает также хорошо, как и LRU/K • Ain(25% ) – FIFO, Am-LRU, Aout(50%)-FIFO 2Q • If (X ϶ Am) then pushToHead(X, Am) else if(X ϶ Aout) then pushToHead (X, Am) else if (X ϶Ain) else pushToHead(X, Ain) pushToHead(V, Aout) end if • Где X – запрашиваемая страница, V - жертва