Жмакин А.П. Архитектура ЭВМ (2006) (1186252), страница 19
Текст из файла (страница 19)
где рс — вероятности обращения к СОЗУ. Обозначим так же: р0 — вероятности обращения к ОЗУ.
Из (5.1) следует, что повышение производительности ЭВМ может осуществляться двумя путями:
□ уменьшением отношения — ;
То
□ увеличением вероятности рс обращения в СОЗУ.
Первый путь связан, прежде всего, с технологическими особенностями производства БИС и здесь не рассматривается.
Если считать, что информация размещается в СОЗУ и ОЗУ случайным образом, то вероятности рс и р0 пропорциональны объемам соответствующих ЗУ. В этом случае рс « р0 и наличие в ЭВМ СОЗУ практически не влияет на ее производительность.
Тс t
То же можно было бы сказать и о ситуации, когда отношение —«1,
но не следует забывать, что наличие в ЭВМ СОЗУ с прямой адресацией (РОН) позволяет включать в систему команд короткие команды, использовать косвенно-регистровую адресацию и, в конечном итоге, увеличивать производительность ЭВМ даже при Тс = Т0.
Итак, для эффективного применения СОЗУ следует таким образом распределять информацию по уровням памяти ЭВМ, чтобы в СОЗУ всегда располагались наиболее часто используемые в данный момент коды.
Принято различать СОЗУ по способу доступа к хранимой в нем информации. Известны два основных класса СОЗУ по этому признаку:
□ с прямым доступом;
□ с ассоциативным доступом.
5.2.1. СОЗУ с прямым доступом
СОЗУ с прямым доступом (РОН — регистры общего назначения) получило широкое распространение в большинстве современных ЭВМ. Фактически РОН — это небольшая регистровая намять, доступ к которой осуществляется специальными командами. Стратегия размещения данных в РОН целиком определяется программистом (компилятором). Обычно в РОН размещают многократно используемые адреса (базы, индексы), счетчики циклов, данные активного фрагмента задачи, что повышает вероятность обращения в ячейки РОН по сравнению с ячейками ОЗУ.
5.2.2. СОЗУ с ассоциативным доступом
Применение СОЗУ с ассоциативным доступом позволяет автоматизировать1 процесс размещения данных в СОЗУ, обеспечивая "подмену" активных в данный момент ячеек ОЗУ ячейками СОЗУ. Эффективность такого подхода существенно зависит от выбранной стратегии замены информации в СОЗУ, причем использование ассоциативного СОЗУ имеет смысл только при условии Тс « То ■
Принцип ассоциативного доступа состоит в следующем. Накопитель ассоциативного запоминающего устройства (АЗУ) разбит на два поля— информационное и признаков. Структура информационного поля накопителя соответствует структуре обычного ОЗУ, а запоминающий элемент поля признаков, помимо функции записи, чтения и хранения бита, обеспечивает сравнение хранимой информации с поступающей и выдачу признака равенства.
Признаки равенства всех элементов одной ячейки поля признаков объединяются по "И" и устанавливают в 1 индикатор совпадения ИС, если информация, хранимая в поле признака ячейки, совпадает с информацией, подаваемой в качестве признака на вход Р накопителя.
Во второй фазе обращения (при чтении) на выход данных D последовательно поступает содержимое информационных полей тех ячеек, индикаторы совпадения которых установлены в 1 (если таковые найдутся).
Способ использования АЗУ в качестве сверхоперативного иллюстрирует рис. 5.2. В информационном поле ячеек АСОЗУ— копия информации некоторых ячеек ОЗУ, а в поле признаков — адреса этих ячеек ОЗУ. Когда процессор генерирует обращение к ОЗУ, он одновременно (или прежде) инициирует процедуру опроса АСОЗУ, выдавая в качестве признака адрес ОЗУ. Если имеет место совпадение признака ячейки с запрашиваемым адресом (не более одного раза, алгоритм загрузки АСОЗУ не предусматривает возможности появления одинаковых признаков), то процессор обращается (по чтению или по записи) в информационное поле этой ячейки АСОЗУ, при этом блокируется обращение к ОЗУ. Если требуемый адрес не найден в АСОЗУ, инициируется (или продолжается) обращение к ОЗУ, причем в АСОЗУ создается копия ячейки ОЗУ, к которой обратился процессор. Повторное обращение процессора по этому адресу будет реализовано в АСОЗУ (на порядок быстрее, чем в ОЗУ).
Таким образом, в АСОЗУ создаются копии тех ячеек ОЗУ, к которым в данный момент обращается процессор в надежде, что "в ближайшее время" п; изойдет новое обращение по этому адресу. (Существуют и другие стратеги загрузки АСОЗУ, например, если процессор обращается в ОЗУ по опред ленному адресу, то в АСОЗУ перемещается содержимое целого блока сосе них ячеек.)
При необходимости записи в АСОЗУ новой информации требуется отыска свободную ячейку, а при ее отсутствии (что чаще всего и бывает) — отыска ячейку, содержимое которой можно удалить из АСОЗУ. При этом следу помнить, что если во время пребывания ячейки в АСОЗУ в нее произвол лась запись, то требуется не просто очистить содержимое ячейки, а записа его в ОЗУ по адресу, хранящемуся в поле признаков, т. к. процессор, отыс адрес в АСОЗУ, производит запись только туда, оставляя в ОЗУ старое зн чение (т. н. "АСОЗУ с обратной записью"). Возможен и другой режим рабо СОЗУ — со сквозной записью, при котором всякая запись осуществляется СОЗУ, и в ОЗУ.
При поиске очищаемой ячейки чаще всего используют метод случайного в бора. Иногда отмечают ячейки, в которые не проводилась запись, и пои "кандидата на удаление" проводят из них.
Более сложная процедура замещения предполагает учет длительности пребывания ячеек в АСОЗУ, или частоты обращения по этому адресу, или времени с момента последнего обращения. Однако все эти методы требуют дополнительных аппаратных и временных затрат.
Одним из наиболее дешевых способов, позволяющих учитывать поток обращений к ячейкам, является следующий. Каждой ячейке АСОЗУ ставится в соответствие бит (триггер) обращения, который устанавливается при обращении к этой ячейке. Когда биты обращения всех ячеек АСОЗУ установятся в 1, все они одновременно сбрасываются в 0. Поиск очищаемой ячейки осуществляется среди ячеек, биты обращения которых нулевые, причем если таких ячеек несколько, то среди них осуществляется случайная выборка.
Наличие АСОЗУ в ЭВМ позволяет (при достаточном его объеме и правильно выбранной стратегии загрузки) значительно увеличить производительность системы. При этом наличие или отсутствие АСОЗУ никак не отражается на построении программы. АСОЗУ не является программно-доступным объектом, оно скрыто от пользователя. Недаром в литературе для обозначения АСОЗУ часто используется термин "кэш-память" (cache — тайник).
Кэш-память, структура которой приведена на рис. 5.2, носит название полностью ассоциативной. Здесь каждая ячейка кэш может подменять любую ячейку ОЗУ. Достоинство такой памяти — максимальная вероятность кэш-попадания (при прочих равных условиях), по сравнению с другими способами организации кэш. К недостаткам можно отнести сложность ее структуры (а следовательно, и высокую стоимость). Действительно, в каждом разряде поля признаков необходимо реализовать, наряду с возможностями записи и хранения, функцию сравнения хранимого бита с соответствующим битом признака, а потом конъюнкцию результатов сравнения разрядов в каждой ячейке.
Кэш-память с прямым отображением требует минимальных затрат оборудования (по сравнению с другими вариантами организации кэш), но имеет минимальную вероятность кэш-попаданий. Суть организации (рис. 5.3) состоит в следующем. Физическая оперативная намять разбивается на блоки (множества) одинакового размера, количество которых (блоков) соответствует числу ячеек кэш, причем каждой строке ставится в соответствие определенное множество ячеек памяти, не пересекающееся с другими. Все ячейки множества претендуют на одну строку кэш.
Такая организация кэш исключает собственно ассоциативный поиск, а следовательно, значительно упрощается схема ячейки поля признаков. Действительно, здесь копия требуемой ячейки оперативной памяти может располагаться в единственной строке кэш. Часть физического адреса (на рис. 5.3 — старшая) определяет номер множества и, следовательно, строку кэш. Содержимое этой строки выбирается по обычному адресному принципу, и поле тега сравнивается с младшей частью физического адреса. Таким образом, для всей кэш-памяти (любого размера) достаточно единственной схемы сравнения.
Однако предложенная выше структура имеет существенный недостаток. Если проводить разбиение памяти на множества, как показано на рис. 5.3, то в большинстве случаев кэш будет использоваться крайне неэффективно. Во-первых, хотя адресное пространство физической памяти 32-разрядных микропроцессоров составляет 232 байтов, в современных ПЭВМ обычно используют намять объемом 225 — 229 байтов. Следовательно, строки кэш, отображаемые на старшие (физически отсутствующие) множества памяти, никогда не будут использованы.
Во-вторых, если в множества включать следующие подряд ячейки ОЗУ, то копии никаких двух последовательных ячеек ОЗУ нельзя одновременно иметь в кэш (кроме случая последней и первой ячеек двух соседних множеств), что противоречит одной из основополагающих стратегий загрузки кэш — целесообразности копирования в кэш группы последовательных ячеек ОЗУ.
Для исключения отмеченных недостатков разбиение ячеек памяти на множества осуществляется таким образом, чтобы соседние ячейки относились к разным множествам, что достигается размещением поля номера множества не в старших, а в младших разрядах физического адреса.
Для дальнейшего увеличения вероятности кэш-попаданий можно реализовать вариант кэш-памяти, ассоциативной по множеству, которая отличается от кэш с прямым отображением наличием нескольких строк кэш на одно множество ячеек памяти.
Например, внутренняя кэш-память процессоров i80486 и Pentium — ассоциативная по множеству. Вся физическая память разбивается на 128 множеств, а каждому множеству соответствуют 4 строки кэш. Рассмотрим подробнее организацию внутренней кэш-памяти процессора 80486 [3].
Внутренняя кэш 80486 (рис. 5.4) имеет объем 8 Кбайт и предназначена для хранения как команд, так и данных — копий информации ОЗУ. Информация перемещается из ОЗУ в кэш выровненными 16-байтовыми блоками (4 младшие бита физического адреса— нули). Кэш имеет четырехнаправленную (или четырехканальную) ассоциативную по множеству организацию, что является компромиссом между быстродействием и экономичностью кэшпамяти с прямым отображением и большим коэффициентом попаданий полностью ассоциативной кэш-памяти.
Блок информации из ОЗУ может располагаться в кэш только в одном из 128 множеств, причем в каждом множестве возможно хранение четырех блоков. Адресация кэш осуществляется путем разделения физического адреса на три поля:
□ 7 битов поля индекса (А4—А10) определяют номер множества, в котором проводится поиск;
□ старшие 21 бит адреса являются полем тега (признака), по которому осуществляется ассоциативный поиск (внутри множества из четырех блоков);
□ четыре младшие бита адреса определяют позицию байта в блоке.
Когда при чтении возникает промах, в кэш копируется из ОЗУ 16-байтовый блок (строка), содержащий запрошенную информацию.
4-битовое поле достоверности показывает, являются ли в данный момент кэ-шированные данные достоверными (для каждого блока (строки) множества— свой бит). При очистке кэш-памяти или сбросе процессора все биты достоверности сбрасываются в 0. Когда производится заполнение строки кэш, место для заполнения выбирается просто нахождением любой недостоверной строки (из четырех строк "своего" множества).
Если недостоверных строк нет, то реализуется алгоритм замещения строк "nceedoLRU" ("наиболее давно используемый"). Для каждого множества в блоке отведено три бита LRU, которые обновляются при каждом кэш