Скачиваний:
66
Добавлен:
16.04.2013
Размер:
276.48 Кб
Скачать

Доступность методов кэширования в процессорах

Метод кэширования

Pentium4/III

Pentium II/PRO

Pentium

UC

Да

Да

Да

UC-

Да

Нет

Нет

WC

Да

Да

Нет

WT

Да

Да

Да

WB

Да

Да

Да

WP

Да

Да

Нет

$.3. Управление кэшированием

Механизм управления кэшированием включает в себя как программные флаги, так и аппаратные средства, позволяющие разрешать и ограничивать возможности кэширования. Программные средства управления включают флаги управляющих регистров и биты элементов каталога и таблиц страниц, а также специальные инструкции. Аппаратные средства включают входные сигналы разрешения кэширования и управления политикой записи и сброса кэша, а также выходные сигналы управления кэшем L2. ВP6+ имеются также регистры MTRR, определяющие возможности кэширования на уровне областей физической памяти. Эти механизмы имеют различные области воздействия. Если различные механизмы определяют возможности кэширования конкретной области памяти по-разному, будет реализовано самое жесткое из ограничений: запрет кэширования имеет приоритет над разрешением, а политикаWTотменяет политикуWB.

Кэшированием управляют на этапе заполнения строк, последующие кэш-попадания чтений памяти будут обслуживаться только из кэша. Кроме того, существует возможность аннулирования строк – объявление их недостоверными и сброс всей кэш-памяти. Сброс(flush) внутренней кэш-памяти при сквозной записи (обнуление бит достоверности всех строк) осуществляется внешним сигналомFLUSH# за один такт системной шины (и, конечно же, по сигналуRESET). При обратной записи сброс кэша подразумевает также выгрузку всех модифицированных строк в основную память. Для этого, естественно, может потребоваться значительное число тактов системной шины. Кроме того, имеются инструкции аннулирования (invalidation)INVDиWBINVD. ИнструкцияINVDаннулирует строки внутреннего кэша без выгрузки модифицированных строк, поэтому ее неосторожное использование при включенной политике обратной записи может привести к нарушению целостности данных в иерархической памяти. ИнструкцияWBINVDпредварительно выгружает модифицированные строки в основную память (при сквозной записи ее действие совпадает с INVD).

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

Аннулирование строквыполняется при записи в отображаемую ими область памяти со стороны внешних контроллеров (например, других процессоров). Если внешний (по отношению к рассматриваемому процессору) контроллер выполняет запись в память, процессору должен быть подан сигналAHOLD. По этому сигналу процессор немедленно отдает управление только шиной адреса, на которую внешним контроллером устанавливается адрес памяти, сопровождаемый стробомEADS#. Если адресуемая память присутствует в кэшеL1, то процессор сбрасывает бит достоверности этой строки (она освобождается).

