Послідовність адрес у пакетному циклі Pentium

На початку цього розділу обговорюється, що являють собою засоби кешування сучасних мікропроцесорів. Далі розглядаються різноманітні схеми побудов кешів даних, таблиць TLBіVHPT. А наприкінці розглядаються інструменти управління кешуванням.

$.1 Засоби кешування сучасних мікропроцесорів

Програма – споживач інформації

Основна пам'ять – не швидка, але дешева

Рис.$.0. Місце засобів кешування у процедурі обробки інформації.

$.1. Принципи кешування пам'яті

У комп'ютерах, основна пам'ять реалізується щодо повільної динамічної пам'яті (DRAM), звернення до неї призводить до простою процесора – з'являються такти очікування (waitstates). Статична пам'ять (SRAM), побудована, як і процесор, на транзисторних осередках, за своєю природою здатна наздогнати сучасні процесори швидкодії і зробити непотрібними такти очікування (чи хоча б скоротити їх кількість). Крім того, доступ до основної пам'яті (розташованої поза процесором) відбувається через системну шину, швидкісні можливості якої суттєво обмежені. Є й інші обмеження, що перешкоджають тому, щоб зробити всю пам'ять швидкодією:

чим швидше пам'ять, тим вона дорожча (причому експоненційна залежність),

чим швидше пам'ять, тим вона більше виділяє тепла, а значить, її слід постачати спеціальними засобами тепловідведення і розташовувати подалі від мікропроцесора, що розпалюється під час роботи,

чим швидше працює шина зв'язку, тим коротше вона повинна бути (через взаємні наведення і через обмеженість швидкості світла).

Розумним компромісом для побудови економічних та продуктивних систем став ієрархічний спосіб організації оперативної пам'яті. Ідея полягає в наступномупоєднанні:

основна пам'ять великого обсягу працює відносно повільно і пов'язана з процесором щодо повільної загальної шини,

зовнішня кеш-пам'ять третього рівня (L3) істотно менше, але працює швидше і пов'язана з процесором швидшою шиною,

розташована всередині процесора, кеш-пам'ять другого рівня (L2), вона ще менша, але працює майже на частоті процесора і досить швидко,

швидкодіюча маленька кеш-пам'ять першого рівня (L1), вона тісно інтегрована у процесор.

Кеш не може зберігати копію всієї основної пам'яті, оскільки його об'єм набагато менше основної пам'яті. Він зберігає лише обмежену кількість блоків даних ікаталог(cachedirectory) – список їхньої поточної відповідності областям основної пам'яті. Крім того, кешуватися може не вся пам'ять, доступна процесору (або через те, що так побудований кеш даного рівня, або тому, що так встановлено операційною системою).

При кожному зверненні до пам'яті контролер кеш-пам'яті за каталогом перевіряє, чи дійсна копія затребуваних даних у кеші. Якщо вона там є, це випадоккеш-попадання(cachehit), і дані беруться з кеш-пам'яті. Якщо дійсної копії там немає, це випадок кеш-промаху (cachemiss), і дані беруться з основної пам'яті. Відповідно до алгоритму кешування блок даних, зчитаний з основної пам'яті, за певних умов замістить один із блоків кешу. Від інтелектуальності алгоритму заміщення залежить відсоток влучень і, отже, ефективність кешування. Пошук блоку у списку повинен проводитися досить швидко, щоб «задумливістю» у прийнятті рішення не звести нанівець виграш від застосування швидкодіючої пам'яті. Звернення до основної пам'яті може починатися одночасно з пошукому каталозі, а у разі влучення - перериватися (архітектураLook-aside). Це заощаджує час, але зайві звернення до основної пам'яті ведуть до збільшення енергоспоживання. Інший варіант: звернення до зовнішньої пам'яті починається тільки після фіксації промаху (архітектура Look Through), при цьому втрачається принаймні один такт процесора, зате економиться енергія.

