В состав ЛЗУ всегда входит контроллер ЛЗУ, осуществляющий управление его работой. Обобщенная архитектура ЛЗУ с учетом наличия контроллера представлена на рис. 1.
Рис. 1.
Рассмотрим работу ЛЗУ в двух случаях: запись (из МП в ОЗУ) и чтение (из ОЗУ в МП)
Управление ЛЗУ в процессе записи данных из МП в ОЗУ
Запрашиваемый адрес поступает в блок поиска и сравнения адресов ЛЗУ. Блок производит поиск указанного адреса в таблице тэгов. Далее возможны два варианта:
адрес найден (случай "кэш-попадания"), то есть данные из запрашиваемой ячейки ОЗУ уже содержатся в ЛЗУ. В этом случае контроллер ЛЗУ обновляет эти данные, записывая в найденную ячейку ЛЗУ новые данные, переданные МП.
адрес не найден (случай "кэш-промаха"). В данном случае необходимо выделить какую-то ячейку ЛЗУ под сохранение данных и сохранить их. Контроллер ЛЗУ производит выделение ячейки ЛЗУ в соответствии с алгоритмом замещения, который будет описан ниже.
Помимо записи данных в ЛЗУ, они должны быть сохранены также и в основном ЗУ. Это может быть сделано в соответствии с одним из следующих алгоритмов:
Алгоритм "сквозной записи". Одновременно с записью данных в ЛЗУ происходит их сохранение в ОЗУ. Достоинство данного алгоритма — надежность, так как данные в ОЗУ и ЛЗУ всегда соответствуют друг другу (когерентны). Недостаток — при каждой операции записи приходится выполнять долгий цикл обращения к основному ЗУ.
Алгоритм "обратной записи". Данные сохраняются только в ЛЗУ, но при этом помечаются как модифицированные (т.е. не соответствующие ОЗУ). Сохранение же в основное ОЗУ производится позже, например во время простоя системной шины, или когда занимаемая ячейка ЛЗУ потребуется для хранения другой информации. Достоинство — нет обращения к основному ЗУ в каждом цикле записи. Недостаток — более сложная аппаратная реализация ЛЗУ (нужно реализовывать отложенное сохранение, а также хранить для каждой ячейки признак модифицированности).
Управление ЛЗУ в процессе чтения данных из ОЗУ в МП
МП начинает цикл обмена по чтению (устанавливает адрес на шине адреса, активизирует управляющие линии).
Запрашиваемый адрес поступает в блок поиска и сравнения адресов ЛЗУ. Блок производит поиск указанного адреса в таблице тэгов. Далее возможны два варианта:
адрес найден (случай "кэш-попадания"), то есть данные из запрашиваемой ячейки ОЗУ уже содержатся в ЛЗУ. В этом случае контроллер ЛЗУ возвращает МП данные, хранящиеся в ЛЗУ.
адрес не найден (случай "кэш-промаха"). В данном случае необходимо выделить какую-то ячейку ЛЗУ, загрузить в нее данные из ОЗУ, расположенные по запрашиваемому адресу и вернуть эти данные в МП. Контроллер ЛЗУ производит выделение ячейки ЛЗУ в соответствии с алгоритмом замещения, который будет описан ниже.
Загрузка данных из ОЗУ в ЛЗУ может быть организована в соответствии с двумя алгоритмами:
алгоритм "отложенного чтения". Загрузка из ОЗУ в ЛЗУ начинается только после того, как запрашиваемый адрес не найден в ЛЗУ.
Алгоритм "сквозного чтения". Цикл чтения из ОЗУ данных по запрашиваемому адресу начинается одновременно с началом поиска в ЛЗУ. В случае "кэш-попадания" цикл прерывается, в случае "кэш-промаха" — цикл завершается загрузкой необходимых данных в ЛЗУ.
Очевидно, что второй алгоритм обеспечивает более быструю загрузку, так как цикл обмена начинается еще до фиксации состояния "кэш-промаха". Однако в данном случае каждый раз выполняется обращение к основному ЗУ, которое является весьма энергоемким. Данный факт можно рассматривать как недостаток для случая мобильных систем с автономным питанием, когда проблема энергопотребления весьма актуальна.
Алгоритм замещения данных в ЛЗУ
Представим себе, что необходимо загрузить в ЛЗУ данные из некоторой ячейки ОЗУ. В случае ЛЗУ прямого отображения загрузка может быть произведена только в одну ячейку, имеющую соответствующий индекс. В случае других архитектур, имеются несколько ячеек ЛЗУ, в которые потенциально могут быть загружены данные из ЗУ по требуемому адресу. Задача контроллера — выбрать из них одну. Эта задача решается согласно одному из следующих алгоритмов.
"Случайное замещение". Ячейка выбирается среди возможных случайным образом. Контроллер ЛЗУ содержит в своем составе генератор случайных чисел. Этот алгоритм является наипростейшим с точки зрения аппаратной реализации, однако он неэффективен, так как может привести к "затиранию" часто используемых данных.
"Метод простой очереди". Описывается принципом "первым вошел, первым вышел" (FIFO). Замещению подвергаются данные, загруженные наиболее давно. Такой алгоритм обеспечивает примерно одинаковое время хранения данных в ЛЗУ.
Удаление редко используемой информации. Замещению подвергаются данные, к которым дольше всего не было обращений. Таким образом, наиболее часто используемые данные сохраняются в ЛЗУ максимально долго.
Использование методов 2 и 3 требует особой аппаратной реализации ЛЗУ, в частности необходимо введение служебного ЗУ, которое будет для каждой ячейки ЛЗУ содержать информацию о времени загрузки данных или о времени последнего обращения. С точки зрения эффективности, третий алгоритм представляется наиболее эффективным, если принимать во внимание, что основная задача ЛЗУ — как раз хранение наиболее часто используемых данных.