Я прочитал много статей о алгоритме замены кэша ClockPro - улучшена версия замены часов. Для удобства сначала я использовал Clock. Теперь я хочу реализовать в Java Clock-Pro 2 руки (горячая и холодная, а не 3 руки в реальном алгоритме). Я нашел описание:
The ClockPro Algorithm
On Start():
cold_block = first block
hot_block = first block
On Memory Lookup():
curr_block = NULL
If block is in cache:
Set clock bit
Return block to CPU
Else:
While curr_block == NULL:
If cold_block.clockbit == 0:
curr_block = cold_block
Else if cold_block.test == 1 :
Turn cold hand block hot
Unset the clockbit
Run Hot Hand Algorithm
Else:
cold_block.clockbit = 0
cold_block = cold_block.next
If curr_block is dirty : write
Find accessed block in memory
Return fetched block to the CPU
Replace curr_block with fetched one
Hot Hand Algorithm() :
curr_block = NULL
While curr_block == NULL:
If hot_block is cold :
hot_block.text = 0
Else if hot_block.clockbit == 0 :
Turn the block cold
Else :
hot_block.clockbit = 0
hot_block = hot_block.next
Если кто-нибудь пробовал, пожалуйста, ответить на некоторые вопросы:
Что тест период? Когда он начнется и какой тип мы можем использовать для него. Это немного, что может сказать нам, находится ли объект в тестовом периоде или нет, или это счетчик? Могут ли обе руки указывать на один блок за несколько секунд?
Если кто-нибудь, пожалуйста, помогите мне смоделировать такое поведение алгоритма в простом примере. Спасибо.