когерентність пам'яті підтримується. Попадання зчитування обслуговуються з кеша. Попадання запису модифікують рядки, при цьому операції запису переходять в основну пам'ять. Анулювання рядків дозволено. Зовнішнє стеження (повідомлення стану) виконується. Цей режим використовується для тимчасового виключення кеша, після якого його включення можливе без очищення. Цей стан аналогічний тимчасовому переведенню сигналу KEN# у високоімпедансний стан;
4) CD=1, NW=1 – заповнення кеша заборонено, когерентність пам'яті не підтримується. Попадання зчитування обслуговуються з кеша. Попадання запису модифікують кеш, але не основну пам'ять. Анулювання рядків заблоковано, очищення кеша зумовлюють тільки інструкції INVD і WBINVD. Зовнішнє стеження виконується. Очищення в такому режимі повністю вимикає кеш. Якщо ж перед встановленням цього сполучення бітів кеш був заповнений, а очищення не здійснювалось, то кеш перетворюється на «заморожену» ділянку статичної пам'яті.
При використанні сторінкової переадресації в керуванні кешуванням беруть участь біти PCD (Page Cache Disable – заборона кешування сторінки) і PWT (Page Write Through – наскрізний запис сторінки) регістра CR3 та елементів каталогу і таблиць сторінок. Ці біти керують кешуванням таблиці каталогів. В елементах каталогу таблиць (PDE) вони керують кешуванням таблиць сторінок, на які посилаються, в елементах таблиць сторінок (РТЕ) – кешуванням сторінок, що обслуговуються. В процесорах Р6 біт PGE регістра CR4 дає змогу використовувати біт глобальності сторінки G для керування анулюванням входжень в TLB.
Для керування кешуванням на апаратному рівні процесори i486 і Р5 мають входи KEN# і WB/WT#. У процесорів з WB-кешем є вхідний сигнал WB/WT#, який може спростити запис для даної адреси WT. Вхідні сигнали PCD і PWT керують роботою вторинного зовнішнього кеша, а також первинного кеша. В циклах звернення до пам'яті, коли сторінкові перетворення не використовуються джерелом сигналів, є біти PCD і PWT регістра CR3, при зверненні до таблиці сторінок – біти PCD і PWT з дескриптора відповідного елемента каталогу, при зверненні до даних сторінки – біти PCD і PWT з дескриптора сторінки. Крім того, ці сигнали можуть примусово встановлюватися спільними бітами керування кешуванням CD і WT регістра CR0.
В архітектуру процесорів Р6 введено регістри MTRR (Memory Range Registers), які реалізують зазначені вище функції апаратного керування кешуванням, а також зміною порядку запису для певних ділянок пам'яті. За допомогою цих регістрів у фізичній пам'яті визначається до 96 ділянок адрес з однаковим типом кешування. Це дає змогу оптимізувати операції з ОЗП, ПЗП, відеобуферами та адаптерами вводу/виводу, що відображені на простір пам'яті. За апаратного скидання регістри MTRR встановлюються так, що вся фізична пам'ять оголошується некешованою. Подальша ініціалізація здійснюється під час виконання програми POST BIOS. Вона програмує регістри відповідно до реального розподілу пам'яті. Типи пам'яті та їх характеристики наведено в табл. 4.1.
Таблиця 4.
Типи пам'яті, що визначаються регістрами MTRR
Мнемоніка | Код в MTRR | Кешування | Режим WB | Спекулятив-не читання | Порядок операцій
UC(Up Cacheable) | 0 | Немає | Немає | Є | Строгий
WC (Write Combining) | 1 | » | » | » | Слабковпо-рядкований
WT(Write-Through) | 4 | Є | » | » | Спекулятивний (Speculative Processor Ordering)
WP(Write-Protected) | 5 | Зчитування є, запису немає | » | » | »
WB(Write Back) | 6 | Є | Є | » | »
Спекулятивним в даному випадку вважається зчитування, результат якого може не вимагатися програмою.
Регістри MTRR є модельно-специфічними регістрами (MRS). Вони визначають набори фіксованих зон для першого мегабайта фізичної пам'яті та зони довільного розміру для пам'яті в будь-якому діапазоні адрес. Наявність MTRR визначається інструкцією CPUID за прапорцем MTRR (біт 13 в EDX). 64-Розрядний регістр MTRRcap визначає можливості MTRR. Кількість довільних зон визначається полем VCNT (для Р6 – 8 зон), прапорець FIX (біт 8) свідчить про наявність фіксованих зон; а прапорець WC (біт 10) вказує на підтримку пам'яті типу WC.
Загальне керування MTRR здійснюється записом в 64-розрядний регістр MTRRdetType. Прапорець Е (біт 11) дозволяє використання MTRR. Якщо він скинутий, то вся пам'ять визначається як UC. Прапорець FE (біт 10) дозволяє використання фіксованих зон, поле Туре (біти 7-0) задає тип пам'яті, за умовчання – пам'яті, що не потрапила в жодну із зон. Для відсутньої фізичної пам'яті рекомендується тип UC.
Для керування фіксованими зонами кеш-пам'яті використовуються регістри:
MTRRfix64K_00000 – для відображення восьми зон по 64 Кбайт в діапазоні адрес 0 – 7FFFFh;
MTRRfixl6K_80000 і MTRRfixl6K_A0000 – для відображення 16 зон по 16 Кбайт в діапазоні адрес 80000h-BFFFFh'
MTRRfix4K_C0000, MTRRfix4K_C8000... MTRRfix 4K_F8000 (8 регістрів) – для відображення 64 зон по 4 Кбайт в діапазоні адрес C0000h-FFFFFh.
Кожний байт цих 64-розрядних регістрів несе інформацію про тип пам'яті для зони, що ним відображається (табл. 4.1).
Для керування кожною із зон довільного розміру використовуються пари регістрів, де п визначає номер регістра:
1) MTRRhysBasen – регістр базової фізичної адреси зони. Поле Туре (біти 7-0) визначає тип пам'яті для зони, поле PhysBase (біти 35-12) задає її базову адресу (старші 24 біти, молодші 12 – нульові). Зони визначаються за межами сторінок розміром 4 Кбайт;
2) MTRRhysMaskn – регістр маски фізичної адреси. Поле PhysMaskn (біти 35-12) задає маску зони, прапорець V (біт 11) визначає дійсність даних цієї регістрової пари. Маска визначається так, щоб результат функції І над нею та адресою, що належить зоні, збігався з результатом тієї ж функції над нею та базовою адресою.
Перекриття довільних зон допускається лише для типів пам'яті UC чи UC і WB. Для