![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
КЭШ-память прямого отображения.
Самый простой тип кэш-памяти — это кэш-память прямого отображения. Пример одноуровневой кэш-памяти прямого отображения показан на рис. Данная кэш-память содержит 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 (или с любым другим адресом в той же строке), вторая команда требует перезагрузки элемента кэш-памяти. Если это происходит достаточно часто, то могут возникнуть проблемы. В действительности, если кэш-память плохо работает, то лучше бы вообще не было кэш-памяти, поскольку при каждой операции с памятью считывается целая строка, а не одно слово. Кэш-память прямого отображения — это самый распространенный тип кэш-памяти, и она достаточно эффективна, поскольку коллизии, подобные описанной выше, случаются крайне редко или вообще не случаются. Например, очень хоропий компилятор может учитывать подобные коллизии при размещении команд и шинн в памяти. Отметим, что указанный выше случай не произойдет в системе, где команды и данные находятся раздельно, поскольку конфликтующие запросы будут обслуживаться разными блоками кэш-памяти. Таким образом, мы видим второе преимущество наличия двух блоков кэш-памяти вместо одного: большая гибкость при разрешении конфликтных ситуаций. На самом деле подобные коллизии не столь уж и редки из-за того, что при страничном способе организации виртуальной памяти и организации параллельного выполнения нескольких задач страницы как бы ≪ перемешиваются≫. Разбиение программы на страницы осуществляется случайным образом, поэтому и ≪ локальность кода≫ может быть нарушена.
|