- •Последовательность адресов в пакетном цикле Pentium
- •Характеристики элементов кэша для процессоров Pentium
- •Доступность методов кэширования в процессорах
- •Типы памяти, определяемые регистром pat и регистрами mttr
- •Выбор элемента в pat, а также тип памяти, определяемый по аппаратному сбросу
- •Тип памяти страницы для процессоров использующих бит paTi
- •Вопросы для самопроверки.
Доступность методов кэширования в процессорах
Метод кэширования |
Pentium 4/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).
В процессорах Pentium III появились новые инструкции, связанные с кэшированием. Теперь можно выгружать данные из регистров ММХ и ХММ в оперативную память минуя кэш, а также закачивать группу байтов памяти в строку кэша заданного уровня, не помещая их в какие бы то ни было регистры процессора.
Аннулирование строк выполняется при записи в отображаемую ими область памяти со стороны внешних контроллеров (например, других процессоров). Если внешний (по отношению к рассматриваемому процессору) контроллер выполняет запись в память, процессору должен быть подан сигнал AHOLD. По этому сигналу процессор немедленно отдает управление только шиной адреса, на которую внешним контроллером устанавливается адрес памяти, сопровождаемый стробом EADS#. Если адресуемая память присутствует в кэше L1, то процессор сбрасывает бит достоверности этой строки (она освобождается).
Общее программное управление кэшированием осуществляется посредством битов управляющего регистра CR0: CD (Cache Disable) и NW (No Write Through). Возможны следующие сочетания бит регистра.
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 кэш первого уровня не отслеживает внешние транзакции, и таким образом может возникнуть рассогласование кэшей разных уровней. И еще процессоры Pentium 4 не поддерживают режим 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 (Memory Type Range Registers), которые реализуют вышеописанные функции аппаратного управления кэшированием, а также изменение порядка записи для определенных областей памяти. С помощью этих регистров в физической памяти может быть определено до 96 областей адресов с одинаковым типом кэширования. Такое распределение позволяет оптимизировать операции с ОЗУ, ПЗУ, видеобуферами и адаптерами ввода/вывода, отображенными на пространство памяти. По аппаратному сбросу регистры MTRR устанавливаются в такое состояние, которое ведет к объявлению некэшируемой всей физической памяти. Дальнейшая инициализация, выполняемая обычно во время POST BIOS, программирует регистры в соответствии с реальным распределением памяти. Регистры 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.
