Кеш — Вікіпедія

Кеш (від англ. 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), і так далі, поки не відбудеться запит до основної оперативної чи постійної пам'яті.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Як очистити кеш і видалити файли cookie - Комп’ютер - Обліковий запис Google Довідка. support.google.com. Архів оригіналу за 30 Липня 2021. Процитовано 30 липня 2021. 
  2. Как очистить кэш браузера?. Архів оригіналу за 30 Липня 2021. Процитовано 30 Липня 2021. 
  3. Зависимость производительности процессора от размера кэша L2 [Архівовано 3 Червня 2013 у Wayback Machine.](рос.)

Література[ред. | ред. код]

Посилання[ред. | ред. код]