Кеш (від англ. cache — схованка) — особлива швидкісна пам'ять або частина оперативної пам'яті, де зберігаються копії часто використовуваних даних. Забезпечує до них швидкий доступ. Кеш-пам'ять зберігає вміст і адресу даних, до яких часто звертається процесор. Під час чергового звертання процесора до адреси пам'яті, перевіряється наявність цієї адреси у кеші. Якщо відповідні дані наявні, вони передаються процесору з кешу. Це дозволяє скоротити тривалість обміну, оскільки швидкодія кешу більша за швидкодію звичайної пам'яті. Вибір даних зі звичайної (повільнішої) пам'яті здійснюється лише тоді, коли потрібні процесору дані в кеші відсутні.

Слід зазначити, що кеш може бути не лише процесорний, а й входити до складу інших компонентів комп'ютера, наприклад кеш жорсткого диску, SSD-накопичувачів особливих видів тощо. Більш того, кеш ще й може бути програмним рішенням, наприклад в ОС Android він використовується для пришвидшеного доступу до часто використовуваних внутрішніх даних застосунків. Програмні кеші широко застосовуються у браузерах[1][2] та мультимедійних програмах.

ІсторіяРедагувати

Використання слова «кеш» у контексті комп'ютерів походить від 1967 року, коли готувалась стаття для публікації в журналі 'IBM Systems Journal'. Стаття стосувалася вдосконалення пам'яті в Моделі 85, наступної в лінії IBM System/360. Редактор журналу, Lyle R. Johnson, попрохав ужити більш описовий термін, ніж «швидкохідний буфер», але іншого слова не було знайдено, тоді він запропонував «кеш». Статтю було опубліковано на початку 1968 року, автори були нагороджені IBM, їх робота широко схвалювалась і згодом була поліпшена, та назва «кеш» швидко стала стандартно вживаною в комп'ютерній літературі.

Принцип дії процесорного кешуРедагувати

Кеш — це швидка проміжна (буферна) пам'ять невеликої місткості, що розташована поміж процесором з його регістрами, й основною пам'яттю (здебільшого ОЗП). Операції обміну даними між процесором і кешем виконуються швидше, ніж звернення процесора безпосередньо до основної пам'яті, тим самим прискорюється робота процесора з пам'яттю. Найчастіше кеш залишається прозорим для програміста, тому що система команд процесора, зазвичай, не містить команд роботи з кешем. При поясненні роботи кешу можна вважати, що процесор також його «не бачить» і звертається до пам'яті так, ніби кешу немає. Проте кеш, як правило, існує, і на апаратному рівні перехоплює сигнали процесора читання/запис, а коли треба, то надає процесору швидкі копії інформаційних кодів, які тимчасово зберігає у власній робочій пам'яті. Якщо кеш спроможний підмінити собою пам'ять (це називається «попадання в кеш», англ. Cache hit), тоді він за рахунок власних ресурсів задовольняє запит процесора. Процесор не пригальмовується і продовжує працювати на великій швидкості. Коли «підміна» пам'яті неможлива, тоді до роботи залучається основна пам'ять, обмін з якою суттєво пригальмовує процесор.

Усі завдання, пов'язані з перехопленням запитів від процесора на роботу із пам'яттю, вирішує частина апаратури кешу під назвою «контролер кешу». Друга частина апаратури кешу містить невелику швидку робочу пам'ять, де зберігається копія комірок головної пам'яті, до яких нещодавно були звернення, тобто результати «найсвіжіших» запитів процесора. Важливо, що вміст комірок головної пам'яті копіюється до пам'яті кешу разом зі своїми адресами. Саме ці скопійовані адреси і дозволяють контролеру кешу приймати рішення про спроможність буферної пам'яті задовольнити конкретний процесорний запит без залучення до обміну повільної основної пам'яті.

В окремих обчислювальних системах одночасно може використовуватись декілька процесорних кешів різного функціонального призначення, в тому числі:

  • кеш даних - виконує буферизації всіх запитів процесора до ОП;
  • кеш команд - зберігає наперед вибрані команди процесора, що з великою ймовірністю будуть виконані наступними;
  • буфер швидкої переадресації - забезпечує зберігання елементів таблиць сегментів та сторінок для перетворення (трансляції) віртуальних адрес у фізичні без звернення до ОП.

Більшість сучасних мікропроцесорів для комп'ютерів і серверів мають як мінімум три незалежних кеші: кеш інструкцій для прискорення завантаження машинного коду, кеш даних для прискорення читання і запису даних і буфер асоціативної трансляції (TLB) для прискорення трансляції віртуальних (математичних) адрес у фізичні, як для інструкцій, так і для даних. Кеш даних часто реалізується у вигляді багаторівневого кешу (L1, L2, L3).

Збільшення розміру кеш-пам'яті позитивно впливає на продуктивність майже всіх комп'ютерних програм[3].

Багаторівневі кешіРедагувати

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

ЛітератураРедагувати

ПриміткиРедагувати

ПосиланняРедагувати

Див. такожРедагувати

Комп'ютерна пам'ять