Общее программное управление кэшированием осуществляется посредством битов управляющего регистра CR0:CD(CacheDisable) иNW(NoWriteThrough). Возможны следующие сочетания бит регистра.

  • CD=0,NW=0 – разрешен нормальный режим работы с максимально возможной эффективностью (политикаWB, если поддерживается). Для отдельных областей или страниц памяти кэширование может ограничиваться (запрещаться или устанавливаться политикаWT).

  • CD=0,NW=1 – запрещенная комбинация (вызывает отказ #GP).

  • CD=1,NW=0 – заполнение кэша запрещено, когерентность памяти поддерживается. Попадания чтения обслуживаются из кэша. Попадания записи модифицируют строки. Если строка в S-состоянии, то она записывается в основную память. Кэш-промахи записи не меняют кэш. Аннулирование строк разрешено, внешнее слежение (сообщение состояния) выполняется. Эффект от установки бит в это состояние аналогичен временному переводу сигналаKENSв высокое (пассивное) состояние. Этот режим может использоваться для временного отключения кэша, после которого возможно его включение без сброса.

  • CD=1,NW=1 – заполнение кэша запрещено, когерентность памяти не поддерживается. Попадания чтения обслуживаются из кэша, попадания записи модифицируют кэш, но не основную память. Аннулирование строк заблокировано, сброс вызывают только инструкцииINVDиWBINVD. Если после установки такого значения выполнить сброс кэша (см. выше), кэш будет полностью отключен. Если же перед установкой этого сочетания бит кэш был заполнен, а сброс не производился, то кэш превращается в «замороженную» область статической памяти.

Обратите внимание, что хотя во всех режимах выполняется внешнее слежение, но в режиме CD=NW=1 кэш первого уровня не отслеживает внешние транзакции, и таким образом может возникнуть рассогласование кэшей разных уровней. И еще процессорыPentium4 не поддерживают режимCD=NW=1, а при установке этих битов работают как в режимеCD=1,NW=0.

При использовании страничной переадресации в управлении кэшированием принимают участие биты PCDиPWTрегистраCR3 и элементов каталога и таблиц страниц. В регистре CR3 эти биты управляют кэшированием таблицы каталогов. В элементах каталога таблиц (PDE) эти биты управляют кэшированием таблиц страниц, на которые они ссылаются. В элементах таблиц страниц (РТЕ) эти биты управляют кэшированием обслуживаемых страниц. ВP6 битPGEрегистраCR4 разрешает использование бита глобальности страницыGдля управления аннулированием элементов вTLB(см.п. 5.4).

Для управления кэшированием на аппаратном уровне процессоры 486 и Р5 имеют входы KEN# иWB/WT#. Внешние схемы (чипсет системной платы) могут запрещать процессору кэшировать определенные области памяти установкой высокого уровня сигналаKEN# во время циклов доступа процессора к этим областям памяти. Этот сигнал управляет только возможностью заполнения строк кэша из адресованной области памяти (с дискретностью, равной размеру строки). Для процессоров с WB-кэшем имеется входной сигналWB/WT#, который может упростить политику записи для данного адреса доWT. Выходные сигналыPCDиPWTуправляют работой кэшаL2. В циклах обращения к памяти, когда страничные преобразования не используются (например, при обращении к таблице каталогов страниц), источником сигналов являются биты PCD и PWT регистраCR3, при обращении к таблице страниц – биты PCD и PWT из дескриптора соответствующего элемента каталога, при обращении к самим данным страницы – биты PCD и PWT из дескриптора страницы. Кроме того, оба этих сигнала могут принудительно устанавливаться общими битами управления кэшированиемCDи WT регистраCR0.

Начиная с P6, в архитектуру введены регистрыMTRR(MemoryTypeRangeRegisters), которые реализуют вышеописанные функции аппаратного управления кэшированием, а также изменение порядка записи для определенных областей памяти. С помощью этих регистров в физической памяти может быть определено до 96 областей адресов с одинаковым типом кэширования. Такое распределение позволяет оптимизировать операции с ОЗУ, ПЗУ, видеобуферами и адаптерами ввода/вывода, отображенными на пространство памяти. По аппаратному сбросу регистры MTRR устанавливаются в такое состояние, которое ведет к объявлению некэшируемой всей физической памяти. Дальнейшая инициализация, выполняемая обычно во времяPOSTBIOS, программирует регистры в соответствии с реальным распределением памяти. Регистры MTRR входят в число модельно-специфических регистров (MSR). Они определяют наборы фиксированных зон для 1-го мегабайта физической памяти и зоны произвольного размера для памяти в любом диапазоне адресов. НаличиеMTRRопределяется инструкциейCPUIDпо флагуMTRR(бит 13 вEDX). 64-битный регистрIA32_MTTRCAP1определяет возможности MTRR (рис.$.5).

63

11

10

9

8

7

0

Зарезервировано

WC

FIX

VCNT

Рис. $.5 Формат регистра IA32_MTRRCAP

Количество произвольных зон определяется полем VCNT, флагFIXопределяет наличие фиксированных зон; а флагWCуказывает на поддержку памяти типа WC.

Общее управление MTRR осуществляется записью в 64-битный регистр IA-32_MTRR_DEF_TYPE(рис.$.6).

63

12

11

10

9

8

7

0

Зарезервировано

E

FE

Res

Type

Рис. $.6 Формат регистра IA32_MTR_DEF_TYPE

Поле Typeзадает тип памяти по умолчанию (для памяти, не попавшей ни в одну из зон). ФлагFEразрешает использование фиксированных зон. Флаг Е разрешает использование MTRR, если он сброшен, то вся физическая память определяется какUC.

Для управления фиксированными зонами используются следующие регистры:

  • IA32_MTRR_FIX64K_00000 – для отображения восьми зон по 64КВ в диапазоне адресов 0-7FFFFh;

  • IA32_MTRR_FIX16K_80000 иIA32_MTRR_FIX16K_A0000 – для отображения 16 зон по 16 КВ в диапазоне адресов 80000h-BFFFFh;

  • От IA32_MTRR_FIX4K_C0000, доIA32_MTRR_FIX4K_F8000 (8 регистров) – для отображения 64 зон по 4КВ в диапазоне адресовC0000h-FFFFFh.

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

Для управления каждой из зон произвольного размера используются пары регистров (суффикс n определяет номер регистра).

63

36

35

12

11

8

7

0

а)