У сучасних комп'ютерах кеш будується за дворівневою схемою. Кеш першого рівня (L1Cache) вбудований у всі процесори 486+; це внутрішній кеш. Об'єм цього кешу невеликий (8-32 Кбайт). Щоб підвищити продуктивність, для даних та команд часто використовується роздільний кеш (так звана Гарвардська архітектура – ​​протилежність Прінстонській, яка використовує загальну пам'ять для команд та даних). Кеш другого рівня (L2Cache) для процесорів 486 іPentiumє зовнішнім (встановлюється на системній платі), а уP6+ розташовується в одній упаковці з ядром і підключається до спеціальної внутрішньої шині процесора.

Кеш-контролер повинен забезпечувати когерентність (coherency) – узгодженість даних кеш-пам'яті обох рівнів з даними в основній пам'яті, за умови, що звернення до цих даних може здійснюватися не тільки процесором, але й іншими активними (busmaster) адаптерами, підключеними до шин (PCI, VLB, ISA і т. д.). Слід також врахувати, що процесорів може бути кілька, і кожен може мати свій внутрішній кеш.

Рядки кешу під відображення блоку пам'яті виділяються при промахах операцій читання, в рядки P6 заповнюються і при записі. Запис блоку, що не має копії в кеші, виконується в основну пам'ять (для підвищення швидкодії запис може здійснюватися через буфер відкладеного запису). Поведінка кеш-контролера при операції запису в пам'ять, коли копія потрібної областізнаходиться в деякому рядку кеша,визначається його алгоритмом, або політикою запису (WritePolicy). Існують дві основні політики запису даних з кешу в основну пам'ять:наскрізний записWT(WriteThrough) тазворотний (відкладений) записWB( WriteBack).

Політика WTпередбачає одночасне виконання кожної операції запису (навіть однобайтної), що потрапляє в кешований блок, рядок кеша і в основну пам'ять. При цьому процесору при кожній операції запису доведеться виконувати тривалий запис в основну пам'ять. Алгоритм досить простий у реалізації та легко забезпечує цілісність даних за рахунок постійного збігу копій даних у кеші та основній пам'яті. Для нього не потрібно зберігати ознаки присутності та модифікованості – цілком достатньо лише інформації тега (при цьому вважається, що будь-який рядок завжди відображає якийсь блок, а який саме – вказує тег). Але це простота обертається низькою ефективністю записи. Існують варіанти цього алгоритму із застосуванням відкладеного буферизованого запису, коли дані в основну пам'ять переписуються через FIFO-буфер під час вільних тактів шини.

Політика WBдозволяє зменшити кількість операцій запису на шині основної пам'яті. Якщо блок пам'яті, в який повинен виконуватися запис, відображений у кеші, то фізичний запис спочатку буде зроблено в цей дійсний рядок кешу, який відзначається якбрудний(dirty), або модифікований, тобто вимагає вивантаження в основну пам'ять . Тільки після цього вивантаження (запису в основну пам'ять) рядок стане чистим (3) (clean), і його можна буде використовувати для кешування інших блоків без втрати цілісності даних. В основну пам'ять дані переписуються лише цілим рядком. Це вивантаженняконтролер може відкладатися до настання крайньої необхідності (звернення до кешованої пам'яті іншим абонентом, заміщення в кеші новими даними) або виконуватися у вільний час після модифікації всього рядка. Цей алгоритм складніше у реалізації, але значно ефективніше, ніж WT. Підтримка системною платою кешування зі зворотним записом вимагає обробки додаткових інтерфейсних сигналів для вивантаження модифікованих рядків в основну пам'ять, якщо до цієї області здійснюється звернення таких контролерів шини, як інші процесори, графічні адаптери, контролери дисків, мережні адаптери і т.п.

Залежно від способу визначення взаємної відповідності рядка кешу та області основної пам'яті розрізняють три архітектури кеш-пам'яті:кеш прямого відображення(direct-mappedcache),повністю асоціативний кеш(fullyassociativecache) та їх комбінація -набірно-асоціативний кеш(set-associativecache).

$.1.1. Кеш прямого відображення