процесорів зі своїм внутрішнім кешем, що слід враховувати.
Контролер кеша оперує з рядками (cache line) фіксованої довжини. Рядок зберігає копію блока оперативної пам'яті, розмір якого збігається з довжиною рядка. Кожному рядку кеша відповідає інформація про адресу скопійованого в нього блока оперативної пам'яті та про її стан. Рядок може бути дійсним (valid) – це означає, що в поточний момент часу він достовірно відображає відповідний блок оперативної пам'яті, чи недійсним. Інформацію про те, який саме блок займає даний рядок (старша частина адреси чи номер сторінки), і про його стан називають тегом (tag). Вона зберігається у пов'язаній з даним рядком комірці спеціальної пам'яті тегів (tag RAM). Для процесорів i486 і старих процесорів Р5 довжина рядка збігається з об'ємом даних, що передаються за один пакетний цикл (для i486 це – 4 Ч 4 = 16 байт, для Pentium – 4 Ч 8 = 32 байт). Можливий також ва-рі-ант секторованого (sectored) кеша, в якому один рядок містить кілька сумі-ж-них комірок – секторів, їх розміри відповідають мінімальній порції обміну даних кеша з оперативною пам'яттю. При цьому в записі каталогу, що відповідає кож-но-му рядку, повинні зберігатися біти дійсності для кожного сектора даного рядка. Сек-то-рування економить пам'ять, яка необхідна для зберігання каталогу при збі-ль-шенні ємності кеша, оскільки більша кількість бітів каталогу відводиться під тег.
При промахах операцій зчитування під відображення блока пам'яті виділяються рядки кеша. В процесорах Р6 вони заповнюються і при записі. Запис блока, що не має копії в кеші, надходить в основну пам'ять (може проводитись через буфер відкладеного запису).
Поведінка кеш-контролера при здійсненні операції запису в пам'ять, коли копія ділянки, що вимагається, знаходиться в певному рядку кеша, визначається його алгоритмом роботи чи стратегією запису (Write Policy). Існують дві основні стратегії запису даних з кеша в основну пам'ять: наскрізний запис WT (Write Through) і зворотний запис WT (Write Back).
WT-запис передбачає виконання кожної операції запису, яка потрапляє в кешований блок, одночасно в рядок кеша і в основну пам'ять. При цьому процесор вимушений щоразу здійснювати тривалу операцію запису в основну пам'ять. За такого запису достатньо тільки інформації тега. Але така простота запису не дає високої ефективності. Існують варіанти алгоритму WT із застосуванням відкладеного буферизованого запису, за якого дані в основну пам'ять переписуються через FIFO-буфер (First-In First-Out – «першим прийшов – першим і вийшов») під час вільних тактів шини.
WB-запис дає змогу зменшити кількість операцій запису на системній шині основної пам'яті. Коли блок пам'яті, в який повинен здійснюватися запис, відображений в кеші, то фізичний запис спочатку відбуватиметься в цей дійсний рядок кеша і буде позначений як нечистий (dirty) або модифікований, тобто такий, що вимагає вивантаження в основну пам'ять. Тільки після цього вивантаження рядок стане чистим (clean), і його можна буде використати для кешування інших блоків без втрати цілісності даних. В основну пам'ять дані переписуються тільки цілим рядком. WB-алгоритм складніший в реалізації, ніж WT-алгоритм, але істотно ефективнішій. Підтримка кешування із зворотним записом потребує додаткових інтерфейсних сигналів, якщо здійснюється звернення з боку інших контролерів системної шини.
Залежно від способу визначення взаємної відповідності рядка кеша і ді-ля-н-ки основної пам'яті розрізняють три архітектури кеш-пам'яті: кеш прямого відо-б-раження (direct-mapped cache), повністю асоціативний кеш (fully associative cache) та їх комбінація – частково- чи набірно-асоціативний кеш (set-associative cache).
1.3. Застосування статичної пам'яті для кешування ОЗУ
Найпоширеніше застосування статичної пам'яті – кешування ОЗУ. На мікросхемах статичної пам'яті звичайно будується зовнішній кеш, в якому використовується архітектура прямого відображення або набірно-асоціативна. Функції кеш-контролера виконує чіпсет. Мікросхеми зберігання даних кеша організовуються в банки, число мікросхем в банку повинне відповідати розрядності системної шини процесора. Банк повинен заповнюватися мікросхемами одного об'єму, необхідна швидкодія мікросхем залежить від частоти системної шини. Банків може бути і декілька, кількість заповнених банків і організація встановлених мікросхем, що визначає об'єм кеш-пам'яті (vcache) задаються джамперами або визначаються автоматично.
Для зберігання тегів звичайно використовується окрема мікросхема асинхронній SRAM – Tag SRAM, а для більш ніж 8-бітного тега – пара мікросхем. Тут асинхронна пам'ять використовується як для асинхронного, так і для синхронного кеша. Її об'єм може і перевищувати мінімально необхідний для встановленої кеш-пам'яті. Необхідна швидкодія визначається тактовою частотою системної шини. Необхідний об'єм пам'яті тегів (кількість комірок) можна обчислити, розділивши об'єм встановленої кеш-пам'яті на довжину рядка кеша, визначуваного чіпсетом. Довжина рядка звичайно рівна кількості байт, передаваних за один стандартний пакетний цикл (4Ч4=16 байт для і486, 4Ч8=32 байта для Pentium).
Максимальний об'єм кешованої пам'яті (mcached) обмежений як архітектурними особливостями чіпсета і системної плати, так і об'ємом встановленої кеш-пам'яті даних і розрядністю пам'яті тегів. Для звичайних 8-бітних тегів він не може перевищувати 256Чvcache, так, для vcache 256 Кб mcached = 64 Мб. Збільшення кешованого об'єму вимагає збільшення об'єму кеш-пам'яті або (і) розрядності тегів (звичайно, в рамках підтримки чіпсетом).
Для кеша із зворотним записом (WB) необхідна ще й пам'ять для зберігання ознаки «чистоти» рядка. Ознака може зберігатися в окремій мікросхемі Dirty SRAM або займати один біт в Tag SRAM. Зворотний запис у вторинному кеші застосовується не завжди (вона з'явилася дещо пізніше за початок випуску процесорів класу 486), його реалізація складніше, ніж крізного.
Мікросхеми асинхронної пам'яті звичайно виконуються в Dip-корпусах з 8-бітовою організацією (рис. 1.3), які вставляються в спеціальні «ліжечка» системної плати (іноді припаюються). При установці мікросхем з