Главная | Автореферат | Библиотека | Ссылки | Отчет о поиске | Индивидуальное задание | Портал магистров


 

 

Архитектура кэш-памяти

А.Смит

 

Smith A. Cache Memories. – Computing Surveys. – Sept. 1982. – vol. 14. – P. 473-475.

 

Кэш – это особое место,  которое автоматически считывает данные,  когда они нам нужны,  и возможно извлекает новые данные по требованию процессора. Однако хорошим вопросом является «Как именно кэш это делает?» или «Что происходит, когда кэш полон, а процессор запрашивает данные, которых нет в КЭШе? ». В этой статье мы рассмотрим внутреннюю организацию кэш – памяти и попытаемся ответить на эти и другие вопросы.

 

Основная идея КЭШа в том, что в данный момент времени программа обращается к малому числу данных. Ели размер КЭШа и данных, доступных для программы в данный момент одинаков, тогда мы можем поместить эти данные в кэш и обращаться к ним с высокой скоростью. К сожалению, данные редко лежат в близких друг от друга областях памяти. Обычно бывает несколько данных здесь несколько данных там и несколько данных где-нибудь еще. В общем случае данные распространяются по всему адресному пространству. Поэтому, при разработке КЭШа должен учитываться тот факт, что он должен отображать данные из широко изменяющегося адресного пространства памяти.

 

Идея кэш-системы в том, что мы можем связать разные, не близлежащие адреса с каждой строкой КЭШа. Таким образом, строка КЭШа #0 может соответствовать адресам $10000..$1000F, а стока КЭШа 1 может соответствовать адресам $21400..$2140F. В общем случае, если строка КЭШа длиной n байт (n- обычно некоторое число в степени двойки), тогда в строку КЭШа будет считываться n-байт с основной памяти.

 

Когда кэш контроллер считывает строку кэш-памяти с более низкого уровня иерархии памяти, возникает вопрос «Как данные размещаются в КЭШе?». Наиболее гибкая кэш система это полностью ассоциативный кэш. В подсистеме полностью ассоциативного КЭШа кэш контроллер может поместить блок байт в любую строку кэш памяти. Пока эта самая гибкая и дорогая система.

 

Другой вид кэш памяти – это кэш память с прямым отображением. В кэш памяти с прямым отображением блок из основной памяти всегда загружается в одну и туже строку кэш памяти. В общем случае, некоторое число битов в адресном пространстве основной памяти выбирают строку кэш-памяти. Например, на рисунке 6.3 показано как кэш контроллер может выбирать строку кэш памяти для 8 килобайтного КЭШа со строками в 16 байт и 32- разрядным адресным пространством основной памяти. Схема кэш памяти с прямым отображением очень легко представляется.

Возможно самая большая проблема в кэш-памяти с прямым отображением это  неэффективное использование всей кэш памяти. Например, схема КЭШа на рис.6.3 показывает отображение адреса 0 на строку КЭШе #0. Так же отображаются адреса  $2000 (8K), $4000 (16K), $6000 (24K), $8000 (32K), таким образом, отображается каждый адрес даже более 8 Кбайт на строку кэш памяти #0. Это означает, что если программа постоянно обращается к данным в диапазоне адресов более 8 кбайт и не обращается к другим областям, система будет использовать только строку КЭШа #0 , оставляя остальные строки КЭШа неиспользованными. В каждый момент времени процессор запрашивает данные по адресу,  который не связан со строкой КЭШа #0, и процессор должен будет спускаться вниз по иерархии памяти, чтобы получить доступ к данным. В этом патологическом случае, кэш в действительности ограничен одной строкой.

 

Организация кэш-памяти полностью ассоциативного типа - слишком комплексная, дорогая и медленная. Но организация кэш памяти с прямым отображением не такая эффективная, как бы хотелось. Появляется вопрос, есть ли компромисс, который может дать нам больше возможностей для кэш памяти с прямым отображением без сложностей полностью ассоциативного КЭШа. Такой компромисс есть – это  n-way set ассоциативный кэш. Идея здесь состоит в том, чтобы разбить кэш на множества строк КЭШа. Процессор выбирает отдельное множество, используя некоторое подмножество адресных битов, так же как для кэш памяти с прямым отображением. В пределах каждого множества существуют n-кэш строк. Кэш контроллер использует полностью ассоциативный алгоритм, чтобы выбрать одну из n кэш строк в пределах множества.

 

Например,  8 Килобайтная  twoway set ассоциативная  кэш система с размером кэш строк в 16 байт организовывает кэш как последовательность 256 множеств, причем каждое множество содержит 2 кэш-строки  (twoway set). Восьми разрядный адрес в памяти выбирает одно из этих 256 различных множеств. Тогда кэш контроллер может отобразить блок байтов в любую кэш строку в пределах множества. Превосходство twoway set ассоциативного КЭШа в том, что мы имеем двойной доступ в пределах 8 кбайт, и получаем разные строки при каждом доступе. Однако если вы пытаетесь получить доступ во второстепенную область памяти в диапазон адресов более 8 килобайт , то получится конфликтная ситуация.

 

В начало