Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






КЭШ-память прямого отображения.






Самый простой тип кэш-памяти — это кэш-память прямого отображения.

Пример одноуровневой кэш-памяти прямого отображения показан на рис.

Данная кэш-память содержит 2048 элементов. Каждый элемент (ряд) может вмещать

ровно одну строку из основной памяти. Если размер строки кэш-памяти 32 байта

(для этого примера), кэш-память может вмещать 64 Кбайт. Каждый элемент кэш-

памяти состоит из трех частей:

 

1. Бит достоверности указывает, есть ли достоверные данные в элементе или нет.

Когда система загружается, все элементы маркируются как недостоверные.

2. Поле ≪ Тег≫ состоит из уникального 16-битного значения, указывающего

соответствующую строку памяти, из которой поступили данные.

3. Поле ≪ Данные≫ содержит копию данных памяти. Это поле вмещает одну

строку кэш-памяти в 32 байта.

В кэш-памяти прямого отображения данное слово может храниться только в од-

ном месте. Если дан адрес слова, то в кэш-памяти его можно искать только в одном

месте. Если его нет на этом определенном месте, значит, его вообще нет в кэш-

памяти. Для хранения и удаления данных из кэш-памяти адрес разбивается на

4 компонента, как показано на рис.

1. Поле ≪ ТЕГ≫ соответствует битам, сохраненным в поле ≪ Тег≫ элемента кэш-памяти.

2. Поле ≪ СТРОКА≫ указывает, какой элемент кэш-памяти содержит соответствующие данные, если они есть в кэш-памяти.

3. Поле ≪ СЛОВО≫ указывает, на какое слово в строке производится ссылка.

4. Поле ≪ БАЙТ≫ обычно не используется, но если требуется только один байт, поле сообщает, какой именно байт в слове нужен. Для кэш-памяти, поддерживающей только 32-битные слова, это поле всегда будет содержать 0.

Когда центральный процессор выдает адрес памяти, аппаратное обеспечениевыделяет из этого адреса 11 битов поля ≪ СТРОКА≫ и использует их для поискав кэш-памяти одного из 2048 элементов. Если этот элемент действителен, то производится сравнение поля ≪ Тег≫ основной памяти и поля ≪ Тег≫ кэш-памяти. Если

поля равны, это значит, что в кэш-памяти есть слово, которое запрашивается. Такая ситуация называется удачным обращением в кэш-память. В случае удачного обращения слово берется прямо из кэш-памяти, и тогда не нужно обращаться к основной памяти. Из элемента кэш-памяти берется только нужное слово. Остальная часть элемента не используется. Если элемент кэш-памяти недействителен (недостоверен) или поля ≪ Тег≫ не совпадают, то нужного слова нет в памяти. Такая ситуация называется промахом кэш-памяти. В этом случае 32-байтная строка вызывается основной памяти и сохраняется в кэш-памяти, заменяя тот элемент, который

там был. Однако если существующий элемент кэш-памяти изменяется, его нужно писать обратно в основную память до того, как он будет отброшен.Несмотря на сложность решения, доступ к нужному слову может быть чрезвычайно быстрым. Поскольку известен адрес, известно и точное нахождение слова, если оно имеется в кэш-памяти. Это значит, что можно считывать слово из кэш-памяти и доставлять его процессору и одновременно с этим устанавливать, правильное ли это слово (путем сравнения полей ≪ Тег≫), Поэтому процессор в действительности получает слово из кэш-памяти одновременно или даже до того, как станет известно, требуемое это слово или нет.

При такой схеме последовательные строки основной памяти помещаются в последовательные элементы кэш-памяти. Фактически в кэш-памяти может храниться до 64 Кбайт смежных данных. Однако две строки, адреса которых различаются ровно на 64 К (65, 536 байт) или на любое целое кратное этому числу, не могут одновременно храниться в кэш-памяти (поскольку они имеют одно и то же значение в поле ≪ СТРОКА≫).

Например, Если программа обращается к данным с адресом X, а затем выполняет команду, которой требуются данные с адресом Х+ 65, 536 (или с любым другим адресом в той же строке), вторая команда требует перезагрузки элемента кэш-памяти. Если это происходит достаточно часто, то могут возникнуть проблемы.

В действительности, если кэш-память плохо работает, то лучше бы вообще не было кэш-памяти, поскольку при каждой операции с памятью считывается целая строка, а не одно слово.

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

Например, очень хоропий компилятор может учитывать подобные коллизии при размещении команд и шинн в памяти. Отметим, что указанный выше случай не произойдет в системе, где команды и данные находятся раздельно, поскольку конфликтующие запросы будут обслуживаться разными блоками кэш-памяти. Таким образом, мы видим второе преимущество наличия двух блоков кэш-памяти вместо одного:

большая гибкость при разрешении конфликтных ситуаций.

На самом деле подобные коллизии не столь уж и редки из-за того, что при страничном способе организации виртуальной памяти и организации параллельного выполнения нескольких задач страницы как бы ≪ перемешиваются≫. Разбиение программы на страницы осуществляется случайным образом, поэтому и ≪ локальность кода≫ может быть нарушена.







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.