Основополагающим принципом всех систем Кеш памяти, является принцип локальности, - при исполнении программы в течение некоторого относительно малого интервала времени происходит обращение к памяти в пределах ограниченного диапазона адресов (как по коду программы, так и по данным).
Когда определенное слово вызывается из основной памяти, оно вместе с соседними словами переносится в кэш память, что позволяет при очередном запросе быстро обращаться к следующим словам. Если при обращении к памяти задействуется слово из Кеш, то такое событие – попадание, иначе – промах. Эффективность Кеш определяется отношением количества попаданий к числу обращений к памяти.
При взаимодействии ОП с КЭШем, ОП рассматривается как С блоков фиксированной длины по К слов в каждом. Кэш-память состоит из M блоков аналогичного размера. При считывании слова из какого-либо блока ОП этот блок копируется в одну из строк кэша и ему присваивается тег, содержащий часть соответствующего адреса ОП. Выбор емкости кэша - это всегда компромисс между стоимостью и быстродействием. Размер строки выбирают равным ширине шины данных, связывающей кэш и основную память. Наиболее часто кэш организуется по ассоциативному типу, с поиском по тегу.
|
|
Соответствие между блоками в основной памяти и блоками в Кеш определяется функцией отображения. Подразделяют прямое, ассоциативное и множественно-ассоциативное отображение.
При прямом отображении месторасположение блока ОП в Кеше однозначно определяется на основе его адреса в памяти. Каждому блоку памяти назначается своя строка Кеша, но каждая строка Кеша может принимить информацию из разных блоков. Для поиска блока в Кеше ему приписывается тег, отражающий номер этого блока в ОП.
При ассоциативном отображеним блок основной памяти может размещаться в любой строке Кеша. При этом для идентификации необходимо хранить его адрес (почти полный) в теге. При выполнении программы теговые биты сгенерированного процессором адреса по очереди сравниваются с теговыми битами каждого блока Кеша. Если совпадение найдено, определяется попадание в Кеш.
При множетвенно-ассоциативном отображеним, блоки Кеша объединяются в множества, и каждый блок ОП может располагаться в любом из блоков определенного множества.
Перенос в оперативную память изменений, внесенных процессором в данные, находящиеся в КЭШе, определяется политикой поддержания информационной целостности.
Немедленное обновление элемента основной памяти называется сквозной записью. Тогда прежде всего обновляется слово хранящееся в основной памяти. Если в кэш-памяти есть копия этого слова, то она тоже обновляется. Если же в кэш отсутствует копия этого слова, то либо из основной памяти в кэш пересылается блок, содержащий обновленное слово (сквозная запись с отображением), либо это не делается (сквозная запись без отображения).
|
|
При обратной записи, слово заменяется только в кэш-память. Если соответствующей строки в кэш-памяти нет, то нужный блок сначала пересылается из ОП, после чего запись все равно осуществляется в кэш-память
Особой проблемой для кэш-памяти является запись. Когда процессор записывает слово, а это слово находится в кэш-памяти, он, очевидно, должен или обновить слово, или отбросить данный элемент кэш-памяти. Практически во всех разработках используется обновление кэш-памяти. А что же можно сказать об обновлении копии в основной памяти? Эту операцию можно отложить на потом до того момента, когда строка кэш-памяти будет готова к замене алгоритмом LRU. Выбор труден, и ни одно из решений не является предпочтительным. Немедленное обновление элемента основной памяти называется сквозной записью. Тогда прежде всего обновляется слово хранящееся в основной памяти. Если в кэш-памяти есть копия этого слова, то она тоже обновляется. Если же в кэш отсутствует копия этого слова, то либо из основной памяти в кэш пересылается блок, содержащий обновленное слово (сквозная запись с отображением), либо это не делается (сквозная запись без отображения). Этот подход обычно гораздо проще реализуется, и к тому же, он более надежен, поскольку современная память всегда может восстановить предыдущее состояние, если произошла ошибка. К сожалению, при этом требуется передавать больший поток информации к памяти, поэтому в более сложных проектах стремятся использовать альтернативный подход — обратную запись. При обратной записи, слово заносится только в кэш-память. Если соответствующей строки в кэш-памяти нет, то нужный блок сначала пересылается из ОП, после чего запись все равно осуществляется в кэш-память. Т. е при каждом обращении к основной памяти выполняются две пересылки (запись замещаемой строки в память и чтение нужной в кеш).