ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6791
Скачиваний: 22
367
Існує три основних типи відображення: повністю асоціативне, пряме та частково-асоціативне. Рис. 10.7 дає пояснення кожному типу відображення. При асоціативному відображенні вміст будь-якого блоку основної пам'яті може знаходитись в будь-якому блоці кеш пам'яті. Тобто вміст 12-го блоку основної пам'яті, наведеної на рис. 10.7, може бути записаний до будь-якого з 8 блоків кеш пам'яті. При прямому відображенні вміст кожного блоку основної пам'яті можна копіювати не до будь-якого, а лише до наперед визначеного блоку кеш пам'яті. Наприклад, це може бути відображення вмісту блоку К основної пам'яті в блок (K)modp кеш пам'яті, де р - кількість блоків в кеш пам'яті. Тобто 12 блок основної пам'яті на рис. 10.7 може бути записаний лише до 4 блоку кеш пам'яті, так як (12)mod8 = 4. При частково-асоціативному відображенні вміст кожного блоку основної пам'яті можна копіювати не до будь-якого, а до кількох наперед визначених блоків кеш пам'яті. Наприклад, це може бути відображення вмісту блоку К основної пам'яті в довільний блок сектора (K)mods кеш пам'яті, де s - кількість секторів в кеш пам'яті. Тобто вміст 12-го блоку основної пам'яті на рис. 10.7 може бути записаний лише до блоку 0 або блоку 1 сектора 0 кеш пам'яті, так як (12)mod4 = 0.
Для детальнішого пояснення принципів обміну вмісту блоків основної пам'яті та кеш пам'яті при використанні кожного типу відображення приймемо, що основна пам'ять має ємність 1 ГБ, а кеш пам'ять має ємність 16 КБ, вони поділені на блоки ємністю по 32 Б, тобто в основній пам'яті є 225 блоків, а в кеш пам'яті - 512 блоків.
10.2.4.2. Повністю асоціативне відображення
Взаємодія основної пам'яті з кеш пам'яттю з використанням повністю асоціативного відображення показана на рис. 10.8 а.
368
Відповідно до цього типу відображення вміст будь-якого блоку основної пам'яті може знаходитись в будь-якому блоці кеш пам'яті. При використанні асоціативного відображення адреса, яка поступає з процесора до основної пам'яті, ділиться на два поля: поле тега і поле слова (рис. 10.8 b). Вміст поля тега вказує адресу блоку в основній пам'яті. Розрядність цього поля рівна k = log2K, де К - кількість блоків в основній пам'яті. А вміст поля слова вказує адресу слова в блоці. Розрядність цього поля рівна m = log2M, де М - кількість слів в блоці.
При даному способі відображення кожен рядок кеш пам'яті вміщує наступну інформацію: тег, який вказує вміст якого блоку основної пам'яті переписано до даного блоку кеш пам'яті, розряд достовірності (valid bit V), який вказує, чи вміст даного блоку кеш пам'яті дійсно належить вказаному тегом блоку основної пам'яті, розряд модифікації (dirty bit D), який інформує про внесення змін до вмісту блоку кеш пам'яті, а також вміст вказаного тегом блоку основної пам'яті. Використання розряду модифікації пов'язано з тим, що вміст блоку в кеш пам'яті може змінюватись. Тому, якщо він не змінився, немає необхідності переписувати його назад до основної пам'яті, так як там вже є копія. Якщо ж змінився, потрібно переписати. Тому для фіксації змін в блоках кеш пам'яті до рядка кеш пам'яті і вводиться розряд модифікації D, який дозволяє суттєво зменшити час обміну. Коли процесору потрібний операнд із блоку з певною адресою, контролер кеш пам'яті повинен шукати його шляхом порівняння відповідних розрядів адреси з тегами всіх блоків кеш пам'яті. Якщо таке порівняння здійснювати послідовно, то кеш пам'ять втрачає зміст через низьку швидкодію. Доцільніше таке порівняння робити одночасно зі всіма тегами, як це показано на рис. 10.9. В цьому випадку кожен блок кеш пам'яті повинен містити свій компаратор, тобто це буде пам'ять з асоціативним доступом. При наявності в кеш пам'яті відповідного тега, та при одиничному значенні розряду достовірності, кеш пам'ять видає сигнал підтвердження попадання та надає доступ до відповідного блоку.
369
При побудові кеш пам'яті малої ємності використання пам'яті з асоціативним доступом є доцільним, оскільки дозволяє швидко ідентифікувати потрібну інформацію та реалізувати найефективніший спосіб відображення. При побудові кеш пам'яті великої ємності використання пам'яті з асоціативним доступом стає проблематичним через складність реалізації та великі габарити.
10.2.4.3. Пряме відображення
Взаємодія основної пам'яті з кеш пам'яттю з використанням прямого відображення показана на рис. 10.10а. Тут вміст кожного блоку основної пам'яті можна копіювати лише до наперед визначеного блоку кеш пам'яті Одна з можливих реалізацій використовує розрядне відображення. Тут додатково до того, як це було зроблено для асоціативного відображення, k-розрядне поле адреси блоку в основній пам'яті розбивається на дві частини: поле тега г та поле номера блоку s (рис. 10.10b). Тим самим основна пам'ять ділиться на секції, за кожною з яких закріплюється відповідна бирка (або ознака), яку називають тегом. Кількість R секцій (а значить і кількість тегів) рівна відношенню ємності основної пам'яті до ємності кеш пам'яті, або, що є тим самим, відношенню кількості К блоків в основній пам'яті, до кількості S блоків в кеш пам'яті. Розрядність поля тега визначається з виразу r = log2K/S = log2(2k/2s) = k - s. Кількість S блоків в кожній секції рівна кількості блоків в кеш пам'яті. Тобто ємність секції рівна ємності кеш пам'яті.
Наприклад, якщо в адресі блоку основної пам'яті присутні k розрядів, то молодші п з них вибирають, в який блок кеш пам'яті може копіюватись вміст блоку основної пам'яті. Отже, вміст всіх блоків з однаковими молодшими адресами потрапляє в один і той самий блок кеш пам'яті. Інші r=k-s розрядів адреси, що залишилися, використовуються як адресний тег, який використовується для порівняння з адресою, виданою процесором з метою пошуку номера секції в основній пам'яті.
370
Для наведеної вище умови, коли що основна пам ять має ємність 1 ГБ, а кеш пам ять -16 КБ, вони поділені на блоки ємністю по 32 Б, тобто кількість блоків в основній пам'яті рівна 225, а в кеш пам'яті - 29, маємо: повна розрядність адреси п = ЗО, причому поле адреси блоків основної пам'яті займає k — 25 розрядів, поле номера тега (тобто номера секції в основній пам'яті) г = 16 розрядів, поле номера блоку в секції (в кеш пам'яті) n = 9 розрядів, поле адреси слова в блоці m - 5 розрядів (рис. 10.10b). Зауважимо, що процесор не сприймає структурної інтерпретації адреси, наведеної на рис. 10.10b. Таку інтерпретацію адресі надає лише контролер кеш пам'яті, коли перехоплює цю адресу, що призначена основній пам'яті (в гарвардській архітектурі це може бути як пам'ять даних, так і пам'ять команд). Контролер кеш пам'яті за допомогою дев'яти середніх розрядів слова адреси звертається до визначеного цими розрядами блоку власної пам'яті. Зрозуміло, що шуканий в такий спосіб блок завжди присутній в кеш пам'яті. Адже кеш пам'ять вміщує 512 блоків. Але вміст віднайденого блоку кеш пам'яті може бути копією не одного, а одного з декількох дозволених на копіювання блоків основної пам'яті. Наприклад, до нульового блоку кеш пам'яті дозволено копіювати вміст наступних блоків основної пам'яті: 0, 128, 256, 512 і т. д. Усього до кожного блоку кеш пам'яті можна скопіювати вміст одного з 216 = 65536 блоків основної пам'яті, оскільки ємність основної пам'яті в 65536 разів перевищує ємність кеш пам'яті. Постає завдання визначити, чи є поточне наповнення вказаного блоку кеш пам'яті відповідним до запиту процесора. Завдання розв'язують за допомогою вмісту старших 16 бітів адреси основної пам'яті, які утворюють поле із назвою Тег
Основною перевагою тут є те, що кеш пам'ять має структуру звичайної пам'яті з довільним доступом, тому потрібен лише один компаратор (рис. 10.11).
371
При даному способі відображення кожен рядок кеш пам'яті вміщує наступну інформацію: тег, який вказує вміст блоку з якої секції основної пам'яті переписано до даного блоку кеш пам'яті, розряд достовірності (valid bit V), який вказує чи вміст даного блоку кеш пам'яті дійсно належить блоку основної пам'яті, вказаному s розрядами поля адреси, розряд модифікації (dirty bit D), який інформує про внесення змін до вмісту блоку кеш пам'яті, а також вміст блоку основної пам'яті, вказаного s розрядами поля адреси. Коли процесору потрібний операнд із блоку з певною адресою, контролер кеш пам'яті вибирає з пам'яті тегів відповідний номеру блоку в кеш пам'яті тег, та порівнює його з відповідними г розрядами адреси, в яких вказано тег. При наявності в кеш пам'яті відповідного тега та при одиничному значенні розряду достовірності кеш пам'ять видає сигнал підтвердження попадання та надає доступ до відповідного блоку
Отже пам'ять такого типу може мати велику ємність. Основний недолік закріплення за кожним блоком однієї секції основної пам'яті одного блоку в кеш пам'яті, тому в кеш пам'яті може знаходитись обмежене число вмісту блоків основної пам'яті Якщо процесор почергово звертається до даних з двох різних секцій основної пам'яті, які відображаються на той же блок кеш пам'яті, то ймовірність попадання буде низькою. Як наслідок, збільшується кількість промахів і, відповідно, час звернення до пам'яті
10.2.4.4. Частково-асоціативне відображення
Взаємодія основної пам'яті з кеш пам'яттю з використанням частково-асоціативного відображення показана на рис. 10.12а. Тут послідовно розміщені блоки кеш пам'яті об'єднуються в сектори рівної ємності. Зазвичай один сектор містить 2, 4, 8 блоків. Основна пам'ять ділиться на секції, за кожною з яких закріплюється тег, що вказує номер секції. Кількість таких секцій рівна відношенню ємності основної пам'яті до ємності секції. При цьому ємність секції рівна відношенню ємності кеш пам'яті до кількості блоків в секторі кеш пам'яті. Тобто кількість блоків в секції основної пам'яті рівна кількості блоків в кеш пам'яті, поділеній на кількість блоків в секторі кеш пам'яті. Таким чином, в такій реалізації, як і при прямому відображенні, використовується схема вибору сектора в кеш пам'яті за молодшими розрядами адреси блоку основної пам'яті, але в такому секторі кеш пам'яті знаходиться одразу вміст декількох блоків основної пам'яті, вибір між якими здійсню-