![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Как уже говорилось выше, назначение кэш-памяти – временное хранение данных и команд, часто используемых процессором. Основной структурной единицей кэш-памяти является так называемая строка кэша (cache line). Длина строки кэша составляет обычно 32, 64, 128 или 256 байт.
Рассмотрим способы организации кэш-памяти, принятые в современных ЭВМ. Опишем возможные способы отображения адресов данных в оперативной памяти на адреса данных в кэш-памяти и, соответсвенно, способы поиска требуемых данных в кэш-памяти. Пусть, в качестве упрощенного примера, существует ЭВМ с десятибитным адресом. Следовательно, объем непосредственно адресуемой оперативной памяти составляет 210 байт. Пусть имеется кэш-память из восьми строк, каждая строка из восьми байт. Организация кэш-памяти показана на рис 18. С каждой строкой кэша связано поле тэга. Тэг (tag – пометка, отметка) – признак, используемый при поиске требуемых данных.
Существуют три основных способа организации кэш-памяти: 1) кэш с прямым отображением; 2) полностью ассоциативный кэш; 3) наборно ассоциативный кэш.
В случае кэша с прямым отображением адрес, формируемый процессором, имеет вид, показаный на рис 18 а). Адрес состоит из трех частей. Младшие биты адреса определяют конкретный байт в строке кэша. Их количество k определяется длиной строки кэша L
k = log2L.
Средние биты адреса определяют одну из строк кэша. Количество n средних битов определяется количеством M строк кэша
n = log2M.
тэг | |||||||||||
![]() | |||||||||||
![]() |
тэг | строка | байт |
а)
тэг | |||||||||||
![]() |
Тэг | байт |
б)
тэг | |||||||||||
![]() | |||||||||||
![]() |
тэг | набор | байт |
в)
Рис 18. Кэш-память. а) с прямым отображением; б) полностью ассоциативная; в) наборно-ассоциативная.
Оставшиеся старшие биты адреса используются в качестве тэга. При обращении к кэш-памяти тэг сравнивается с полем тега соответствующей строки, и, если они совпадают, строка содержит требуемые данные, иначе – нет.
Достоинство кэша с прямым отображением – очевидная простота реализации. Недостаток состоит в том, что несколько адресов с одинаковыми младшими k + n битами могут претендовать на одну и ту же ячейку кэша.
Этот недостаток полностью устранен в ассоциативной кэш-памяти (см. рис 18 б)). Адрес, формируемый процессором состоит из двух частей. Младшие биты так же как и раньше определяют адрес конкретного байта в строке. Старшие биты адреса одновременно сравниваются с тэгами для всех строк кэша. Если в результате сравнения для одной из строк обнаруживается совпадение, эта строка считается искомой. Байт может быть отображен на любую строку кэша. Ассоциативная кэш-память обладает всего одним, но весьма существенным недостатком – устройство ассоциативного сравнения является весьма сложным узлом, причем стоимость и сложность этого узла растут экспоненциально в зависимости от количества строк кэша. Как следствие, ассоциативная кэш память не может иметь большого количества строк.
Третий вид кэш-памяти – наборно-ассоциативная (см. рис 18 в)) – это смешанная конструкция, сочетающая в себе простоту памяти с прямым отображением и эффективность ассоциативного кэша. Строки кэша объединяются в наборы по 2, 4, 8 и т.д. штук. Средние биты определяют не строку, а набор. Конкретная строка в наборе выбирается с помощью ассоциативного сравнения для всех строк, входящих в набор.
Пусть контроллер кэш-памяти обнаружил, что данные, требуемые в настоящий момент для процессора, в кэш-памяти отсутствуют. Нужно прочитать строку, содержащую необходимые данные из оперативной памяти, и разместить ее в кэш-памяти. Для этого необходимо решить, какую из строк кэша следует удалить для размещения вновь поступивших данных. Для выбора строки, подлежащей замещению, чаще всего используется так называемый алгоритм LRU (от Least Recently Used – дольше всего неиспользуемый). Суть алгоритма в том, что совместно с каждым элементом хранится история его использования за последнее время. Из всех существующих элементов выбирается тот, к которому дольше всего не было обращений. Недостатком алгоритма можно считать необходимость хранения и обработки большого количества информации об истории использования элемента данных, что становится особенно важным при использовании кэша большого объема. Поэтому в системах с кэш памятью большого объема часто применяется более простой алгоритм, по которому вытесняемая строка выбирается случайным образом. Как показывает практический опыт, при большом объеме кэш-памяти алгоритм случайного замещения незначительно проигрывает алгоритму LRU по эффективности, но значительно выигрывает по простоте реализации.
В заключение рассмотрим, что происходит, когда процессор выполняет операцию записи данных в память. В процессе работы с памятью более 90% обращений к памяти являются операциями считывания, поэтому ускорение считывания является важнейшей задачей, однако не стоит забывать и об операциях записи в память. Возможны три способа выполнения этой операции.
Первый, самый простой, носит название сквозная запись (write through). При этом способе данные одновременно записываются в кэш-память и в оперативную память. Естественно, выигрыша в скорости при записи не происходит. Однако данный способ, помимо простоты, обладает тем существенным достоинством, что в кэш-памяти и в оперативной памяти в каждый момент времени хранятся одни и те же данные, т.е. иерархическая память находится в согласованном состоянии. Последний факт является существенным, например, в многопроцессорных системах, когда к одному элементу данных могут одновременно обратиться несколько разных процессоров.
Существенно уменьшить потери производительности позволяет другой способ записи, который называется буферизированной сквозной записью (buffered write through). Процессор передает записываемые данные контроллеру кэша и на этом операция записи для процессора считается законченной. Записываемые данные сохранятся в буфере контроллера кэша и переписываются из буфера в оперативную память в те моменты времени, когда процессор не производит обращений к памяти и системная шина свободна.
Третий способ организации называется обратной записью (write back). При этом способе нагрузка на тракты обмена данными между процессором и памятью максимально снижается. Процессор производит запись только в кэш-память. В каждый момент времени существует только одна «истинная» копия данных, находящаяся в кэш-памяти. Перезапись данных из кэш-памяти в основную память производится только тогда, когда одна строка кэша заменяется другой, причем перезаписывается только строка целиком. Для этого каждая строка кэша снабжается дополнительным признаком «грязных» данных, который устанавливается, если в данную строку производилась запись. При установленном признаке строка, вытесняемая из кэша, переписывается в оперативную память, иначе она не переписывается. Подобный способ записи, в сочетании с алгоритмом вытеснения данных LRU описанным выше, позволяет избавиться от «лишних» обращений к памяти для часто используемых данных, например счетчиков циклов, временных рабочих переменных и т.д.
Дата публикования: 2014-11-04; Прочитано: 667 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!