Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы СПтаОС (3курс).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
929.79 Кб
Скачать

1.2. Кешування даних

Користувачеві хотілося б мати і недорогу і швидку пам'ять. Кеш-пам'ять представляє деяке компромісне вирішення цієї проблеми (мал. 1.2.).

Мал. 1.2. Ієрархія кеш-пам'яті

1.2.1. Кеш-пам'ять

Кеш-пам'ять - це спосіб організації сумісного функціонування двох типів запоминаючих пристроїв, які відрізняються часом доступу і вартістю зберігання даних, який дозволяє зменшити середній час доступу даним за рахунок динамічного копіювання в "швидке" ЗУ найбільш часто використовуваній інформації з "повільного" ЗУ.

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

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

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

1.2.2. Принцип дії кеш-пам'яті

Розглянемо окремий випадок використання кеш-пам'яті для зменшення середнього часу доступу до даних, що зберігаються в оперативній пам'яті. Для цього між процесором і оперативною пам'яттю поміщається швидке ЗУ, зване просто кеш-пам'яттю (мал. 1.3).

Вмістом кеш-пам'яті є сукупність записів про всі завантажені в неї елементи даних. Кожен запис про елемент даних включає:

  • значення елементу даних;

  • адреса, яку цей елемент даних має в оперативній пам'яті;

  • управляючу інформацію: ознака модифікації та ознака звернення до даних за деякий останній період часу.

У системах, оснащених кеш-пам'яттю, кожен запит до оперативної пам'яті виконується відповідно до наступного алгоритму.

Відбувається пошук даних в кеш-пам'яті з метою визначення, чи не знаходяться потрібні дані в кеш-пам'яті; кеш-пам'ять не є такою, що адресується, тому пошук потрібних даних здійснюється по вмісту - значенню поля "адреса в оперативній пам'яті", узятому із запиту.

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

Мал. 1.3. Схема функціонування кеш-пам'яті

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

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

На практиці в кеш-пам'ять прочитується не один елемент даних, до якого відбулося звернення, а цілий блок даних, це збільшує вірогідність так званого "попадання в кеш", тобто знаходження потрібних даних в кеш-пам'яті.

Інтуїтивно зрозуміло, що ефективність кешування залежить від вірогідності попадання в кеш. Покажемо це шляхом знаходження залежності середнього часу доступу до основної пам'яті від вірогідності кэш-попаданий. Нехай є основний запоминаючий пристрій з середнім часом доступу до даних tl і кеш-пам'ять, що має час доступу t2, очевидно, що t2 < tl. Хай t — середній час доступу до даних в системі з кеш-пам'яттю, а р — вірогідність кэш-попадания. По формулі повної вірогідності маємо:

t = t1(1 - p)+ t2p.

Середній час доступу до даним в системі з кеш-пам'яттю лінійно залежить від вірогідності попадання в кеш і змінюється від середнього часу доступу в основний пристрій t1, що запам'ятовує, при р=0 до середнього часу доступу безпосередньо в кеш-пам'ять t2 при р=1. Звідси видно, що використання кеш-пам'яті має сенс тільки при високій вірогідності кэш-попадання.

Вірогідність виявлення даних в кеші залежить від різних чинників, таких, наприклад, як об'єм кеша, об'єм кэшируемой пам'яті, алгоритм заміщення даних в кеші, особливості виконуваної програми, час її роботи, рівень мультипрограмування і інших особливостей обчислювального процесу. Проте в більшості реалізацій кеш-пам'яті відсоток кэш-попаданий виявляється вельми високим — понад 90 %. Таке високе значення вірогідності знаходження даних в кеш-пам'яті пояснюється наявністю у даних об'єктивних властивостей: просторовій і тимчасовій локальності.

Просторова локальність. Якщо відбулося звернення за деякою адресою, то з високим ступенем вірогідності найближчим часом відбудеться звернення до сусідніх адрес.

Тимчасова локальність. Якщо відбулося звернення за деякою адресою, то наступне звернення за цією ж адресою з великою вірогідністю відбудеться найближчим часом.

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

Властивість просторової локальності також використовується для збільшення вірогідності кэш-попадания: як правило, в кеш-пам'ять прочитується не один інформаційний елемент, до якого відбулося звернення, а цілий блок даних, розташованих в основній пам'яті в безпосередній близькості з даним елементом. Оскільки при виконанні програми дуже висока вірогідність, що команди вибираються з пам'яті послідовно одна за одною з сусідніх осередків, то має сенс завантажувати в кеш-пам'ять цілий фрагмент програми. Аналогічно якщо програма веде обробку деякого масиву даних, то її роботу можна прискорити, завантаживши в кеш частину або навіть весь масив даних. При цьому враховується висока вірогідність того, що значне число звернень до пам'яті виконуватиметься до адрес масиву даних.

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