Ці кошти в різних варіаціях (на кристалі, картриджі процесора або на системній платі) представлені в системах з процесорами 486, Pentium і Р6. У процесорі 80386 (Intel) був тільки TLB, a кеш-пам'ять, встановлювана на системній платі, не мала підтримки з боку процесора.
1.Описание пристрою. Принципи кешування
Основна пам'ять комп'ютерів реалізується на відносно повільної динамічної пам'яті (DRAM), звернення до неї призводить до простою процесора - з'являються такти чекання (wait states). Статична пам'ять (SRAM), побудована, як і процесор, на тригерних осередках, за своєю природою здатна наздогнати сучасні процесори по швидкодії і зробити непотрібними такти чекання (або хоча б скоротити їх кількість). Розумним компромісом для побудови економічних і продуктивних систем з'явився ієрархічний спосіб організації оперативної пам'яті. Ідея полягає в поєднанні основної пам'яті великого обсягу на DRAM з відносно невеликою кеш-пам'яттю на швидкодіючих мікросхемах SRAM.
У перекладі слово кеш (cache) означає «таємний склад», «тайник» («заначка»). Таємниця цього складу полягає в його «прозорості» - для програми він не являє собою додаткової адресуемой області пам'яті. Кеш є додатковим швидкодіючим сховищем копій блоків інформації з основної пам'яті, ймовірність звернення до яких найближчим часом велика. Кеш не може зберігати копію всієї основної пам'яті, оскільки його обсяг у багато разів менше основної пам'яті. Він зберігає лише обмежена кількість блоків даних і каталог (cache directory) - список їх поточного відповідності областям основної пам'яті. Крім того, кешуватися може не вся пам'ять, доступна процесору.
При кожному зверненні до пам'яті контролер кеш-пам'яті за каталогом перевіряє, чи є дійсна копія витребуваних даних в кеші. Якщо вона там є, то це випадок кеш-влучення (cache hit), і дані беруться з кеш-пам'яті. Якщо дійсної копії там немає, це випадок кеш-промаху (cache miss), і дані беруться з основної пам'яті. Відповідно до алгоритму кешування блок даних, лічений з основної пам'яті, за певних умов заместит один із блоків кеша. Від інтелектуальності алгоритму заміщення залежить відсоток влучень і, отже, ефективність кешування. Пошук блоку в списку повинен проводитися досить швидко, щоб «задумою» у прийнятті рішення не звести нанівець виграш від застосування швидкодіючої пам'яті.
Звернення до основної пам'яті може починатися одночасно з пошуком в каталозі, а в разі потрапляння - перериватися (архітектура Look aside). Це економить час, але зайві звернення до основної пам'яті ведуть до збільшення енергоспоживання. Інший варіант: звернення до зовнішньої пам'яті починається тільки після фіксації промаху (архітектура Look Through), при цьому втрачається принаймні один такт процесора, зате економиться енергія.
У сучасних комп'ютерах кеш зазвичай будується за дворівневою схемою. Первинний кеш (L1 Cache) вбудований у всі процесори класу 486 і старше; це внутрішній кеш. Обсяг цього кеша невеликий (8-32 Кбайт). Для підвищення продуктивності для даних і команд часто використовується роздільний кеш (так звана Гарвардська архітектура - протилежність Прінстонський, що використовує загальну пам'ять для команд і даних). Вторинний кеш (L2 Cache) для процесорів 486 і Pentium є зовнішнім (встановлюється на системній платі), а у Р6 розташовується в одній упаковці з ядром і підключається до спеціальної внутрішній шині процесора.
Рис.
Кеш-контролер повинен забезпечувати когерентність (coherency) - узгодженість даних кеш-пам'яті обох рівнів з даними в основній пам'яті, за тієї умови, що звернення до цих даних може проводитися не тільки процесором, але й іншими активними (busmaster) адаптерами, підключеними до шин (PCI, VLB, ISA і т. д.). Слід також врахувати, що процесорів може бути декілька, і в кожного може бути свій внутрішній кеш.
Контролер кеша оперує рядками (cache line) фіксованої довжини. Рядок може зберігати копію блоку основної пам'яті, розмір якого, природно, збігається з довжиною рядка. З кожним рядком кеша пов'язана інформація про адресу скопійованого в неї блоку основної пам'яті і про її стані. Рядок може бути дійсною (valid) - це означає, що в поточний момент часу вона достовірно відображає відповідний блок основної пам'яті, або недійсною. Інформація про те, який саме блок займає даний рядок (тобто старша частина адреси або номер сторінки), і про її стан називається тегом (tag) і зберігається в пов'язаної з даною рядком комірці спеціальної пам'яті тегів (tag RAM). В операціях обміну з основною пам'яттю зазвичай рядок бере участь цілком (несекторірованний кеш), для процесорів 486 і старше довжина рядка збігається з обсягом даних, переданих за один пакетний цикл (для 486 це 4х4=16 байт, для Pentium 4x8=32 байт). Можливий і варіант...