Резервировано

PhysBase

Резерв.

Type

63

36

35

12

11

10

0

б)

Резервировано

PhysMask

V

Резервировано

Рис. $.7 Формат регистров управления зоной: (а) IA32_MTRR_PHYSBASEn,и (б)IA32_MTRR_PHYSMASKn

  • IA32_MTRR_PHYSBASEn– регистр базового физического адреса зоны. ПолеTypeопределяет тип памяти для зоны, полеPhysBaseзадает старшие 24 бита ее базового адрес (младшие 12 бит – нулевые), зоны выровнены по 4КВ границам.

  • IA32_MTRR_PHYSMASKn– регистр маски физического адреса. Флаг V определяет действительность данных данной регистровой пары. ПолеPhysMaskзадает маску зоны. Маска определяется так, чтобы результат операции “И” над ней и адресом, принадлежащим зоне, совпадал с результатом той же операции над ней и базовым адресом.

Перекрытие произвольных зон допускается лишь для типов UC или UC и WB(в области перекрытия тип будет UC), для перекрытий зон иных типов поведение процессора непредсказуемо.

При определенных значениях масок определяемые ими зоны перестают быть непрерывными. На области разрывов будет распространяться тип памяти по умолчанию. Например, Base=00F000hиMask=FFFF7Fhсоответствует двум диапазонам: первый – 4KBстраница номер 00F000h, а второй – 4KBстраница номер 00F080h.

Использование таких масок не приветствуется, поскольку оно может потребовать присутствия реальной памяти во всем диапазоне физических адресов (от 4КВ до 64GВ).

Если произвольная зона перекрывает фиксированную, то на перекрытую область распространяется определение фиксированной зоны (при установленном флаге FE).

Если используются большие страницы (размером 2 или 4 Мбайт), каждая страница может накрывать несколько зон, определенных в MTRR. Если эти зоны имеют разные свойства, поведение процессора будет непредсказуемо (тип страниц памяти кэшируется вTLB). Чтобы избежать этой неопределенности, используя большие страницы, следует заботиться об однотипности зон памяти, на которые отображается данная область (корректно программировать MTRR).

Численные значения типов памяти и их характеристики приведены ниже в строках 0-6 табл. $.4 (они такие же, как в регистре PAT). Запись в регистрIA32_MTRRCAP, как и в неопределенные поля других регистров MTRR или попытка использования типов памяти, отличных от приведенных в табл. $.4, вызывает исключение #GP.

Таблица $.4.