що блок кеш-пам'яті містить достовірну або придатну для використання інформацію. Найбільш загальним способом вирішення цієї проблеми є додавання до тегу так званого біта достовірності (valid bit). p> Адресація множинно-асоціативної кеш-пам'яті здійснюється шляхом ділення адреси, що надходить з процесора, на три частини: поле зміщення використовується для вибору байта всередині блоку кеш-пам'яті, поле індексу визначає номер множини, а поле тега використовується для порівняння. Якщо загальний розмір кеш-пам'яті зафіксувати, то збільшення ступеня асоціативності призводить до збільшення кількості блоків у безлічі, при цьому зменшується розмір індексу і збільшується розмір тега. br/>
3. Який блок кеш-пам'яті повинен бути заміщений при промаху?
При виникненні промаху, контролер кеш-пам'яті повинен вибрати підлягає заміщенню блок. Користь від використання організації з прямим відображенням полягає в тому, що апаратні рішення тут найбільш прості. Вибирати просто нічого: на потрапляння перевіряється тільки один блок і тільки цей блок може бути заміщений. При повністю асоціативної або множинно-асоціативної організації кеш-пам'яті є декілька блоків, з яких треба вибрати кандидата у випадку промаху. Як правило для заміщення блоків застосовуються дві основні стратегії: випадкова і LRU. p> У першому випадку, щоб мати рівномірний розподіл, блоки-кандидати вибираються випадково. У деяких системах, щоб отримати відтворюване поведінку, яка особливо корисно під час налагодження апаратури, використовують псевдовипадковий алгоритм заміщення. p> У другому випадку, щоб зменшити ймовірність викидання інформації, яка скоро може знадобитися, всі звернення до блоків фіксуються. Замінюється той блок, який не використовувалася найдовше (LRU - Least-Recently Used). p> Гідність випадкового способу полягає в тому, що його простіше реалізувати в апаратурі. Коли кількість блоків для підтримки траси збільшується, алгоритм LRU стає все більш дорогим і часто тільки наближеним. На малюнку 3 показані відмінності в частках промахів при використанні алгоритму заміщення LRU і випадкового алгоритму.
В
Рис. 3. Порівняння часткою промахів для алгоритму LRU і випадкового алгоритму заміщення
при декількох розмірах кеша і різних асоціативно при розмірі блоку 16 байт
4. Що відбувається під час запису?
При зверненнях до кеш-пам'яті на реальних програмах переважають звернення з читання. Всі звернення за командами є зверненнями з читання і більшість команд не пишуть в пам'ять. Зазвичай операції запису складають менше 10% загального трафіку пам'яті. Бажання зробити загальний випадок більш швидким означає оптимізацію кеш-пам'яті для виконання операцій читання, однак при реалізації високопродуктивної обробки даних не можна нехтувати і швидкістю операцій запису. p> На щастя, загальний випадок є і більш простим. Блок з кеш-пам'яті може бути прочитаний в той же саме час, коли читається і порівнюється його тег. Таким чином, читання блоку починається відразу як тільки стає доступним адреса блока. Якщо читання відбувається з попаданням, то блок негайно направляється в процесор. Якщо ж відбувається промах, то від заздалегідь ліченого блоку немає ніякої користі, правда немає і ніякої шкоди. p> Однак при виконанні операції запису ситуація докорінно змінюється. Саме процесор визначає розмір записи (зазвичай від 1 до 8 байтів) і тільки ця частина блоку може бути змінена. У загальному випадку це має на увазі виконання над блоком послідовності операцій читання-модифікація-запис: читання оригіналу блоку, модифікацію його частини і запис нового значення блоку. Більше того, модифікація блоку не може починатися до тих пір, поки перевіряється тег, щоб переконатися в тому, що звернення є попаданням. Оскільки перевірка тегів не може виконуватися паралельно з іншою роботою, то операції запису забирають більше часу, ніж операції читання. p> Дуже часто організація кеш-пам'яті в різних машинах відрізняється саме стратегією виконання запису. Коли виконується запис в кеш-пам'яті є дві базові можливості:
наскрізна запис (write through , store through) - інформація записується у два місця: у блок кеш-пам'яті і в блок більш низького рівня пам'яті.
запис із зворотним копіюванням (write back, copy back, store in ) - інформація записується тільки в блок кеш-пам'яті. Модифікований блок кеш-пам'яті записується в основну пам'ять тільки коли він заміщається. Для скорочення частоти копіювання блоків при заміщенні звичайно з кожним блоком кеш-пам'яті зв'язується так званий біт модифікації (dirty bit). Цей біт стану показує чи був модифікований блок, що знаходиться в кеш-пам'яті. Якщо він не модифікувався, то зворотне копіювання скасовується, оскільки більш низький рівень містить ту ж саму інформацію, що і кеш-пам'ять.