когерентність кеш

Кілька кешей для ресурсу, пам'яті

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

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

Когерентність визначає поведінку читань і записів в один і той же місце пам'яті. Кеш називається когерентним, якщо виконуються наступні умови:

  1. Якщо процесор Р записує значення в змінну Х, то при наступному зчитуванні Х він повинен отримати раніше записане значення, якщо між записом і читанням Х інший процесор не виробляв запис в Х. Це умова пов'язана зі збереженням порядку виконання програми. це повинно виконуватися і для однопоточному архітектури.
  2. Операція читання змінної Х процесором P 1>. наступна після того, як інший процесор P 2> здійснив запис в Х, повинна повернути записане значення, якщо інші процесори не змінювали Х між двома операціями. Ця умова визначає поняття когерентної видимості пам'яті.
  3. Записи в одну і ту ж комірку пам'яті повинні бути послідовними. Іншими словами, якщо два процесори записують у змінну Х два значення: А, потім В - не повинно трапитися так, щоб при зчитуванні процесор спочатку отримував значення В, а потім А.

У цих умовах передбачається, що операції читання і запису відбуваються миттєво. Однак цього не відбувається на практиці через затримки пам'яті та інших особливостей архітектури. Зміни, зроблені процесором P 1>. можуть бути не видно процесору P 2>. якщо читання відбулося через дуже маленький проміжок часу після запису. Модель консистентності пам'яті визначає, коли записане значення буде видно при читанні з іншого потоку.

Механізми когерентності кешей

  • Когерентність з використанням довідника (directory). Інформація про стан блоку фізичної пам'яті міститься тільки в одному місці, званому довідником (фізично довідник може бути розподілений по вузлах системи).
  • Когерентність з використанням відстеження (snooping). Кожен кеш, який містить копію даних деякого блоку фізичної пам'яті, має також відповідну копію службової інформації про його стан. Централізована система записів відсутня. Зазвичай кеші розташовані на загальною (що розділяється) шині і контролери всіх кешей спостерігають за шиною (переглядають її) для визначення того, чи не містять вони копію відповідного блоку.
  • Перехоплення (snarfing). Коли з якого-небудь одного кешу дані переписуються в оперативну пам'ять, контролери інших отримують сигнал про цю зміну ( "перехоплюють" інформацію про зміну даних) і, якщо необхідно, змінюють відповідні дані в своїх кешах.

Системи розподіленої пам'яті, що en: Distributed shared memory використовують схожі механізми для підтримки коректності між блоками пам'яті в слабосвязанних системах.

Протоколи підтримки когерентності

Протоколи підтримки когерентності відповідають за підтримання коректності даних між усіма кешами в системі з en: distributed shared memory. Протокол підтримує когерентність пам'яті відповідно до обраної моделі (en: consistency model). Більшість апаратних протоколів в мікропроцесорах відповідають моделі en: sequential consistency. а програмні протоколи в системах software distributed shared memory частіше відповідають моделям en: release consistency або en: weak consistency.

Моделі і протоколи підтримки когерентності кешей:

Схожі статті