К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 82
Текст из файла (страница 82)
Управляющие схемы памяти разрабатываются таким образом, чтобы можно было использовать свойство локализации ссылок. Исходя из принципа локзлизации во времени, каждый элемент, к которому обршпается процессор, будь то команда программы или элемент данных, копируется в кзш, где он остается до тех пор, пока не потребуется снова. Исходя из принципа локализации в пространстве, в кэш копируется не только текущий элемент программы или данных, но еще и несколько близлежащих элементов. Набор элементов с последовательными адресами определенного размера мы будем называть блоком или алрокой кзюа. Обратимся к простой схеме, показанной на рис.
5.14. Если процессор выдает запрос чтения, содержимое блока памяти считывается по заданному адресу по одному слову в кзш. Когда впоследствии программа обратится к любому элементу этого блока, он будет прочитан не с диска, а прямо иэ каша. Обычно в каждый конкретный момент времени в кэш-памяти может храниться достаточно много блоков, но по сравнению с их общим количеством в основной памяти это очень мало.
Соответствие между блоками в основной памяти и блоками в кэше определяется функцией отображения. Когда кэш полон и производится обращение к отсутствующему в нем слову памяти (команде или данным), управляющее кэшем аппаратное обеспечение должно решить, какой из блоков удалить из каша, чтобы добавить в него новый блок, содержащий требуемое слово. Набор правил для принятия такого решения составляет алгоритм замещения.
Рис. 5.14. Использование кэш-памяти Процессор ничего не знает о существовании каша. Он просто выдает запросы чтения и записи, используя адреса, которые указывают на память, В ответ схема управления кэшем выясняет, имеется ли в таковом запрошенное слово. Если да, то в операции чтения или записи задействуется слово из каша. При этом говорят, что имеет место попадание в кэш.
В случае операции считывания обращение к основной памяти вообще не происходит. Если же выполняется операция записи, система может действовать одним из двух способов. При использовании первого из них, называемого протоколом сквозной записи, предполагается, что кэш и основная память обновляются одновременно. Второй способ подразумевает, что данные обновляются только в каше, после чего помечаются с помощью соответствующего битового флага, Упомянутый бит называют флагом изменения или модификации. Соответствующее слово в основной памяти обновляется позже, при 5.5. Кэш-память 351 удалении из кэша того блока, который содержит помеченное слово. Описанная ~ехнология называешься протоколом обратной записи или обратного копирования.
Протокол сквозной записи проще, но при его использовании производятся лишние операции записи в основную память — в том случае, если некоторое слово обновляется в каше несколько раз подряд. Конечно, подобное происходит и при обратной записи, поскольку при удалении блока из каша в память записываются все его слова, даже если изменилось только одно из них. Ситуация, прн которой слово, адресуемое операцией считывания, отсутствует в каше, называется промахом чтения.
В этом случае из основной памяти в кэш копируется блок, содержащий такое слово. Запрошенное слово передается в процессор после загрузки в кзш всего блока. В качестве альтернативы оно может быть передано в процессор сразу после его прочтения из основной памяти. Последний подход, называемый сквозной загрузкой, сокращает время ожидания слова процессором, но для его реализации требуется более сложная схема. Если в каше не оказывается слова, адресуемого операцией записи, мы говорим, что возникла ситуация, называемая промахом записи.
В таком случае, при использовании протокола сквозной записи, информация записывается прямо в основную память. Но если применяется протокол обратной записи, в кэш сначала копируется блок, содержащий заданное слово, а затем это слово перезаписывается в каше и помечается как измененное. 5.5.1. Функция отображения Чтобы показать, как происходит выборка блоков данных из памяти в кэш, мы обратимся к простому примеру.
Предположим, у нас имеется кэш, состоящий из 128 блоков по 16 слов в каждом, то есть с общим количеством слов, равным 2048 (2 К), и основная память, адресуемая с помощь 16-разрядных адресов. Основная память имеет объем 64 К слов, который мы будем рассматривать как 4 К блоков по 16 слов. Чтобы облегчить восприятие излагаемого материала, будем считать, что последовательные адреса указывают на последовательные слова.
Прямое отображение Простейшим способом сопоставления адресов блоков в кэше и в памяти является прямое отображение. При использовании этой технологии блок7' основной памяти отображается на блок7' по модулю 128 кэша, как показано на рнс. 5.15. Таким обрэзом, когда загружается один из блоков основной памяти, начинающихся 'по адресам О, 128, 256 и т. д., он записывается в блок каша О. Блоки 1, 129, 257 и т, д. записываются в блок каша 1 и т. д. Поскольку на каждый блок каша отображается более одного блока основной памяти, то даже при не до конца заполненном каше может возникнуть состязание за некоторую позицию. Например, команды программы, начавшиеся в блоке 1, после перехода могут продолжиться в блоке 129.
В результате выполнения программы оба эти блока должны быть скопированы в блок 1 каша. Конфликт разрешается просто: старый блок заменяется новым. Таким образом, местоположение блока в каше определяется на основе его адреса в памяти. Адрес в памяти может быть разделен на три поля (рис. 5.15). Четыре младших разряда задают одно из 16 слов блока.
Когда в кэш записывается новый 352 Глава 5. Система памяти блок, 7-разрядное поле номера блока данного каша определяет его местоположение. Пять старших разрядов задают адрес блока в памяти. При записи блока в кэш они указываются в специальном поле тега (дескрипторе). Такое поле имеется в кэше для каждого из его блоков — оно определяет, какому из 32 блоков памяти, отображаемых на данный блок каша, соответствует хранящаяся здесь информация.
Во время выполнения программы процессор генерирует адреса, в каждом из которых 7-разрядное поле номера блока каша указывает на конкретный блок в нем. Тег этого блока сравнивается со старшими 5 разрядами адреса, и если онк совпадают, значит, данное слово уже находится в кэше. В противном случае блок, содержащий данное слово, нужно извлечь из основной памяти и поместить в кэкс Технология прямого отображения очень проста, но ей недостает гибкости. Основная память Кэш Тег Блок Слово Адрес основной памяти Рис. 5.15.
Кэш с прямым отображением 5.5. Кэш-память 353 Ассоциативное отображение На рис. 5.16 показана схема гораздо более гибкого метода отображения, согласно которому блок основной памяти можно помещать в любой блок кэша. При этом для идентификации хранящегося в каше блока павгяти необходимо иметь уже не 5, а 12 бит. При выполнении программы теговые биты сгенерированною процессором адреса по очереди сравниваются с теговыми битами каждого блока каша, Если совпадение найдено, значит, содержащий данное слово блок уже присутствует в каше.
Такая технология называется ассоциативным отображением. Она предоставляет полную свободу выбора местоположения блока в каше, благодаря чему пространство каша может использоваться более эффективно. Новые блоки заменяют уже хранящиеся в кэше только в том случае, если кзш заполнен, причем для этой цели необходим алгоритм выбора удаляемого блока. Подобных алгоритмов, как станет ясно из раздела 5.5.2, довольно много. Стоимость ассоциативного каша выше, чем кэша с прямым отображением, поскольку в нем выполняется просмотр всех 123 тегов блоков.
Поиск блока в кзше называется ассоциативным нанном. Для того чтобы он выполнялся достаточно быстро, тети должны просматриваться параллельно. Основная память Кэш Тег Слово Адрес основной памяти Рис. 5.16. Ассоциативный кэш 364 Глава 6. Система памяти Множественно-ассоциативное отображение Технологии прямого и ассоциативного отображения могут использоваться совместно. В этом случае блоки каша объединяются в множества, и каждый блок основной памяти может располагаться в любом из блоков определенного множества. Причем вероятность конфликтов, являющихся одним из недостатков прямого отображения, значительно снижается.
Такой кзш, получивший название множественно-ассоциативного, дешевле полностью ассоциативного каша, поскольку в нем уменьшена область ассоциативного поиска. Рассмотрим принцип множественно-ассоциативного отображения на примере кзша с 64 множествами по два блока в каждом (рис. 5.17). Блоки памяти О, 64, 128, ..., 4032 отображаются на множество 0 и могут занимать любую из двух позиций в этом множестве. Наличие 64 множеств блоков означает, что 6-разрядное поле множества в составе адреса слова определяет, какое множество каша может содержать это слово.